解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题


Posted in Javascript onJuly 24, 2020

功能描述:

解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题

解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题

如图,右侧悬浮菜单按钮,只支持上下方向拖动,点击时展开或关闭菜单。

BUG说明:

鼠标上下方向拖拽,如果松开时鼠标位于悬浮按钮上会默认执行click事件,经验证,click事件与mouse事件的执行顺序为onmousedown =》onmouseup =》onclick,意味着在click事件执行时会与与其相关的mouse事件冲突。

解决方案:

因为click事件执行时间短,所以利用鼠标拖动的时间差作为标志,在拖拽事件中计算鼠标从onmousedown 到onmouseup 所用的时间差,与200ms作比较,作为全局变量。由于vue的directives自定义指令中无法使用this,所以个人采用给元素设置属性的方式来解决全局变量的存储问题。

1、自定义上下拖拽指令

说明:指令中没有this关键字,指令中通过el可以直接拿到指令绑定的元素;

directives: {
   drag: {
    // 指令的定义
    bind: function (el) {
     let odiv = el; //获取当前元素
     let firstTime='',lastTime='';
     odiv.onmousedown = (e) => {
      document.getElementById('dragbtn').setAttribute('data-flag',false)
      firstTime = new Date().getTime();
      // 算出鼠标相对元素的位置
      let disY = e.clientY - odiv.offsetTop;
      document.onmousemove = (e) => {
       // 用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
       let top = e.clientY - disY;
       // 页面范围内移动元素
       if (top > 0 && top < document.body.clientHeight - 48) {
        odiv.style.top = top + 'px';
       }
      };
      document.onmouseup = (e) => {
        document.onmousemove = null;
        document.onmouseup = null;
        // onmouseup 时的时间,并计算差值
        lastTime = new Date().getTime();
        if( (lastTime - firstTime) < 200){
         document.getElementById('dragbtn').setAttribute('data-flag',true)
        }
      };
     };
    }
   }
  },

2、悬浮菜单点击事件中进行验证。

click(e) {
 // 验证是否为点击事件,是则继续执行click事件,否则不执行
    let isClick = document.getElementById('dragbtn').getAttribute('data-flag');
    if(isClick !== 'true') {
     return false
    }
    if (!localStorage.settings) {
     return this.$message.error('请选择必填项并保存');
    }
    if (this.right === -300) {
     this.right = 0;
     this.isMask = true;
    } else {
     this.right = -300;
     this.isMask = false;
    }
   },

补充知识:vue 子组件 created 方法不执行问题

近期做了一个项目 里面有一个树形菜单,将数据写在 js (死数据)中,所有的东西都能够正常执行(i 标签,子节点,父节点),但是当在请求接口文件或者请求后台数据的时候,发现引入的子组件的created方法不执行,但是点击父级菜单展开时还是能够触发,后来发现 是生命周期的问题,仔细查看一下,后来解决!

解决方法如下:

用watch 检测一下data的数据变化,created方法既然在点击的时候执行,所以也必须保留,好啦,就这样!

以上这篇解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 元素相对定位代码
Oct 15 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
Nov 08 Javascript
JavaScript 实现鼠标拖动元素实例代码
Feb 24 Javascript
javascript实现playfair和hill密码算法
Dec 07 Javascript
jQuery中hover方法和toggle方法使用指南
Feb 27 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
May 30 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
Apr 13 Javascript
jQuery获取复选框选中的当前行的某个字段的值
Sep 15 jQuery
vue中遇到的坑之变化检测问题(数组相关)
Oct 13 Javascript
在nginx上部署vue项目(history模式)的方法
Dec 28 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
May 26 Javascript
js DOM的事件常见操作实例详解
Dec 16 Javascript
深入了解Vue.js 混入(mixins)
Jul 23 #Javascript
JS实现简单移动端鼠标拖拽
Jul 23 #Javascript
JS使用Chrome浏览器实现调试线上代码
Jul 23 #Javascript
JS实现鼠标按下拖拽效果
Jul 23 #Javascript
javascript利用canvas实现鼠标拖拽功能
Jul 23 #Javascript
JS如何实现封装列表右滑动删除收藏按钮
Jul 23 #Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
Jul 23 #Javascript
You might like
用户的详细注册和判断
2006/10/09 PHP
PHP HTML代码串 截取实现代码
2009/06/29 PHP
PHP daddslashes 使用方法介绍
2012/10/26 PHP
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
javascript下function声明一些小结
2007/12/28 Javascript
javascript indexOf函数使用说明
2008/07/03 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
提升jQuery的性能需要做好七件事
2016/01/11 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
我就是这样学习Python中的列表
2019/06/02 Python
python内打印变量之%和f的实例
2020/02/19 Python
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
个人评价范文分享
2014/01/11 职场文书
买房子个人收入证明
2014/01/16 职场文书
决定成败的关键——创业计划书
2014/01/24 职场文书
毕业生自荐信格式
2014/03/07 职场文书
职业生涯规划书前言
2014/04/15 职场文书
秘书英文求职信
2014/04/16 职场文书
演讲稿格式范文
2014/05/19 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
新人入职感言
2015/07/31 职场文书
基督教追悼会答谢词
2015/09/29 职场文书
小学生大队委竞选稿
2015/11/20 职场文书