html - 如何防止css动画中的闪烁问题?
问题描述
我正在尝试使用 CSS @Keyframes
Animation 制作滑块。当我第一次使用小尺寸 [1100px width
和400px height
] 时,它运行顺利。
但是当我为我的网站扩展滑块和图像大小时,我会增加高度和宽度 [1280 * 640]。然后我的图像在每个间隔第一次闪烁,在每个图像第一次闪烁后,滑块工作顺利。
但我想在第一时间阻止它。
CSS:
.slider{
position: relative;
top: 0px;
left: 0px;
background: url(1.jpg);
height: 600px; width: 1263.1px;
margin-bottom: 20px;
animation: slideshow 10s infinite;
}
@keyframes slideshow{
25% { background: url(1.jpg); }
50% { background: url(2.jpg); }
75% { background: url(3.jpg); }
100% { background: url(1.jpg); }
}
HTML:
<div class="slider"></div>
解决方案
那是因为图像还没有加载,它们只有在动画开始时才开始加载。为了防止这种闪烁,您可以在 Javascript 中使用 onload 事件:
<div class="slider"></div>
<style>
.slider{
background-image: url("1.jpg");
background-repeat: no-repeat;
background-size: cover;
height: 540px;
width: 960px;
}
.slider.loaded{
animation: slideshow 10s infinite;
}
@keyframes slideshow{
0%{
background-image: url("1.jpg");
}
25%{
background-image: url("2.jpg");
}
50%{
background-image: url("3.jpg");
}
75%{
background-image: url("4.jpg");
}
}
</style>
<script>
var images = [
"1.jpg",
"2.jpg",
"3.jpg",
"4.jpg"
];
function loadImg(i){
if(images[i] != undefined){
var img = new Image();
img.src = images[i];
img.onload = function(){ // detect if image has been loaded
i++;
loadImg(i);
}
}
if(images.length == i) // adding class 'loaded' when all images finished with loading
document.getElementsByClassName("slider")[0].classList.add("loaded");
}
loadImg(0);
</script>
注意: 我设法防止闪烁,但是
这只能在 Chrome 中完美运行
Firefox 无法为图像设置动画,但仍显示图像
这绝对不适用于 IE / Edge
推荐阅读
- python - 为什么我在这个 python 代码中得到一个 TypeError?
- javascript - 如何在javascript中删除开头的0?
- facebook-opengraph - Google Keep 如何获取链接预览?
- datepicker - DatePicker 忽略不在 closedRange 中的值
- git - 连接到 VPN 时无法克隆存储库。SSL:证书主题名称与目标主机名“github.com”不匹配
- python - 无法使用 if 和 else 语句在 python 中引发 ValueError
- c# - 将 C++ 代码转换为 C#。将双精度转换为双精度*
- selenium - Selenium Bot:Windows 的不规则切换
- ios - UIPIckerViews 在一个 UIView 中协同工作
- amazon-web-services - AWS SOA-C01 考试准备:私有 VPC