js+css实现简单的弹框动画

效果图

只是一个简单的演示demo,但是可以后面可以优化样式啥的

在这里插入图片描述

  • 刚开始元素的display为none,然后,为了给元素展示时添加一个动画,首先要添加样式类名show,让它覆盖display:none,变得可见。然后,添加元素放大的动画样式类名
  • 隐藏的时候,也需要有动画,并且动画结束完成之后,元素的display应当恢复成原来的none,也就是变得不可见。因此,需要监听动画完成事件。
<!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占满整个页面 */
        body {
            margin: 0;
            height: 100vh;
        }

        /* 设置box1默认大小,以及设置 display:none,让它一开始就不被看见 */
        .box1 {
            width: 400px;
            height: 200px;
            background-color: #bfa;
            margin: 10px auto;
            display: none;
        }

        /* 定义元素放大的动画 */
        @keyframes scaleup {
            0% {
                transform: scale(0)
            }
            100% {
                transform: scale(1)
            }
        }
        /* 定义元素放大的类 */
        .scaleup {
            animation: scaleup 0.5s;
        }

        /* 元素如果要显示, 必须通过添加该类的方式(约定) */
        .show {
            display: block;
        }

        /* 元素缩小的动画 */
        @keyframes scaledown {
            0% {
                transform: scale(1)
            }
            100% {
                transform: scale(0)
            }
        }
        /* 定义元素缩小的类 */
        .scaledown {
            animation: scaledown 0.5s;
        }

    </style>
    <script>
        window.onload = () => {

            let box1 = document.querySelector('.box1')
            let openBtn = document.querySelector('.open')
            let closeBtn = document.querySelector('.close')
           
            openBtn.onclick = () => {

                if(box1.show) {/* 用于标记box1是否被打开过, 如果之前被打开过的话, 再次点击打开无效 */
                    return 
                }
                box1.show = true /* 标记打开过 */

                box1.classList.add('show')   /* 添加让元素显示的类 */
                box1.classList.add('scaleup')/* 添加元素显示时的动画 */

                let callback  = () => {
                    box1.classList.remove('scaleup') /* 动画完成后, 移除放大动画的类;为什么要移除呢?动画播放结束,这个类也就没用了,并且让下次可以继续指定放大的动画的样式类,来展示动画 */
                    box1.removeEventListener('animationend',callback) /* 动画完成后, 移除监听 */
                }
                box1.addEventListener('animationend', callback) /* 动画完成后, 执行指定的函数 */
            }

            closeBtn.onclick = () => {
                if(!box1.show) {
                    return
                }

                box1.classList.add('scaledown') /* 关闭时, 指定缩小的动画的样式类 */

                /* 缩小动画结束后, 应当要把这个框给隐藏掉, 就是把box1的display恢复成原来的none */
                let callback  = () => {
                    box1.classList.remove('show') /* 把show样式类去掉,就会用到box1类中的display:none了 */
                    box1.classList.remove('scaledown') /* 跟上面的解释一样 */
                    box1.removeEventListener('animationend',callback) /* 动画完成后, 移除监听 */
                    box1.show = false
                }
                box1.addEventListener('animationend', callback) /* 动画完成后, 执行指定的函数 */
            }
        }
    </script>
</head>
<body>
    <div class="container">
        <div class="box1 scaleup"></div>
    </div>
    <hr/>
    <button class="open">open</button>
    <button class="close">close</button>
</body>
</html>
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个下拉框,你可以使用JavaScriptCSS来完成。下面是一种常见的实现方法: HTML结构: ```html <div class="dropdown"> <button class="dropdown-toggle" onclick="toggleDropdown()">下拉框</button> <ul class="dropdown-menu"> <li>选项1</li> <li>选项2</li> <li>选项3</li> </ul> </div> ``` CSS样式: ```css .dropdown { position: relative; display: inline-block; } .dropdown-toggle { background-color: #f1f1f1; border: none; color: black; padding: 10px; cursor: pointer; } .dropdown-menu { position: absolute; top: 100%; left: 0; background-color: #f1f1f1; list-style: none; padding: 0; margin: 0; display: none; } .dropdown-menu li { padding: 10px; } .dropdown-menu li:hover { background-color: #ddd; } ``` JavaScript代码: ```javascript function toggleDropdown() { var dropdownMenu = document.querySelector('.dropdown-menu'); if (dropdownMenu.style.display === 'none') { dropdownMenu.style.display = 'block'; } else { dropdownMenu.style.display = 'none'; } } ``` 上面的代码实现了一个简单的下拉框。当点击下拉框按钮时,通过JavaScript的`toggleDropdown`函数切换下拉菜单的显示隐藏状态。 在CSS中,`.dropdown`类定义了下拉框的容器样式,`.dropdown-toggle`类定义了下拉框按钮的样式,`.dropdown-menu`类定义了下拉菜单的样式,包括其位置、背景颜色和列表项样式。 通过这种方式,你可以实现一个基本的下拉框。你可以根据需要进一步自定义样式和功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值