我是靠谱客的博主 威武蜜蜂,最近开发中收集的这篇文章主要介绍js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题:js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框?

  • 方案一:这个问题通常的办法是使用阻止事件冒泡来实现,代码如下(省略css):
    <body>
    <button id="btn1" onclick="alertBoxFn();stopBubble()">打开弹窗</button>
    <div id="alertBox" onclick="stopBubble()"></div>
    </body>
    <script>
    function alertBoxFn(e) {
    alertBox.style.display = "block";
    }
    function stopBubble(e){
    var e=e||window.event;
    e.stopPropagation()
    }
    document.body.addEventListener('click', function() {
    alertBox.style.display = 'none'
    })
    </script>

但这有一个弊端,就是如果页面上需要有多个按钮分别控制多个弹框,需求是点击按钮1时显示弹框1,点击按钮2时显示弹框2,同时隐藏弹框1。但结果却是点击按钮2时,按钮1并不会隐藏。这是因为按钮2阻止了点击事件的冒泡,导致body元素的点击事件并没有被触发。于是,这里我们不能再使用阻止事件冒泡的方法了。

  • 方案二:声明一个变量用来判断鼠标是否点击的是按钮或弹框。代码如下(省略css):
    <body>
    <button id="btn" onclick="alertBoxFn()">打开弹窗</button>
    <div id="alertBox" onclick="outside=false"></div>
    </body>
    <script>
    var outside=true
    function alertBoxFn(e) {
    outside=false
    alertBox.style.display = "block";
    }
    document.body.addEventListener('click', function() {
    outside=true
    },true)
    document.body.addEventListener('click', function() {
    if(outside){
    alertBox.style.display = 'none'
    }
    })
    </script>

     

如果是在vue的项目中,可以使用插件v-click-outside-x;

http://npm.taobao.org/package/v-click-outside-x

最后

以上就是威武蜜蜂为你收集整理的js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框的全部内容,希望文章能够帮你解决js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部