页面滚动时,动态添加css动画

在别人的网站中,看到页面滚动到某一位置时,该位置的元素通过各种炫酷的动画展示出来。不知道他们是怎么做的,我根据自己的理解做了一个demo。原理很简单,用CSS3预先定义元素的动画效果,先不要添加到元素上。监听window.onscroll的事件,获取页面滚动的高度,当这个元素显示出来时,动态添加该元素的动画效果。(有两种方法,1、通过style.cssText写入样式;2、通过className添加类)。话不多说,直接上代码。

<!doctype html>  
<html>  
<head>  
<meta charset="utf-8">  
<title>动态CSS3动画</title>  
<style>  
* {margin:0; border:0; padding:0;}  
body {width:100%; height:2000px;}  
#div1 {
	position:relative;
	top: 1000px;
	display: flex;
	overflow: hidden;
}  

#div2 {
	position:relative;
	top: 1800px;
	display: flex;
	overflow: hidden;
}

#div1 .img,#div2 .img{
	position: relative;
	display: inline-block;
	flex: 1;
	height: 200px;
	background-size: 100% 100%;
	background-repeat: no-repeat;
	overflow: hidden;
}

#div1 .img1{
	background-image: url('img/sbg1.jpg');
	/* 动画名称 动画时长 动画循环次数*/
	/* animation: slideLeft 1s 1; */

}
#div1 .img2{
	background-image: url('img/sbg2.jpg');
	/* animation: slideBottom 1s 1; */
}
#div1 .img3{
	background-image: url('img/sbg3.jpg');
	/* animation: slideTop 1s 1; */
}
#div1 .img4{
	background-image: url('img/sbg4.jpg');
	/* animation: slideRight 1s 1; */
}

@keyframes slideRight{
	from{
		right: -200px;
	}
	to{
		right: 0px;
	}
}

@keyframes slideTop{
	from{
		top: -200px;
	}
	to{
		top: 0px;
	}
}
  
@keyframes slideBottom{
	from{
		bottom: -200px;
	}
	to{
		bottom: 0px;
	}
}

@keyframes slideLeft{
	from{
		left: -200px;
	}
	to{
		left: 0px;
	}
}

#div2 .img1{
	background-image: url('img/sbg1.jpg');
	/* 动画名称 动画时长 动画循环次数*/
	/* animation: zoomIn 1s 1; */

}
#div2 .img2{
	background-image: url('img/sbg2.jpg');
	/* animation: zoomOut 1s 1; */
}
#div2 .img3{
	background-image: url('img/sbg3.jpg');
	/* animation: rotate 1s 1; */
}
#div2 .img4{
	background-image: url('img/sbg4.jpg');
	/* animation: rotate2 1s 1; */
}

@keyframes zoomIn{
	from{
		transform: scale(0.1);
	}
	to{
		transform: none;
	}
}

@keyframes zoomOut{
	from{
		transform: scale(2);
	}
	to{
		transform: none;
	}
}

@keyframes rotate{
	from{
		transform: rotate(360deg) scale(0.1);
	}
	to{
		transform: none;
	}
}

@keyframes rotate2{
	from{
		transform: rotate(-360deg) scale(2);
	}
	to{
		transform: none;
	}
}
.ani1{
	animation: zoomIn 1s 1; 
}

.ani2{
	animation: zoomOut 1s 1; 
}

.ani3{
	animation: rotate 1s 1; 
}

.ani4{
	animation: rotate2 1s 1; 
}
</style>  
<script>  
window.onload = function (){
		//两种方法:1、通过style.cssText写入样式;2、通过className添加类。  
		// document.getElementById("div1").style.cssText = "animation: slideLeft 1s 1; "  
		// document.getElementById("div1").className = "ani";  
	window.onscroll = function (){  
		var clienth = document.documentElement.clientHeight;  //屏幕高度
		var scrollt = document.documentElement.scrollTop + document.body.scrollTop; //滚动条滚动高度
		var div1 = document.getElementById('div1');
		var div2 = document.getElementById('div2');
		if (scrollt+clienth>=1000) {
			div1.getElementsByClassName('img1')[0].style.cssText = 'animation: slideLeft 1s 1';
			div1.getElementsByClassName('img2')[0].style.cssText = 'animation: slideBottom 1s 1';
			div1.getElementsByClassName('img3')[0].style.cssText = 'animation: slideTop 1s 1';
			div1.getElementsByClassName('img4')[0].style.cssText = 'animation: slideRight 1s 1';
		}
		console.log(scrollt+clienth)
		if (scrollt+clienth>=2000) {
			for (var i = 1; i <= 4; i++) {
				div2.getElementsByClassName('img'+i)[0].className = 'img img'+i+' ani'+i;
			}
		}
	}  
}  
</script>  
</head>  
  
  
<body>  
	<div id="div1">
		<div class="img img1"></div>
		<div class="img img2"></div>
		<div class="img img3"></div>
		<div class="img img4"></div>
	</div>   

	<div id="div2">
		<div class="img img1"></div>
		<div class="img img2"></div>
		<div class="img img3"></div>
		<div class="img img4"></div>
	</div>  
</body>  
</html> 

图片资源就不上传了,随便找几张图片就好了。比较懒,没有添加浏览器的私有前缀,自行添加。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值