css连续动画(动画组)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.box {
				width: 230px;
				height: 130px;
				background-color: #D8B7B2;
				border: 1px solid #840705;
				display: flex;
				flex-wrap: wrap;
				align-items: center;
				justify-content: space-between;
				padding: 5px;
			}
			
			.box.ani {
				animation: backOutRight 2s;
			}
			
			.box.ani2 {
				animation: backOutRight2 2s;
			}
			
			@-webkit-keyframes backOutRight {
				0% {
					-webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
				    transform: translate3d(100%, 0, 0) skewX(-30deg);
				    opacity: 0;
				}
			
				60% {
					-webkit-transform: skewX(20deg);
					transform: skewX(20deg);
					opacity: 1;
				}
				
				80% {
				    -webkit-transform: skewX(-5deg);
				    transform: skewX(-5deg);
				    opacity: 1;
				}
				100% {
				    -webkit-transform: none;
				    transform: none;
				    opacity: 1;
				}
			}
			
			@-webkit-keyframes backOutRight2 {
				0% {
					transform: rotate(0deg);
				   
				}
			
			
				100% {
				 transform: rotate(180deg);
				}
			}
		</style>
	</head>
	<body>
		<div id='box' class='box'></div>
	</body>
	<script>
		let dom = document.getElementById('box')
		let timer = null;
		let currentIndex = 0;
		let aniList = [
			{
				num:2, //单个动画执行次数
				time:1000, //单个动画执行时间
				name: 'ani', //动画名称
			},
			{
				num:1,
				time:2000,
				name: 'ani2'
			},
			{
				num:1,
				time:2000,
				name: 'ani'
			},
			{
				num:2,
				time:1000,
				name: 'ani2'
			},
		]
	
		startAni()
		function startAni() {
			// 初始化dom节点的class
			let classList = ['box']
			dom.setAttribute('class', classList.join(' '))
			
			// 如果当前播放的动画已经是最后一个,阻止后续代码执行
			if(!aniList[currentIndex]) {
				return
			};
			
			// 获取当前需要播放的动画
			let item = aniList[currentIndex];
			// 设置当前动画执行时间
			dom.style.animationDuration = item.time / 1000 +'s'; 
			
			// 将动画的下标加1
			currentIndex++;
			
			// 默认执行一次
			aniGo(item)
			
			// 根据动画执行时间设置计时器
			timer = setInterval(() => {
				aniGo(item)
			},item.time)
			
			
			
			function aniGo(item) {
				if(item.num == 0) {
					clearInterval(timer)
					startAni()
					return;
				}
				classList =  ['box']
				dom.setAttribute('class', classList.join(' '))
				let timer3 = setTimeout(() => {
					classList =  ['box',item.name]
					dom.setAttribute('class', classList.join(' '))
					item.num--;
					clearTimeout(timer3)
				},20)
			}
		}
		
	</script>
</html>

相关推荐

  1. css连续动画动画

    2024-06-12 09:34:03       26 阅读
  2. css 多种动画效果

    2024-06-12 09:34:03       65 阅读
  3. CSS3——动画

    2024-06-12 09:34:03       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-12 09:34:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-12 09:34:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-12 09:34:03       82 阅读
  4. Python语言-面向对象

    2024-06-12 09:34:03       91 阅读

热门阅读

  1. Solidity智能合约事件(event)

    2024-06-12 09:34:03       32 阅读
  2. 镜像没有包含 shell 导致无法进入容器

    2024-06-12 09:34:03       25 阅读
  3. openssl工具国际/国密签名命令行流程

    2024-06-12 09:34:03       27 阅读
  4. 互联网摸鱼日报(2024-06-11)

    2024-06-12 09:34:03       31 阅读
  5. 安装TensorFlow2.12.0

    2024-06-12 09:34:03       32 阅读
  6. Linux信号基础

    2024-06-12 09:34:03       26 阅读
  7. 介绍 TensorFlow 的基本概念和使用场景。

    2024-06-12 09:34:03       34 阅读
  8. 单例设计模式

    2024-06-12 09:34:03       30 阅读
  9. 计算机网络知识点(一)

    2024-06-12 09:34:03       27 阅读