美文网首页
vue前端元素任意拖拽效果-解决拖拽有时失效问题、不能快速拖拽问

vue前端元素任意拖拽效果-解决拖拽有时失效问题、不能快速拖拽问

作者: who_are_you_ | 来源:发表于2021-04-25 15:09 被阅读0次

vue - main.js文件

// 在vue  main.js文件中加上这个,然后就可以使用vue的快捷指令
Vue.directive("drag", {
  inserted: function(el){
      let odiv = el;   //获取当前元素
      odiv.onmousedown = (e) => {
          //算出鼠标相对元素的位置
          let disX = e.clientX - odiv.offsetLeft;
          let disY = e.clientY - odiv.offsetTop;
          // 为什么用document:如果绑定到元素本身的情况下,鼠标拖动过快,鼠标会离开拖拽的元素,导致拖拽一段距离,拖拽失效的问题
          document.onmousemove = (e)=>{
              //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
              let left = e.clientX - disX;
              let top = e.clientY - disY;
              //绑定元素位置到positionX和positionY上面
              // this.positionX = top;
              // this.positionY = left;
              let FWidth = el.parentNode.offsetWidth - el.offsetWidth;
              let FHeight = el.parentNode.offsetHeight - el.offsetHeight;
              //移动当前元素
              // console.log('left' + left);
              // console.log('top' + top);
              // 判断当前元素可以活动的区域
              if (left <= 0) {
                odiv.style.left = 0 + 'px';
              } else if (left >= FWidth) {
                odiv.style.left = FWidth + 'px';
              } else if (left > 0) {
                odiv.style.left = left + 'px';
              }
              if (top <= 0) {
                odiv.style.top = 0 + 'px';
              } else if (top >= FHeight) {
                odiv.style.top = FHeight + 'px';
              }  else if (top > 0) {
                odiv.style.top = top + 'px';
              }
          };
          document.onmouseup = (e) => {
              document.onmousemove = null;
              document.onmouseup = null;
          };
      };
  }
});

vue文件使用:

<template>
<div style="width: 100%; position: relative; height: 500px;border: 1px solid; overflow: hidden; box-sizing: border-box;" >
            <div :style="{width: '100px', height: '40px',border: '1px solid',position: 'absolute', zIndex: 2000 + index,left: index *110 + 'px', top: '10px'} " class="shape" v-drag v-for='(item, index) in 4' :key='index'>
            {{index}}
            </div>
            <div style="width: 100%; height: 440px; border: 1px solid; margin-top: 60px;">
            </div>
 </div>
</template>
<style lang='scss' scoped>
// 设置元素不可复制 解决了拖动时会拖掉的问题
.shape {
    -moz-user-select:none; /* Firefox私有属性 */
    -webkit-user-select:none; /* WebKit内核私有属性 */
    -ms-user-select:none; /* IE私有属性(IE10及以后) */
    -khtml-user-select:none; /* KHTML内核私有属性 */
    -o-user-select:none; /* Opera私有属性 */
    user-select:none; /* CSS3属性 */
}
</style>

相关文章

  • vue前端元素任意拖拽效果-解决拖拽有时失效问题、不能快速拖拽问

    vue - main.js文件 vue文件使用:

  • HTML5拖拽drag

    通过拖拽实现页面元素的位置改变 实现拖拽效果 源元素 - 要拖拽的文件 目标元素 - 要拖拽到哪里去 目前实现拖拽...

  • 拖拽API

    实现拖拽效果 目前实现拖拽效果 HTML5拖拽 源元素事件例子 目标元素事件 从本地拖放图片到页面中 实现拖拽

  • HTML5实现拖拽

    实现拖拽效果源元素 - 要拖拽的文件目标元素 - 要拖拽到哪里去 目前实现拖拽效果使用原生DOM就能实现 - 最麻...

  • 拖拽上传

    拖拽事件 拖拽元素ondrag 应用于拖拽元素,整个拖拽过程都会调用ondragstart应用于拖拽元素,...

  • Vue小商城学习记录

    初期几天以后补 2018.6.1 用touch事件实现元素拖拽,拖拽元素不能加transition,否则拖拽结束才...

  • 仿QQ邮箱上传文件

    实现效果: 涉及的知识点包括: 1.拖拽 设置成true,元素就可以拖拽拖拽元素事件 dragstartdrag...

  • Html5 + Css 3 文件拖拽上传功能

    拖拽上传文件功能 拖拽事件 拖拽元素ondrag 应用于拖拽元素,整个拖拽过程都会调用ondragstart应用...

  • 前端拖拽后端数据处理

    前端拖拽后端数据处理 问题来源 前端开发做表格展现的时候,遇到需要拖拽变更数据顺序的问题,前端使用拖拽功能或者其他...

  • 元素拖曳 H5

    拖拽 如何让一个元素变成拖拽元素 draggable=‘true’ ondrag 应用于拖拽元素,整个拖拽过程都会...

网友评论

      本文标题:vue前端元素任意拖拽效果-解决拖拽有时失效问题、不能快速拖拽问

      本文链接:https://www.haomeiwen.com/subject/dtmdrltx.html