CSS-@keyframes动画轮播 首次加载闪动问题

问题描述:
  在用CSS3-@keyframes做图片效果的时候(eg:轮播),会出现首次加载出现闪动,之后循环正常的现象。先写解决方法,原理在底部。会简单涉及到加载顺序,感兴趣的可了解一下。(demo简单,见谅)如下:

HTML

<div id="pages"></div>

CSS

#pages {
	width: 100%;
	height: 600px;
	border: 1px solid red;
	animation: lunBo 5s infinite ;
	-moz-animation: lunBo 5s infinite ; /* Firefox */
	-webkit-animation: lunBo 5s infinite ; /* Safari and Chrome */
	-o-animation: lunBo 5s infinite ; /* Opera */
}

@keyframes lunBo{
	0%{
		background: url(img/BaLaGeZong.jpg);
	}
	34%{
		background: url(img/Bamboo.jpg);
	}
	67%{
		background: url(img/beiJIaErHu.jpg);
	}
	100%{
		background: url(img/bigPlayer.png);
	}
}

  这是因为css3-@keyframes首次加载图片会出现短暂的空白期,而我们此时没有预先处理,就会出现闪动的情况,这时只要在他们第一次加载第一张图片的时候就加载完本次所需的图片,就不会出现短暂空白了。
比如:

#pages {
	//只添加background这一行代码即可
	background: url(img/1.jpg),url(img/2.jpg),url(img/3.jpg),url(img/4.png);
	width: 100%;
	height: 600px;
	border: 1px solid red;
	animation: lunBo 5s infinite ;
	-moz-animation: lunBo 5s infinite ; /* Firefox */
	-webkit-animation: lunBo 5s infinite ; /* Safari and Chrome */
	-o-animation: lunBo 5s infinite ; /* Opera */
}

原理:
  写在css里面的图片是以背景图形式存在的,而写在HTML里的是以标签的形式存在的。在网页加载的过程中,以css背景图存在的图片会等结构加载完成(网页的内容全部显示以后),才开始加载。而HTML的标签是网页结构的一部分,会在加载结构的的过程中加载。网页的内容全部显示以后才开始加载。换句话讲,网页会先加载标签的内容,在加载背景图片,如果你引入了一个很大的图片,那么在这个图片下载完成之前,之后的内容都不会显示。而如果用css来引入同样的图片,网页结构和内容加载完成之后,才开始加载背景图片,不会影响你浏览网页内容。网页加载过程中相同的图片会下载一次并保存在 缓存 里,其他地方使用同样的图片就不会再去下载了,即图片可以复用。所以会出现首次加载闪动,之后循环正常的现象。
  如果对加载比较感兴趣,也稍加学习   预加载+懒加载

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
可以使用@keyframes来创建轮效果。@keyframes是CSS动画中的一种关键字,用于定义动画的关键帧。 首先,你需要给轮的容器元素添一个样式,并设置其宽度和高度,以及overflow属性为hidden,使得超出容器部分不可见。 然后,在CSS中创建一个@keyframes规则,定义轮动画效果。你可以使用百分比值来指定每个关键帧的样式。 接下来,在轮容器元素上应用该动画效果,并设置动画的持续时间、循环次数和动画类型。 以下是一个简单的示例代码: ```html <div class="slideshow"> <img src="image1.jpg" alt="Image 1"> <img src="image2.jpg" alt="Image 2"> <img src="image3.jpg" alt="Image 3"> </div> ``` ```css .slideshow { width: 500px; height: 300px; overflow: hidden; position: relative; } .slideshow img { width: 100%; height: auto; position: absolute; top: 0; left: 0; opacity: 0; animation: slideshow 10s infinite; } @keyframes slideshow { 0% { opacity: 0; } 25% { opacity: 1; } 50% { opacity: 1; } 75% { opacity: 1; } 100% { opacity: 0; } } ``` 在上面的示例中,轮容器的宽度和高度分别为500px和300px,overflow属性设置为hidden,使得超出容器部分不可见。轮图片的样式设置为绝对定位,并通过@keyframes规则定义了透明度从0到1再到0的动画效果。动画的持续时间为10秒,循环次数为无限次。 你可以根据需要修改样式和动画效果,以实现你想要的轮效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值