前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue自定义指令实现拖拽功能

Vue自定义指令实现拖拽功能

作者头像
前端黑板报
发布2020-09-01 17:22:56
1.3K0
发布2020-09-01 17:22:56
举报

效果

HTML:

<div id='app'>
  <!-- v-drag 是自定义指令,加上该指令的元素,可以被自由拖拽 -->
  <div class="box" v-drag></div>
</div>

CSS:

.box {
  width: 150px;
  height: 150px;
  background: orange;
}

JS:

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
  // 自定义指令 v-drag
  Vue.directive('drag', function(el) {
    el.style.position = 'absolute'
    el.onmousedown = function(ev) {
      console.log(ev)
      // 用元素距离视窗的X、Y坐标,减去el元素最近的相对定位父元素的left、top值
      var sX = ev.clientX - el.offsetLeft
      var sY = ev.clientY - el.offsetTop
      document.onmousemove = function(ev) {
        var eX = ev.clientX - sX
        var eY = ev.clientY - sY
        // 不断地更新元素的left、top值
        el.style.left = eX + 'px'
        el.style.top = eY + 'px'
      }
      document.onmouseup = function() {
        // 清除mousemove事件
        document.onmousemove = null
      }
    }
  })
  // 创建Vue实例
  var app = new Vue({el: '#app'})
</script>

目前10000+人已关注加入我们

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端黑板报 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档