JS原生非dialog信息提示框的示例代码,很简单的一个功能,点击问号,下边出现一个信息框,再次点击信息框消失,代码如下:
<!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>