页面滚动时,动态添加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> 

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



  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在页面滚动添加过渡效果,可以使用CSS的transition属性。该属性定义了元素在发生变化动画效果。在这种情况下,我们希望在滚动过程中添加过渡效果,因此我们需要将transition属性应用于页面滚动。 首先,我们需要为页面滚动创建一个CSS类。该类将应用于页面的主容器。 ```css .scrollable { overflow-y: scroll; height: 500px; transition: all 0.5s ease-in-out; } ``` 在上面的示例中,我们创建了一个名为“scrollable”的CSS类,将其应用于页面的主容器。我们使用了overflow-y属性来允许垂直滚动,并设置了一个固定的高度。最后,我们使用transition属性为所有的滚动行为添加了一个过渡效果。 接下来,我们需要通过JavaScript来触发页面滚动并应用过渡效果。为此,我们可以使用window对象的scrollTo方法。以下是一个简单的示例: ```javascript const container = document.querySelector('.scrollable'); const scrollToTopBtn = document.querySelector('.scroll-to-top-btn'); scrollToTopBtn.addEventListener('click', () => { container.scrollTo({ top: 0, behavior: 'smooth' }); }); ``` 在上面的示例中,我们首先选择了页面的主容器和一个用于触发滚动的按钮。然后,我们使用addEventListener方法来监听按钮的点击事件,并在该事件发生调用scrollTo方法。该方法接受一个包含滚动位置和滚动行为的对象。在这种情况下,我们将滚动位置设置为0,并将行为设置为“smooth”,以便应用过渡效果。 最后,我们需要在HTML中添加一个用于触发滚动的按钮。这可以通过添加一个简单的HTML元素来完成: ```html <button class="scroll-to-top-btn">Scroll to Top</button> ``` 在上面的示例中,我们创建了一个名为“scroll-to-top-btn”的按钮,并将其添加页面中。当用户单击该按钮,我们将会触发页面滚动并应用过渡效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值