zoukankan      html  css  js  c++  java
  • 实现对话框点击其它地方关闭对话框

    前言

      工作时,很多UI组件库的样式未必是项目需要的,这个时候可能要自己手写一个,例如对话框,但写完之后项目往往有要求,点击空白处关闭对话框,之前我的解决方式都是加上透明的背景,然后点击背景就关闭了对话框,不过这种方式有个缺点,就是如果客户要点击另一个按钮,需要点第一次关闭了对话框,再点一次才能点到,那么体验感就很不好,于是我研究了UI框架里的对话框确实不需要像我那样加个背景层,经过多次试验,总算解决了这个问题,今天有空就分享给大家。

    思路

      利用mouseup等监听鼠标事件的方法(移动端就换成点击事件),判断点击的区域是否自己要排除的区域,如果不是,就触发对话框的关闭事件。

      // 原生dom的写法
      document.documentElement.onmousedown = (e=>{
        // 如果会出现多个不同的dialog这里就用循环,现在先默认写死只有一个
        let dialog = document.getElementsByClassName("dialog")[0];
        if(dialog && !document.getElementsByClassName("dialog")[0].contains(e.target)) document.getElementsByClassName("dialog")[0].style.top = '-50%';
      })
    
      // jQuery的写法
      $(document).mouseup(e=>{
        let dialog = $('.dialog');
        if(dialog && !dialog.is(e.target)) dialog.css("top","-50%");
      });

    完整代码:git@github.com:13632756286/Dialog.git

  • 相关阅读:
    「SDOI2009」Bill的挑战
    「HAOI2011」Problem c
    HDU3530【STL/单调队列/RMQ】
    HDU2874【倍增、ST】
    POJ2955【区间DP】
    SPOJ375 Query on a tree 【倍增,在线】
    训练[2]-DFS
    Fighting For 2017 Season Contest 1
    POJ2796/DP/单调栈
    New Year Tree 【DFS序+线段树区间查询修改+二进制保存状态】
  • 原文地址:https://www.cnblogs.com/zxd66666/p/13121436.html
Copyright © 2011-2022 走看看