zoukankan      html  css  js  c++  java
  • [vue][element-ui]mousedown在Dialog上 mouseup在遮罩上时自动关闭弹窗的问题总结

    感谢文章作者

    https://www.jianshu.com/p/f39dcce1d5b3

    问题描述

    在使用element-ui在chrome版本为73+时,mousedown在Dialog上 mouseup在遮罩上时弹窗自动关闭。但是用户希望弹窗不关闭,比如,在弹窗中复制文本很容易不小心拖出弹窗外。
    

    原因

    js的点击事件机制在chrome73+时,表现问题(打个问号??待深入)
    

    优化

    不使用click事件,改用mousedown和mouseup事件。在mousedown的时候记录一下触发区域是不是在遮罩层上,然后再在mouseup的时候再判断一下,如果两个出发区域都是在遮罩层上面,再执行关闭函数,否则,不关闭。
    

    修改源码方法

    1.下载element源码

    下载地址:https://github.com/ElemeFE/element.git

    2.执行npm install下载相关依赖

    这个过程可能会出现一些nodejs报错,部分解决方案查看:
    https://www.cnblogs.com/danker/p/12409165.html
    https://www.cnblogs.com/danker/p/12409116.html

    3.打开文件夹element-dev/packages/dialog/src里的vue文件并修改

    // 找到这个元素`class="el-dialog__wrapper"`,去掉点击事件,增加mousedown和mouseup事件:
    <div v-show="visible" class="el-dialog__wrapper" @mousedown="handleWrapperMousedown($event)" @mouseup="handleWrapperMouseup($event)">
    
    ...
    
    //增加对应mousedownClassBol
    data() {
      return {
        mousedownClassBol: false
      };
    },
    
    ...
    
    //增加对应事件
    handleWrapperMousedown(e) {
      this.mousedownClassBol = !!e.target.classList.contains('el-dialog__wrapper');
    },
    handleWrapperMouseup(e) {
      if (!!e.target.classList.contains('el-dialog__wrapper') && this.mousedownClassBol) {
        this.mousedownClassBol = false;
        this.handleWrapperClick();
      }
    },
    

    4.执行命令 npm run dist

    5.将生成的lib文件夹覆盖项目中的node_modules/element-ui下的lib文件夹,重新编译启动项目即可解决。

    坚持,坚持,坚持。再坚持坚持!
  • 相关阅读:
    uC/OS-II内核的服务文件
    uC/OS-II汇编代码
    uC/OS-II类型定义
    uC/OS-II核心(Os_core)块
    uC/OS-II配置文件
    uC/OS-II应用程序exe
    uC/OS-II应用程序代码
    技术人员如何创业《四》- 打造超强执行力团队(转载)
    最近做抽奖的活动
    install docker
  • 原文地址:https://www.cnblogs.com/danker/p/12458875.html
Copyright © 2011-2022 走看看