当前位置: 首页 > news >正文

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>
http://www.lryc.cn/news/61971.html

相关文章:

  • 真题详解(UML图)-软件设计(五十五)
  • 基于html+css的图展示42
  • MyBatis系列-入门篇
  • 科学防雷接地和雷电防护方案
  • SpringMVC-RESTful架构风格
  • consistency-starter
  • 【Json】Spring Boot整合Json与Json数组
  • Adobe Photoshop 软件下载
  • [ES6]解构与赋值
  • 2023年3月 青少年软件编程(C语言) 等级考试试卷(五级)
  • Unity之ShaderGraph入门
  • Spring-学习修改尚硅谷最新教程笔记
  • CPU寄存器的分类与Intel 8086 的eax,ebx,ecx,edx
  • 如何快速上手Vue框架?
  • Android进阶宝典—App响应时间优化
  • 100天涨薪4k,从功能测试到自动化测试,我整理的3000字超全学习指南
  • Pytorch剪枝api测试和结果
  • 微服务下网关聚合Swagger文档、starter统一配置Swagger
  • 剑指 Offer第二版:机器人的运动范围、正则表达式匹配、表示数值的字符串
  • Delaunay三角网生成算法
  • hashcode是什么?有什么作用?
  • 【人体姿态估计】(一)原理介绍
  • 一种新的流:为 Java 加入生成器(Generator)特性
  • 《数据结构C++版》实验一:线性表的顺序存储结构
  • ChatGPT的开源平替,终于来了!
  • Redis基础
  • 为什么重视安全的公司都在用SSL安全证书?
  • 嵌入式QT (使用 Qt Designer 开发)
  • 每日一个小技巧:今天告诉你拍照识别文字的软件有哪些
  • 多版本VersionARXDBG