点击页面任何地方,将div隐藏,除了指定位置外 (原生js)

本文详细介绍了如何使用CSS定位属性和JavaScript事件监听器来创建一个可以显示和隐藏的div模块。通过固定定位和过渡效果,div可以平滑地从屏幕外移入并停留在指定位置。同时,通过按钮触发和点击事件,可以精确控制div的显示和隐藏状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html>
 
	<head>
		<meta charset="UTF-8">
		<title></title>
        <style>
            #test{
                position: fixed;
                height: calc(100vh - 20px);
                width: 400px;
                padding: 15px;
                top:20px;
                right: -400px;
                background: skyblue;
                transition: right .3s linear;
            }
            #test.show{
                right: 0px;
            }
            #close{
                display: inline-block;
                padding: 6px;
                cursor: pointer;
            }
        </style>
	</head>
 
	<body>
        <button class="btn">我是一个按钮,我要显示隐藏的div</button>
		<div id="test" class="">
            <div class="title">
                <span id="close">×</span>
            </div>
            <div class="content">
                <input type="text">
                <input type="text">
                <select name="" id=""></select>
                div测试内容,点击除了按钮的其它地方会隐藏此div模块。
            </div>
            <div class="">
                    <button id="save" >我是一个按钮,我要保存</button>
            </div>
        </div>
        <script type="text/javascript">
            document.querySelector(".btn").onclick = function(e){
                window.event? window.event.cancelBubble = true : e.stopPropagation();//阻止冒泡,不进入document的click的回调
                document.getElementById("test").classList.add("show");
            };
            document.querySelector("#close").onclick = function(e){
                window.event? window.event.cancelBubble = true : e.stopPropagation();//阻止冒泡,不进入document的click的回调
                document.getElementById("test").classList.remove("show");
            };
            document.querySelector("#save").onclick = function(e){
                window.event? window.event.cancelBubble = true : e.stopPropagation();//阻止冒泡,不进入document的click的回调
                document.getElementById("test").classList.remove("show");
            };
            document.onclick = function(e){
                var e = e || window.event; //浏览器兼容性 
                var elem = e.target || e.srcElement;
                console.log(elem.getAttribute('class'))
                // if(elem.getAttribute('class')=="btn"){//因为按钮的点击事件已经阻止冒泡了,所以这段代码注释掉;  如果没有阻止冒泡的话,注释要放开
                //     return;
                // }
                while (elem) { //循环判断至跟节点,防止点击的是div#test子元素 
                    if (elem.id && elem.id == 'test') {
                        return;
                    }
                    elem = elem.parentNode;
                }
                document.getElementById("test").classList.remove("show")
            }
            </script>
	</body>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值