<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
body {
height: 100vh;
}
.msg-box {
width: 20px;
height: 20px;
line-height: 20px;
text-align: center;
background-color: #ccc;
position: relative;
border-radius: 50%;
color: #fff;
cursor: pointer;
top: 100px;
left: 50%;
}
.msg {
width: 300px;
height: 100px;
color: #fff;
background-color: green;
position: absolute;
top: 150%;
right: -20%;
display: none;
/* 圆角 */
border-radius: 5px;
}
.msg .arrow {
position: absolute;
top: -20px;
right: 4px;
width: 0;
height: 0;
font-size: 0;
border: 10px solid transparent;
border-bottom-color: red;
}
</style>
</head>
<body>
<div class="msg-box" data-show="0">
?
<div class="msg">
<div class="arrow"></div>
信息内容信息内容信息内容信息内容信息内容信息内容信息内容信息内容信息内容信息内容信息内容信息内容信息内容信息内容信息内容
</div>
</div>
</body>
</html>
<script>
let box = document.querySelector('.msg-box')
let msg = document.querySelector('.msg')
// addEventListener() 事件监听器:监听元素的事件,并设置事件发生时触发的函数,以及事件流(冒泡、捕获)
box.addEventListener('click', (e) => {
// stopPropagation作用是阻止目标元素的冒泡事件,但是会不阻止默认行为
// console.log(e, 'e');
e.stopPropagation()
// e.target.dataset是指获取当前点击dom的值,若没有对应的值则取的是undefined
let show = e.target.dataset.show
// console.log(e.target.dataset, 'e.target.dataset.show');
if (Number(show)) {
// setAttribute() 方法添加指定的属性,并为其赋指定的值。
// 如果这个指定的属性已存在,则仅设置/更改值。
e.target.setAttribute('data-show', 0)
msg.style.display = 'none'
} else {
e.target.setAttribute('data-show', 1)
msg.style.display = 'block'
}
})
document.body.addEventListener('click', () => {
box.setAttribute('data-show', 0)
msg.style.display = 'none'
})
</script>
本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!