CSS动画 & 过渡transition

Tags
css
Created
May 5, 2015 2:43 PM

https://www.zhangxinxu.com/wordpress/2024/06/css-transition-behavior/ transition-behavior: allow-discrete;

@starting-style

尺寸关键字插值动画:interpolate-size: allow-keywords;

尺寸关键字支持计算:calc-size() // 以前 auto 过渡可以使用 grid 0fr → 1fr

https://www.zhangxinxu.com/wordpress/2024/08/view-transitions-api/

添加事件:

  • Window: pagereveal
  • Window: pageswap

// chrome 在有 will-change(复合层) 的情况下transform 放大元素 会栅格化元素以优化动画

同时应当留意这种情形,在插入元素(如 .appendChild())或改变属性 display: none 后立即使用过渡, 元素将视为没有开始状态,始终处于结束状态。简单的解决办法,改变属性前用 window.setTimeout() 延迟几毫秒。

// animation动画从 none 到 block 的时候添加动画 class 是可以的。

// 定义于一个关键帧区块的缓动函数(animation timing function)应用到改关键帧;另外,若该关键帧没有定义缓动函数,则使用定义于整个动画的缓动函数。

支持属性:https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_animated_properties

transition的作用在于,指定状态变化所需要的时间以及指定属性。

状态可以由js指定,即transition可以做动态过渡。

Transition又包含了四个子属性,分别为:

  • transition-property,变换的属性:
  • transition-duration,在延续时间段,
  • transition-timing-function,变换的速率变化
  • transition-delay:变换延迟时间。

动画语法:  animation-duration || animation-timing-function || animation-delay || animation-direction || animation-fill-mode || animation-iteration-count ||  animation-fill-mode || animation-play-state || animation-name

要做动态动态只能写style元素。(直接操作css规则不方便管理)

当 animation-delay 取值为负值时,就可以抵消动画。

当 animation-direction 取值为 alternate-reverse 时,动画第一次播放按 normal,第二次开始就是 reverse。这样交替播放:

image

但 animation-direction 设置为 alternate 时,它的表现行为又略为不同:

image

animation-fill-mode 略有所知。简单的规纳起来:

  • none:默认值,使得动画不会对动画等待动画完成的元素样式产生改变
  • backwards:在动画等待的那段时间内,元素的样式将设置为动画第一帧的样式
  • forwards:在动画结束后,元素的样式设置为动画的最后一帧的样式
  • both:相当于同时配置了 forwards 和 backwards。也就是说,动画等待时,元素样式将设置为动画第一帧的样式;而在动画线束状态,元素样式将设置为动画最后一帧样式。

transition 动画与 animation 动画的区别在于:

  • transition 是一次性的,不能重复发生,除非一再触发
  • transition 动画只能定义开始和结束位置,中间无法定义;而 keyframes 则可以定义n帧作为中间的过渡帧。
  • 对于切入切出动画来说,transition 动画我们只需添加删除一个 class 即可完成,而 animation 动画则需要切换两个 class,再在最后删除 class,比较复杂。
  • 如果你的动画不需要定制中间帧,那直接使用 transition 动画即可,切换一个 class 就可以了,运动结束时候可以js调用 transitionend 函数,而如果需要定制中间帧,那么还是 animation,当然 animation 的事件有三个 animationstart,animationiteration,animationend
  • js添加 animation-play-state: paused; 可停止动画
SuperMade with Super