HTML/CSS

JS实现点击弹出层再点击任意位置隐藏弹出层

阿里云

我们经常使用到弹出层。对于弹出层,原本的意义就是增加与用户的交互,提升用户的好感度。我们在使用的时候需要注意几个弹出层的注意点:

弹出层的界面需要统一,不一致的弹出层并不能增加美感,相反还会显得页面布局更加杂乱无章;

也想出现在这里?联系我们
创客主机

弹出层的设计一定要好看,按钮要符合项目的主色调;

弹出层的宽度固定屏幕占比,设置 max-width,高度根据内容自适应;

点击其他区域能隐藏弹出层。

今天,主要说说点击其他区域隐藏弹出层 什么是事件冒泡?为什么要使用它?

事件冒泡:由最具体的元素接收(当前节点),然后逐级向上传播至最不具体的元素的节点(document);

在实现点击其他区域隐藏弹出层时,需要对 document 绑定点击事件,而事件冒泡会使点击其它节点时仍然触发该事件,从而造成事件冲突,导致该显示弹出层时显示不出,不该隐藏时却又隐藏了弹出层。。余斗被这个效果折磨了很久,皆是因为对事件冒泡的理解不够已经错误处理。

  1. <style type="text/css">
  2.         .layer-container{
  3.                 position: absolute;
  4.                 top: 0;
  5.                 left: 0;
  6.                 width: 100%;
  7.                 height: 100%;
  8.                 background-color: rgba(0, 0, 0, 0.5);
  9.                 display: flex;
  10.                 justify-content; center;
  11.                 align-items: center;
  12.                 display: none;
  13.         }
  14.         .layer-main{
  15.                 width: 75%;
  16.                 padding: 20px;
  17.                 max-width: 400px;
  18.         }
  19. </style>
  20.  
  21. <body>
  22. <button>显示弹出层</button>
  23.  
  24. <div class="layer-container">
  25.         <div class="layer-main">
  26.                   <div class="layer-header"></div>
  27.                   <div class="layer-content"></div>
  28.                   <div class="layer-footer">
  29.                           <div class="layer-button">确认</div>
  30.                 </div>
  31.         </div>
  32. </div>
  33.  
  34. <script>
  35.         //点击按钮,显示弹出层
  36.         $("button").bind("click", function(){
  37.                 $(".layer-container").css("display", "flex");
  38.                 event.stopPropagation();//==========阻止冒泡1
  39.         })
  40.         //点击其他区域,隐藏弹出层
  41.         $(document).bind("click", function(){
  42.                 $(".layer-container").css("display", "none");
  43.         })
  44.         //点击弹出层内确认按钮
  45.         $(".layer-button").bind("click", function(){
  46.                 console.log("点击了确认按钮")
  47.         })
  48.         //给弹出层绑定点击事件,阻止冒泡
  49.         $(".layer-main").bind("click", function(){
  50.                 event.stopPropagation();//==========阻止冒泡2
  51.         })
  52. </script>
  53. </body>

说明:

$(document)即给整个文档绑定点击事件,点击则隐藏弹出层 container;

$("button")给按钮绑定点击事件,点击即显示弹出层 container;

此处必须加 event.stopPropagation()阻止冒泡,否则先执行 button 的事件显示弹出层 container,又向上冒泡执行 document 事件隐藏弹出层 container,导致最终点击没有效果;

$(".layer-main")给弹出层 main 绑定点击事件,点击它或冒泡到它时,即阻止继续冒泡到 document;

此处的点击事件以及阻止冒泡必须加,否则点击弹出层 main 或里面的其他节点,都会冒泡到 document,从而隐藏弹出层 container,导致事件紊乱。

其实,还可以通过事件的目标(event.target)来识别当前点击的节点,从而进行接下来的操作,比如对指定的节点的特殊操作

==>>除指定区域外点击任何区域都隐藏 div:

  1. $('body').click(function(e) {
  2.         var target = $(e.target);
  3.         // 如果#layer或者#btn下面还有子元素,可使用
  4.         // !target.is('#btn *') && !target.is('#layer *')
  5.         if(!target.is('#btn') && !target.is('#layer')) {
  6.               if ( $('#layer').is(':visible') ) {
  7.                         $('#layer').hide();
  8.               }
  9.         }
  10. });
  11.  
  12. $('body').click(function(e) {
  13.       if(e.target.id != 'btn' && e.target.id != 'overlay')
  14.             if ( $('#layer').is(':visible') ) {
  15.                   $('#layer').hide();
  16.             }
  17. })

JS 实现点击弹出层再点击任意位置隐藏弹出层

已有 399 人购买
查看演示升级 VIP立刻购买

收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!