css - 如何停止CSS关键帧动画重复闪烁
问题描述
我有以下代码,它使用三个透明图像并在屏幕上移动它们以模拟雪/星星坠落。
我的问题是动画播放指定时间(在本例中为 5 秒)后,动画再次开始时会闪烁。
我怎样才能解决这个不闪烁,所以它是一个连续的动画?在此处查看示例: https ://repl.it/@shane8johnson/InbornGruesomeDatamart
<!DOCTYPE html>
<html>
<head>
<style>
.container{width:100%; height:100%; position:absolute;}
.container{
background-color: black;
background-image: url('stars1.png'), url('stars2.png'), url('stars3.png');
animation: snow 5s linear infinite;
}
@keyframes snow {
0% {background-position: 0px 0px, 0px 0px, 0px 0px;}
100% {background-position: 500px 1000px, 400px 400px, 300px 300px}
}
</style>
</head>
<body>
<div class="container"> </div>
</body>
解决方案
闪烁是动画的运动矢量是实际图像的非整数倍的结果。结果,到动画结束(或循环播放)时,stars1.png(例如)已向右移动 500 像素,向下移动 1000 像素 - 但实际图像尺寸为 1100 像素 x 600 像素。因此,当动画到达结尾时,它移动了不到宽度的一半,高度的三分之二。此时它跳回到0px,0px。
解决此问题的最简单方法是确保您的运动矢量是单个图像尺寸的整数倍。例如,尝试更改此:
100% {background-position: 500px 1000px, 400px 400px, 300px 300px}
对此:
100% {background-position: 1100px 600px, -640px 512px, 2287px 1544px}
您可能还想将动画时间更改为更像 10 秒。
我所做的只是确保你的图像在动画循环之前移动的宽度和高度正好是其宽度和高度的整数倍。这样一来,它们就在动画开始时所在的位置——并且没有闪烁。
推荐阅读
- r - R中的替换加密/解密
- javascript - 在给定时间内将随机数倒数到 0
- c - 无法在 i2c 上制作 adxl345 和在 uart 上制作 ublox neo-6m 以在树莓派 pi3 中一起接收数据
- django - 带有 websocket 的 Django 框架
- angular - Angular MDB 模块功能在组件中不可用
- postgresql - 如何在postgres的单个命令中插入然后更新从插入查询返回的ID作为返回ID?
- javascript - 如何在执行操作之前检查是否使用jQuery单击了两个按钮
- python - 我试图在heroku上部署我的python和django项目并在日志文件中遇到这个错误
- c++ - 可变参数模板中的模板参数推导失败
- nuxt.js - 如何防止网站 NuxtJS 上的打印错误?