当前位置: 首页 > article >正文

【bug记录6】css 写animation时,Safari浏览器最后一帧部分样式闪回

一、问题场景

1、目标动画的实现:

想实现一个元素A从位置1平移到位置2,并且在移动过程中逐渐缩小、透明度变小

2、原代码实现:
.a{
    //分别设置了:动画keyframes名称、单次持续时间、
    //timing function、delay时间、iter count
    //以及animation-fill-mode(代表的是动画开始前后保持在哪个样式)
    animation: move 0.3s linear 1s 3 both;
}

@keyframes move {
  0% {
    transform: scale(1);
    opacity: 1;
    top: 16vh;
    left: 40vw;
  }
  100% {
    transform: scale(0.5);
    opacity: 0.5;
    top: 6vh;
    left: 10vw;
  }
}
3、产生效果:
  • 谷歌浏览器按照预期进行
  • Safari浏览器,在动画的最后一帧时,回到初始的scale和opacity设置,但并没有移动到相应的偏移位置

二、问题原因

根据在动画的最后一帧时,元素回到初始的scale和opacity设置,但并没有移动到相应的偏移位置这一信息,可以知道并非fill-mode没有生效,而是在渲染初始样式时,偏移位置没有和scale、opacity同步生效

根据三者属性的差别,transform、opacity是用gpu渲染的属性,gpu的性能高、渲染生效速度更快。而left、top的设置需要对DOM节点进行操作,而非图层计算,因此可能在不同的浏览器性能下造成复杂动画渲染不同步的问题。

三、问题解决

使用translate来进行动画位移!

代码如下:

@keyframes move {
  0% {
   
    transform: translate(40vw,16vh) scale(1);
    opacity: 1;
    
  }
  100% {
    transform: translate(10vw,6vh)  scale(0.5);
    opacity: 0.5;
  
  }
}

 transform实现多维度变形时,用空格隔开

transform的最佳排列顺序是translate、scale、rotate,避免计算偏离预期(当然也要根据变形需要再针对性看)


http://www.kler.cn/a/286264.html

相关文章:

  • Ruby Dir 类和方法详解
  • Day24-【13003】短文,数据结构与算法开篇,什么是数据元素?数据结构有哪些类型?什么是抽象类型?
  • 汽车蓝牙钥匙定位仿真小程序
  • 毕业设计--具有车流量检测功能的智能交通灯设计
  • css-background-color(transparent)
  • Git进阶之旅:.gitignore 文件
  • Adobe Acrobat Reader的高级功能详解
  • linux文件——用户缓冲区——概念深度探索、IO模拟实现
  • 【QNX+Android虚拟化方案】108 - emac0-phy 与 emac1-switch 双网卡兼容 方案实现
  • 【TiDB原理与实战详解】4、DM 迁移和TiCDC数据同步~学不会? 不存在的!
  • 推荐10个开源且实用的大模型
  • ComfyUI上手使用记录
  • 本地部署一个WordPress博客结合内网穿透实现异地远程访问本地站点
  • 【Mysql】面试官问Mybatis分页查询比较慢时你怎么优化?
  • 自然语言处理-词向量转换
  • ssrf进阶绕过思路与特殊玩法汇总
  • JavaWeb实战教程:如何一步步构建房产信息管理系统?MySQL助力数据管理
  • 深度学习基础—彩色图片的卷积运算
  • Flask-RESTFul 之 RESTFul 的第一个案例
  • Graylog配置用户权限以及常用搜索语法
  • k8s-pod 实战一 (创建pod,启动命令,参数,pod故障排除,拉取命令)
  • [易聊]软件项目测试报告
  • Windows上编译GTest并执行测试用例
  • “线程池中线程异常后:销毁还是复用?”
  • OpenAI 神秘模型「草莓」预计今秋推出,ChatGPT 将迎重大升级|TodayAI
  • 【60天备战软考高级系统架构设计师——第五天:需求分析方法与工具】