<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Vue+高德地圖巡航軌跡,實(shí)現(xiàn)軌跡回放加進(jìn)度條,加減速

      應(yīng)公司業(yè)務(wù)要求,給軌跡回放加個(gè)滾動(dòng)條,一開始我采用的是高德地圖的折線繪制,但是如果要加上進(jìn)度條并不太不合適,拖動(dòng)滾動(dòng)條,點(diǎn)位沒有恢復(fù)的API,后來決定使用巡航軌跡,巡航軌跡支持更豐富的軌跡API,使用起來也更方便。

      下面是做完的效果圖:

       

       

       

      使用的技術(shù)有:vue,高德地圖1.4(amap),element-UI

      下面的是部分源碼:

      html部分

      <template>
        <div id="demo">
          <div id="test-map" />
          <!--控制條-->
          <div class="map-control" v-show="isActual">
            <!--播放暫停按鈕-->
            <Icon
              v-if="!isPlay"
              class="play-icon"
              type="ios-play"
              @click="isPlay=true;navgControl('start')"
            />
            <Icon v-else class="play-icon" type="ios-pause" @click="isPlay=false;navgControl('pause')"/>
            <!--已播放時(shí)間-->
            <span class="passed-time">{{passedTime}}</span>
            <!--進(jìn)度條-->
            <el-slider v-model="sliderVal" :format-tooltip="hideFormat" :step="0.0001"></el-slider>
            <!--倍速-->
            <div class="map-times" @mouseenter="isTimesChoose=true" @mouseleave="isTimesChoose=false">
              <div class="times-show">倍速 {{times}}</div>
              <div class="choose-box">
                <ul v-show="isTimesChoose">
                  <li v-for="item in speedList" :key="item.value" :class="{active:times==item.value}" @click="changeSpeed(item.value)">{{item.label}}</li>
                </ul>
              </div>
            </div>
            <!--結(jié)束時(shí)間-->
            <span class="passed-time">{{totalTime}}</span>
          </div>
        </div>
      </template>
      

      JS處理部分:

      1.初始化地圖:

      lazyAMapApiLoaderInstance.load().then(() => {
              this.map = new AMap.Map('test-map', {
                zooms: [13, 18], // 地圖縮放范圍
                center: new AMap.LngLat(116.397428, 39.90923)
              })
              this.initPathSimplifier()
            })

      2.初始化組件實(shí)例

      // 初始化組件實(shí)例
            initPathSimplifier() {
              let that = this
              AMapUI.load(['ui/misc/PathSimplifier'], (PathSimplifier) => {
                if (!PathSimplifier.supportCanvas) {
                  alert('當(dāng)前環(huán)境不支持 Canvas!')
                  return
                }
                //創(chuàng)建一個(gè)巡航軌跡路線
                that.pathSimplifierIns = new PathSimplifier({
                  zIndex: 100,//地圖層級(jí),
                  map: this.map, //所屬的地圖實(shí)例
                  //巡航路線軌跡列表
                  getPath: (pathData, pathIndex) => {
                    return pathData.path;
                  },
                  //hover每一個(gè)軌跡點(diǎn),展示內(nèi)容
                  getHoverTitle: function(pathData, pathIndex, pointIndex) {
                    if (pointIndex >= 0) {
                      return pathData.name + ',點(diǎn):' + pointIndex + '/' + pathData.path.length;
                    }
                    return pathData.name + ',點(diǎn)數(shù)量' + pathData.path.length;
                  },
                  //自定義樣式,可設(shè)置巡航器樣式,巡航軌跡樣式,巡航軌跡點(diǎn)擊、hover等不同狀態(tài)下的樣式,不設(shè)置則用默認(rèn)樣式,詳情請(qǐng)參考api文檔 renderOptions:{}
                  //繪制路線節(jié)點(diǎn)
                  renderOptions: {
                    renderAllPointsIfNumberBelow: 100 //繪制路線節(jié)點(diǎn),如不需要可設(shè)置為-1
                  }
                });
      
                //設(shè)置數(shù)據(jù)
                that.pathSimplifierIns.setData([{
                  name: '路線0',
                  path: that.actualList
                }]);
                //對(duì)第一條線路(即索引 0)創(chuàng)建一個(gè)巡航器
                that.navgtr = that.pathSimplifierIns.createPathNavigator(0, {
                  loop: false, //循環(huán)播放
                  speed: that.navgtrSpeed //巡航速度,單位千米/小時(shí)
                });
      
                that.navgtr.on("start resume", function() {
                  that.navgtr._startTime = Date.now();
                  that.navgtr._startDist = this.getMovedDistance();
                });
                that.navgtr.on("stop pause", function() {
                  that.navgtr._movedTime = Date.now() - that.navgtr._startTime;
                  that.navgtr._movedDist = this.getMovedDistance() - that.navgtr._startDist;
                });
                that.navgtr.on("move", function(data,position) {
                  let idx = position.dataItem.pointIndex //走到了第幾個(gè)點(diǎn)
                  let tail = position.tail //至下一個(gè)節(jié)點(diǎn)的比例位置
                  let totalIdx = idx + tail
                  let len = position.dataItem.pathData.path.length
      
                  // 計(jì)算下一個(gè)距離速度
                  if (idx < len - 1) {
                    that.navgtr.setSpeed(that.navgtrSpeed * that.times);
                  }
                  // 進(jìn)度條實(shí)時(shí)展示tail
                  !that.isOnSlider && (that.sliderVal = (totalIdx / len) * 100);
                  // 如果到頭了,回到初始狀態(tài)
                  if (that.navgtr.isCursorAtPathEnd()) {
                    that.playIcon = "start";
                    that.isPlay = false;
                    that.sliderVal = 0;
                    that.passedTime = that.totalTime;
                  }
                });
              })
            },

      3.關(guān)鍵方法,控制車輛跟隨進(jìn)度條移動(dòng)

      sliderChange(val){
              let newVal = typeof(newVal)==='number' ? val : this.sliderVal
              let num = parseInt((newVal / 100) * this.actualList.length);
              let decimal = String((newVal / 100) * this.actualList.length).split('.')[1]||0
              this.navgtr.moveToPoint(num, Number('0.'+decimal));
              this.pathSimplifierIns.renderLater();
            },

      4.對(duì)滑塊設(shè)置監(jiān)聽

      watch:{
        sliderVal(newVal) {
         if (!this.isOnSlider) {
          return false;
         }
         this.sliderChange(newVal)
       }
      },

      let that = this;
      let el = document.getElementsByClassName("el-slider__button-wrapper")[0];
      let el2 = document.getElementsByClassName("el-slider__runway")[0];
      el2.addEventListener("click", that.sliderChange,false);
      el.addEventListener("mousedown", that.openSlider,false);
      // 此處用document是因?yàn)椋瑒?dòng)較為隨意時(shí),mouseup可能不是作用在el上
      document.addEventListener("mouseup",that.closeSlider,false);

      源碼地址:
      鏈接:https://pan.baidu.com/s/120Mcfc27aWXaYviigxFnFQ 
      提取碼:god7

      參考博客:https://blog.csdn.net/weixin_40579884/article/details/89675275

      posted @ 2020-07-27 14:10  草莓罐頭  閱讀(10732)  評(píng)論(15)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产一区二区不卡在线| 崇明县| 人妻少妇精品视频三区二区| 好姑娘高清影视在线观看| 性姿势真人免费视频放| 日韩有码av中文字幕| 科尔| 欧美日韩国产亚洲沙发| 国产99视频精品免费视频76| 性男女做视频观看网站| 国产av不卡一区二区| 巨爆乳中文字幕爆乳区| 日本污视频在线观看| 成人3D动漫一区二区三区 | 欧美老熟妇乱子伦牲交视频 | 国产熟睡乱子伦视频在线播放| 亚洲无人区码一二三四区| 一二三四中文字幕日韩乱码| 欧美性做爰片免费视频看| 国产性色的免费视频网站| 略阳县| 色www永久免费视频| 无码抽搐高潮喷水流白浆| 冕宁县| 中文字幕人妻丝袜美腿乱| 亚洲色帝国综合婷婷久久| 护士张开腿被奷日出白浆| 亚洲国产亚洲国产路线久久| 亚洲熟妇国产熟妇肥婆| 久久精品午夜视频| 精品素人AV无码不卡在线观看| 久久久精品94久久精品| 日韩精品视频一二三四区| 国产私拍大尺度在线视频| 韩国三级网一区二区三区| 亚洲综合一区国产精品| 国产乱啊有帅gv小太正| 无码国产偷倩在线播放| 久久久久久人妻一区精品| 亚洲中文字幕伊人久久无码| 国产拗精品一区二区三区|