zoukankan      html  css  js  c++  java
  • clickoutside 代码实现

    clickoutside

    原理就是,监听click事件,获取dom的元素,与弹出的元素和触发的元素对比(使用contains方对比),如果是子元素就返回false,否则就执行callback函数
    Node.contains()返回的是一个布尔值,来表示传入的节点是否为该节点的后代节点。
    最后不使用时需要销毁,需要调用removeEventListener

    clickOutSide(
             /*绑定的元素*/
            document.getElementById("h1"),
            /*弹出的元素*/
            document.getElementById("pop"),
            /*执行回调*/
            function (e) {
              console.log("callback", e);
            }
          );
    
          function clickOutSide(el, popItem, callback) {
            document.addEventListener("click", function (e) {
              let elements = e.path;
              //如果是弹出元素
              if (isPop(elements, popItem) || el.contains(e.target)) {
                return;
              } else {
                callback(e);
              }
            });
          }
    
          function isPop(elements, popItem) {
            if (elements && elements.length > 0 && popItem) {
              for (let i = 0; i < elements.length; i++) {
                try {
                  //表示肯定是popItem的父元素
                  if (elements[i].contains(popItem)) {
                    return false;
                  }
                  if (popItem.contains(elements[i])) {
                    return true;
                  }
                } catch (e) {
                  return false;
                }
              }
            }
            return false;
          }
    
  • 相关阅读:
    cl编译器命令行调试问题
    西电计算机专业培养
    GCN代码实现
    GCN介绍
    cpu密集型任务及IO密集型任务,GIS,多进程及多线程
    骨架提取
    视频文件的一些属性
    空洞填充
    凸包,二值图家矩形框
    RGB图片取大于阈值部分
  • 原文地址:https://www.cnblogs.com/heihei-haha/p/14548496.html
Copyright © 2011-2022 走看看