原生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>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值