!
也想出现在这里? 联系我们
广告位

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. <body>
  21. <button>显示弹出层</button>
  22. <div class="layer-container">
  23. <div class="layer-main">
  24. <div class="layer-header"></div>
  25. <div class="layer-content"></div>
  26. <div class="layer-footer">
  27. <div class="layer-button">确认</div>
  28. </div>
  29. </div>
  30. </div>
  31. <script>
  32. //点击按钮,显示弹出层
  33. $("button").bind("click", function(){
  34. $(".layer-container").css("display", "flex");
  35. event.stopPropagation();//==========阻止冒泡1
  36. })
  37. //点击其他区域,隐藏弹出层
  38. $(document).bind("click", function(){
  39. $(".layer-container").css("display", "none");
  40. })
  41. //点击弹出层内确认按钮
  42. $(".layer-button").bind("click", function(){
  43. console.log("点击了确认按钮")
  44. })
  45. //给弹出层绑定点击事件,阻止冒泡
  46. $(".layer-main").bind("click", function(){
  47. event.stopPropagation();//==========阻止冒泡2
  48. })
  49. </script>
  50. </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. $('body').click(function(e) {
  12. if(e.target.id != 'btn' && e.target.id != 'overlay')
  13. if ( $('#layer').is(':visible') ) {
  14. $('#layer').hide();
  15. }
  16. })

给TA打赏
共{{data.count}}人
人已打赏
前端学习

前端开发 CSS 常见布局方式学习及总结

2024-9-10 11:34:11

前端学习

CSS3渐变色的实现方法讲解

2024-9-12 11:33:55

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索