From c1514cfc69b679d05398bb1def6b24c772426aa0 Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期二, 14 二月 2023 09:11:46 +0800
Subject: [PATCH] 综合展示图层管理图标切换

---
 src/components/mapol.vue |  138 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 136 insertions(+), 2 deletions(-)

diff --git a/src/components/mapol.vue b/src/components/mapol.vue
index fe89722..1a78887 100644
--- a/src/components/mapol.vue
+++ b/src/components/mapol.vue
@@ -9,16 +9,35 @@
         id="cenBg"
         v-bind:class="{ active: isActive, menuLayer: isMenuLayer }"
       ></div>
+
+    </div>
+    <div v-show="$store.state.isNaviget"  class="sindagis-map-compass">
+      <span
+        class="left"
+        @click="leftClick"
+      ></span>
+      <span
+        class="center"
+        @click="recoveryClick"
+        :style="{transform: `rotate(${rotate}deg)`}"
+      ></span>
+      <span
+        class="right"
+        @click="rightClick"
+      ></span>
     </div>
   </div>
 </template>
 
 <script>
+
+import { easeOut } from 'ol/easing'
 import TileLayer from "ol/layer/Tile"
 import XYZ from "ol/source/XYZ"
 import Map from "ol/Map"
 import View from "ol/View"
 import { transform } from "ol/proj"
+
 import {
   OverviewMap,
   defaults as defaultControls,
@@ -37,6 +56,8 @@
       centerFlag: false,
       isActive: true,
       isMenuLayer: false,
+      rotate: 0,
+      currentDir: ''
     }
   },
   mounted() {
@@ -64,10 +85,20 @@
         }),
         controls: defaultControls().extend([
           new FullScreen(),
-          new ScaleLine(),
+          
         ]),
         interactions: defaultInteractions().extend([new DragRotateAndZoom()]),
       })
+      // var scaleLine = new  ScaleLine({
+      //   units: "metric"
+      // });
+      // map.addControl(scaleLine);
+
+      map.on("moveend", function (e) {
+        console.log(($(window).width() - $(".ol-scale-line-inner").width()) + "px");
+        // $(".ol-scale-line").css("left", ($(window).width() - $(".ol-scale-line").width() - 25) + "px");
+      });
+
     },
 
     changeMenulayer() {
@@ -84,11 +115,54 @@
         map.getLayers().item(1).setVisible(false)
       }
     },
+    leftClick() {
+      var view = map.getView();
+      var center = map.getView().getCenter();
+      var rotation = map.getView().getRotation();
+      rotation = rotation - Math.PI / 2
+      this.rotate -= 90
+      view.animate({
+        center: center,                                            //鏃嬭浆涓績鐐�
+        rotation: rotation,
+        easing: easeOut                               //鏃嬭浆閫熷害
+      })
+      this.currentDir = 'left'
+    },
+    recoveryClick() {
+      var view = map.getView();
+      var center = map.getView().getCenter();
+      let a = this.rotate % 360 // -270
+      if (a != 0) { // 澶嶄綅
+        let dis = 360 - Math.abs(a)
+        let dis1 = Math.abs(a)
+        dis = dis > dis1 ? dis1 : dis
+        if (dis == 180) dis = -180
+        this.rotate = (this.rotate + dis) % 360 == 0 ? this.rotate + dis : this.rotate - dis
+      }
+      view.animate({
+        center: center,
+        rotation: 0,
+        easing: easeOut
+      })
+    },
+    rightClick() {
+      var view = map.getView();
+      var center = map.getView().getCenter();
+      var rotation = map.getView().getRotation();
+      rotation = rotation + Math.PI / 2
+      this.rotate += 90
+      view.animate({
+        center: center,
+        rotation: rotation,
+        easing: easeOut
+      })
+      this.currentDir = 'right'
+    },
   },
 }
 </script>
 
-<style scoped>
+<style lang="scss" scoped>
 #mapol {
   width: 100%;
   height: 100%;
@@ -147,4 +221,64 @@
   background-size: 100% 100%;
   border-radius: 5px;
 }
+.ol-scale-line {
+  bottom: 55px !important;
+}
+
+.sindagis-map-compass {
+  position: absolute;
+  right: 50px;
+  bottom: 90px;
+  z-index: 5;
+  right: 25px;
+  width: 52px;
+  height: 54px;
+  background: url("../assets/img/compass.png") 0% 0% / 266px no-repeat;
+}
+
+.sindagis-map-compass .left,
+.sindagis-map-compass .center,
+.sindagis-map-compass .right {
+  position: absolute;
+  outline: none;
+  border: none;
+  cursor: pointer;
+  opacity: 1;
+}
+
+.sindagis-map-compass .left {
+  background: url("../assets/img/compass.png") -75px -5px / 266px no-repeat;
+  left: 2px;
+  top: 5px;
+  z-index: 1;
+  width: 15px;
+  height: 42px;
+}
+
+.sindagis-map-compass .left:hover {
+  background: url("../assets/img/compass.png") -89px -5px / 266px no-repeat;
+}
+
+.sindagis-map-compass .center {
+  background: url("../assets/img/compass.png") -56px -4px / 266px no-repeat;
+  left: 19px;
+  top: 4px;
+  width: 14px;
+  height: 44px;
+  transform: rotate(0deg);
+  transition: 1s;
+}
+.sindagis-map-compass .right {
+  background: url("../assets/img/compass.png") -75px -5px / 266px no-repeat;
+  right: 2px;
+  top: 5px;
+  z-index: 1;
+  width: 15px;
+  height: 42px;
+  transform: scaleX(-1);
+}
+.sindagis-map-compass .right:hover {
+  background: url("../assets/img/compass.png") -89px -5px / 266px no-repeat;
+}
+
 </style>

--
Gitblit v1.9.3