自定義v-drag拖拽指令

當(dāng)前模板添加指令 解決a標(biāo)簽跳轉(zhuǎn)問題

  directives: {
    drag: { // 拖拽指令
      inserted: function (el) {
        el.onmousedown = function (ev) {
          el.setAttribute('data-flag', false)
           // 用元素距離視窗的X、Y坐標(biāo),減去el元素最近的相對定位父元素的left、top值
          var sX = ev.clientX - el.offsetLeft
          var sY = ev.clientY - el.offsetTop
          // 不斷地更新元素的left、top值
          document.onmousemove = function (ev) {
            el.style.left = ev.clientX - sX + 'px'
            el.style.top = ev.clientY - sY + 'px'
          }
          const firstTime = new Date().getTime();
          document.onmouseup = function (event) {
            document.onmousemove = null
            document.onmouseup = null;
            const lastTime = new Date().getTime();
            if (lastTime - firstTime < 200) {
              el.setAttribute('data-flag', true)
            }
          }
        }
      }
    }
  }

模板代碼和樣式

    <a
      ref="eleDesgin"
      v-drag
      data-flag="true"
      title="設(shè)計模式"
      class="to_desgin"
      @click="gotoPreview"
    ><i class="iconfont icon-shezhi"></i></a>
.to_desgin {
  user-select: none;
  text-decoration: none;
  cursor: pointer;
  position: fixed;
  width: 40px;
  height: 40px;
  line-height: 40px;
  border-radius: 5px;
  bottom: 20px;
  right: 20px;
  text-align: center;
  z-index: 9999;
  .iconfont {
    font-size: 20px;
    color: #fff;
  }
}

操作方法

gotoPreview() {
    let isDrag = this.$refs.eleDesgin.getAttribute('data-flag')
    if (isDrag === 'true') {
        window.open('/pc/page?')
     }
}

如果對您有幫助,麻煩點個贊再走,謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容