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

embedded/2024/12/22 2:29:31/

一、问题场景

1、目标动画的实现:

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

2、原代码实现:
css">.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来进行动画位移!

代码如下:

css">@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.ppmy.cn/embedded/103925.html

相关文章

海康二次开发学习笔记12-从Group外部输入图像

从Group外部输入图像 用OpenCV从本地读图 当Group内部无图像源模块时,可以通过代码的方式将图片传入Group内部.实现方式有多种,可以使用OpenCV从本地读图,可在程序集搜索引用OpenCvSharp,同时将其复制本地的属性改为False. 1. 界面设计 增加加载图像按钮 2. 处理…

003-LoadBalancer负载均衡服务调用

文章目录 前言1 简介客户端负载 VS 服务器端负载区别2 spring-cloud-loadbalancer负载均衡解析2.1 负载均衡演示案例-理论2.2 负载均衡演示案例-实操2.2.1 参考官网如何使用2.2.2 启动consul,将8001/8002注册微服务2.2.3 80模块改POM2.2.3 80模块改RestTemplateConfig2.2.4 80模…

零基础5分钟上手亚马逊云科技 - AI模型内容安全过滤

在上一篇文章中,小李哥带大家深入调研亚马逊云科技AI模型平台Amazon Bedrock热门开发功能,了解了模型平台的文字/图片生成、模型表现评估和模型内容安全审核的实践操作。这次我们将继续介绍如何利用API的形式,利用Python代码的形式对AI模型内…

国密起步3:GmSSL3使用SM3(哈希)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码在othertest目录。 目录 …

5Kg负重30分钟长航时多旋翼无人机详解

5Kg负重、30分钟长航时的多旋翼无人机,在设计和应用上都有着特定的要求和优势。以下是对这种无人机的详细解析: 一、设计与结构 运输无人机稳定版,采用环抱式四旋翼折叠,搭载悬挂式电池及搭载运输平台,机身中心连接固…

Spring Cloud Eureka与Kubernetes的集成:服务发现的混合方案

Spring Cloud Eureka与Kubernetes的集成:服务发现的混合方案 引言 随着微服务架构的流行,服务发现(Service Discovery)已经成为构建分布式系统的关键组件之一。在分布式系统中,服务实例的数量和位置是动态变化的&…

SpringBoot集成MybatisPlus

1. 初始化 Spring Boot 项目 首先&#xff0c;使用 Spring Initializr 生成一个 Spring Boot 项目&#xff0c;并添加以下依赖&#xff1a; <dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</grou…

Call openai-node in the backend or call https in the frontend?

题意&#xff1a;在后端调用 openai-node 还是在前端调用 https&#xff1f; 问题背景&#xff1a; I have a web application by ReactJS and Nodejs. This application calls OpenAI APIs. 我有一个使用 ReactJS 和 Node.js 开发的 Web 应用程序。这个应用程序调用 OpenAI …