css 动画结束闪烁问题

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .qrcode {
            margin-bottom: 4px;
            padding-top: 10px;
        }
        .qrcode img {
            width: 260px;
            height: 255px;
            padding-top: 20px;
            margin-bottom: 10px;
        }
        .qrcode .blur{
            -webkit-backface-visibility: hidden;
            animation: toReal 1s;
        }
        @keyframes toReal {
            from {
                filter: blur(10px);
            }
            to {
                filter: blur(0px);
            }
        }
    </style>
</head>
<body>
<div class="qrcode">
    <img src="./src/assets/background/qrcode.png" class="blur" />
</div>
</body>
</html>

代码如上。现在出现的问题是,图片模糊值回到0时会出现闪烁(动画结束后),即效果如下:
图片描述


已尝试属性有:

 -webkit-transform-style: preserve-3d;
  animation-fill-mode: forwards;
  -webkit-backface-visibility: hidden;
  -webkit-transform:translate3d(0,0,0);    


均无效,不排除自己没弄对。
运行环境:chrome v66。
希望有会的同学帮忙看下。

阅读 9.4k
4 个回答

闪那一下是动画执行完了,回归到元素的原有模式时,因为没有filter所以会闪一下。
换用transition实现吧。animation更适合表现循环的动效。

大概其就是你先把filter: blur(10px);写到元素本体上去,然后写个transition1s的执行时间(如果还需要叠加其它效果的话,需要写下属性过滤),然后再单写一个类,里边就放filter: blur(0);,最后设计触发时机把这个类叠到元素上就行了。

img {
  width: 260px;
  height: 255px;
  filter: blur(10px);
  transition: filter 2s;
}
.blur{
  filter: blur(0px);
}
<img src={QRcode} className={icon === STATIC.PC ? 'blur' : ''}/>

// 是这样吗,没有过渡效果,哪里写错了吗
新手上路,请多包涵

filter: blur(0px);
改为
filter: none;
可以解决问题。

.qrcode *{
            -webkit-backface-visibility: hidden;
            -webkit-transform-style: preserve-3d;
        }

试试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题