Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >前端动画实现 - 笔记

前端动画实现 - 笔记

作者头像
TagBug
发布于 2023-03-17 03:04:08
发布于 2023-03-17 03:04:08
2.4K00
代码可运行
举报
文章被收录于专栏:TagBugTagBug
运行总次数:0
代码可运行

动画的基本原理:什么是动画、动画的历史、计算机动画原理 前端动画的分类:CSS 动画、SVG 动画、JS 动画、如何选择 前端动画如何实现(主要是 JS):JS 动画的函数封装、简单动画、复杂动画 相关实践:动画资源、工作实践、动画的优化

# 前端动画实现 - 笔记

# 动画的基本原理

# 什么是动画

动画是通过快速连续排列彼此差异极小的连续图像来制造运动错觉和变化错觉的过程。

  • 快速连续排列彼此差异极小制造错觉

# 动画的历史

如今前端动画技术已经普及

  1. 常见的前端动画技术 Sprite 动画、CSS 动画、JS 动画、SVG 动画和 WebGL 动画
  2. 按应用分类 UI 动画、基于 Web 的游戏动画和动画数据可视化

最早的技术是 GIF,然后是 Flash,如今是 HTML/CSS/JS

# 计算机动画原理

计算机图形学:

计算机视觉的基础,涵盖点、线、面、体、场的数学构造方法。

  1. 几何和图形数据的输入、存储和压缩。
  2. 描述纹理、曲线、光影等算法。
  3. 物体图形的数据输出 (图形接口、动画技术),硬件和图形的交互技术。
  4. 图形开发软件的相关技术标准。

计算机动画:

计算机图形学的分支,主要包含 2D、3D 动画。

无论动画多么简单,始终需要定义两个基本状态,即开始状态和结束状态。没有它们,我们将无法定义插值状态,从而填补了两者之间的空白。

帧:连续变换的多张画面,其中的每一幅画面都是一帧。

帧率:用于度量一定时间段内的帧数,通常的测量单位是 FPS (frame per second) 。

帧率与人眼:一般每秒 10-12 帧人会认为画面是连贯的,这个现象称为视觉暂留。对于一些电脑动画和游戏来说低于 30FPS 会感受到明显卡顿,目前主流的屏幕、显卡输出为 60FPS,效果会明显更流畅。

空白的补全方式有以下两种

补间动画: 传统动画,主画师绘制关键帧,交给清稿部门,清稿部门的补间动画师补充关键帧进行交付。(类比到这里,补间动画师由浏览器来担任,如 keyframetransition )

逐帧动画 (Frame By Frame) : 从词语来说意味着全片每一帧逐帧都是纯手绘。(如 CSS 的 steps 实现精灵动画)

# 前端动画分类

# CSS 动画

CSS animation 是常见的 CSS 动画实现方式:

CSS animation 属性是 animation-nameanimation- durationanimation-timing-functionanimation-delayanimation-iteration-countanimation-directionanimation-fill-modeanimation-play-state 属性的一个简写属性形式。

CSS 补间动画使用 Transition APIKeyframe 实现

CSS 逐帧动画使用 Animation API 中的 steps 实现

优点:简单、高效声明式的不依赖于主线程,采用硬件加速 (GPU) 简单的控制 keyframe animation 播放和暂停。

缺点:不能动态修改或定义动画内容不同的动画无法实现同步多个动画彼此无法堆叠。

适用场景:简单的 h5 活动 / 宣传页。

推荐库:animation.css、shake.css 等。

# SVG 动画

svg 是基于 XML 的矢量图形描述语言,它可以与 CSS 和 S 较好的配合,实现 svg 动画通常有三种方式:SMIL、JS、CSS

我们经常使用 animation, transform, transition 来实现 svg 动画,它比 JS 更加简单方便。

优点:通过矢量元素实现动画,不同的屏幕下均可获得较好的清晰度。可以实现一些特殊的效果,如:描字,形变,墨水扩散等。

缺点:使用方式较为复杂,过多使用可能会带来性能问题。

# SMIL

SMIL: Synchronized Multimedia Integration Language (同步多媒体集成语言)

可以使用 svg 标签进行动画的描述,但是兼容性不是很理想

# JS、CSS

使用 JS 来操作 SVG 动画自不必多说,目前也有很多现成的类库。例如老牌的 Snap.svg 以及 anime.js ,都能让我们快速制作 SVG 动画。当然,除了这些类库,HTML 本身也有原生的 Web Animation 实现。使用 Web Animation 也能让我们方便快捷地制作动画。

文字形变(基于 CSS 中的 filter 属性):https://codepen.io/jiangxiang/pen/MWmdjeY

Path 实现写字动画:https://codepen.io/jiangxiang/pen/rNmgjqX

# JS 笔画的原理

stroke-dashoffset、stroke-dasharray 配合使用实现笔画效果。

属性 stroke-dasharray 可控制用来描边的点划线的图案范式。

它是一个数列,数与数之间用逗号或者空白隔开,指定短划线和缺口的长度。如果提供了奇数个值,则这个值的数列重复一次,从而变成偶数个值。因此,5,3,2 等同于 5,3,2,5,3,2。

stroke-dashoffset 属性指定了 dash 模式到路径开始的距离。

参考:https://codepen.io/jiangxiang/pen/LYzvvxd

path 路径–d 属性 (路径描述) <path d="...." />

* 大写字母跟随的是绝对坐标 x,y,小写为相对坐标 dx,dy

  • M/m 绘制起始点。
  • L/I 绘制一条线段。
  • C/c 为绘制贝塞尔曲线。
  • Z/z 将当前点与起始点用直线连接。

计算 path 的长度: path.getTotalLength();

计算 path 上某个点的坐标: path.getPointAtLength(lengthNumber);

例子:https://codepen.io/jiangxiang/pen/eYWagxq

# JS 动画

JS 可以实现复杂的动画,也可以操作 canvas 动画 API 上进行绘制。

# 如何做选择

CSS 优点:

  • 浏览器会对 CSS3 动画做一些优化,使得 CSS3 动画性能上稍有优势(新建一个图层来跑动画)。
  • CSS3 动画的代码相对简单。

CSS 缺点:

  • 动画控制上不够灵活。
  • 兼容性不佳。
  • 部分动画无法实现(视差效果、滚动动画)。

JS 优点:

  • 使用灵活,同样在定义一个动画的 keyframe 序列时,可以根据不同的条件调节若干参数(JS 动画函数)改变动画方式。(CSS 会有非常多的代码冗余)
  • 对比与 CSS 的 keyframe 粒度更粗,css 本身的时间函数是有限的,这块 JS 都可做弥补。
  • CSS 很难做到两个以上的状态转化(要么使用关键帧,要么需要多个动画延时触发,再想到要对动画循环播放或暂停倒序等,复杂度极高)。

JS 缺点:

  • 使用到 JS 运行时,调优方面不如 CSS 简单,CSS 调优方式固定。
  • 对于性能和兼容性较差的浏览器,CSS 可以做到优雅降级,而 JS 需要额外代码兼容。

结论:

  • 当 UI 元素采用较小的独立状态时,使用 CSS。
  • 在需要对动画进行大量控制时,使用 JavaScript。
  • 在特定的场景下可以使用 SVG,可以使用 CSS 或 JS 去操作 SVG 变化。

# 前端动画实现

# JS 动画函数封装

先来一个基础的 animate 函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 入参说明:
 * draw 动画绘制函数(例如:() => { ctx.draw ()... })
 * easing 缓动函数(数学)(例如:(x) => y)
 * duration 动画持续时间(例如:2000)
 * @returns 一个可以表示动画是否完成的 Promise 对象,同时,由于动画可以是连续的,所以 Promise.then 就能让动画按顺序被调用
 */
function animate ({easing, draw, duration}) {
    // 动画开始的时间戳
    // Q:为什么使用 performance.now () 而非 Date.now ()?
    // A:因为 performance.now () 会以恒定速度自增,精确到微秒级别,不易被篡改。
    let start = performance.now();
    return new Promise(resolve => {
        requestAnimationFrame(function animate(time) {
            // (time - start) 算出距离动画开始,时间已经过去了多少,然后根据过去了多少时间 ÷ 规定的动画持续时间,算出目前动画进度(百分比)
            // 注意:这是不算上缓动函数修正的百分比(原始百分比)
            // 例如:动画开始时间为 start = 1666,现在的时间为 time = 2666,想让动画持续的时间为 duration = 2000,那么 timeFraction 就是 0.5,即 50%
            let timeFraction = (time - start) / duration;
            // 如果 timeFraction > 1,即原始百分比已经大于 100%,即动画照理来说应该是已经结束了的,那么就将原始百分比设为 100%,即 timeFraction = 1
            if (timeFraction > 1) timeFraction = 1;
            //progress 是动画的实际进程(通过缓动函数计算后的真实百分比),这个值应该也是要小于 100% 的,你可以把 easing 函数理解为一个纯数学函数,接受 [0, 1]-> 输出 [0, 1],建立真实时间到动画百分比的映射关系
            let progress = easing(timeFraction);
            // 给 draw 函数传入 progress(动画目前应该到达的进度),那么 draw 函数就可以根据这个进度指示,来绘制相应的图像(可以类比 CSS animation 中的 keyframe 百分比)
            draw(progress);
            // 如上所述,当 timeFrction(原始百分比)< 1 时,说明动画还为完成,则继续调用 rAF,否则说明动画已结束,将此 Promise 解决 (resolve) 掉
            if (timeFraction < 1) {
                requestAnimationFrame(animate);
            } else {
                resolve();
            }
        });
    });
}

注意: easing 函数也不一定只能返回 [0, 1] 的数值,根据实际使用情况可以与 draw 函数协调

# JS 执行动画的核心思想

基本公式:

△r=△v△t\triangle r = \triangle v \triangle t △r=△v△t

简单理解:r 是距离,v 是速度,t 是时间

比例尺 / 距离系数:通过比例尺将实际的大小、长度等比例缩放 / 增加到屏幕上显示的大小、长度

# 简单动画

# 匀速运动
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const ball = document.querySelector( '.ball');

const draw = (progress) => {
    ball.style.transform = `translate(${progress * 100}px, 0)`;
    // 这里的 * 100 实际上就是一个比例尺,将 [0, 1] 映射到 [0, 100] px
}

// 沿着 x 轴匀速运动
animate({
    duration: 1000,
    easing(timeFraction) {
        // 这就是一个匀速运动函数,相当于 (x) => x
        return timeFraction;
    },
    draw
});

# 重力效果

从这个动画开始,就需要考虑数学公式了,即:怎么把 v=g⋅t,即x=12gt2v = g·t,即x = \frac{1}{2} gt^{2}v=g⋅t,即x=21​gt2 套用到 animate 这个模板里面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const draw = (progress) => {
    ball.style.transform = `translate(0, ${(progress - 1) * 500}px)`;
    // 这里的 500 就是比例尺
}

// 沿着 x 轴匀速运动
animate({
    duration: 1000,
    easing(timeFraction) {
        // 这个函数通过 t^2,模拟了重力的最显著特点
        return timeFraction ** 2;
        // 也可以模拟的真实一点:0.5 * 9.8 * (timeFraction ** 2),当然,这样的话 draw 函数内部就也要做相应的调整了
    },
    draw
});

# 摩擦力(匀速减速运动)

同样的,根据摩擦力数学公式写出缓动函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 初始高度 500px
const draw = (progress) => {
    ball.style.transform = `translate(${500 * progress.x}px),${500 * (progress.y - 1)}px)`;
};

// 匀减速运动
animate({
    duration: 1000,
    easing(t) {
        // v0 = 2,a = 2
        return 2 * t - (t ** 2);
    },
    draw
});

# 平抛运动(x 轴匀速,y 轴加速)

平抛运动实际上就是匀速运动重力效果的结合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const draw = (progress) => {
    ball.style.transform = `translate(translate(${500 * progress.x}px), ${500 * (progress - 1)}px)`;
};

// 有两个方向,沿着 x 轴匀速运动,沿着 y 轴加速运动
animate({
    duration: 1000,
    easing(t) {
        return {
            x: t,
            y: t ** 2
        };
    },
    draw
});

# 旋转 + 平抛

其实就是在平抛的基础上加一个旋转效果而已

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const draw = (progress) => {
    ball.style.transform = `translate(o,${500 * (progress - 1)}px rotate(${2000 * progress.rorate}deg))`;
};

// 有两个方向,沿着 x 轴匀速运动,沿着 y 轴加速运动
animate({
    duration: 1000,
    easing(t) {
        return {
            x: t,
            y: t ** 2,
            rotate: t // 匀速旋转
        };
    },
    draw
});

# 拉弓效果

拉弓效果的本质就是:x 轴匀速运动;y 轴为初始速度为负的匀加速

知道这两点后,就不难通过数学表达式写出缓动函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const draw = (progress) => {
    ball.style.transform = `translate(o,${500 * (progress - 1)}px rotate(${2000 * progress.rorate}deg))`;
};

// 有两个方向,沿着 x 轴匀速运动,沿着 y 轴加速运动
animate({
    duration: 1000,
    easing(t) {
        return {
            x: t,
            y: t ** 2,
            rotate: t // 匀速旋转
        };
    },
    draw
});

# 贝塞尔曲线

贝塞尔曲线的详细描述和公式见 Wikipedia,这里给出三次贝塞尔曲线的数学表达式:

由于 P0和 P3的位置是确定的((0,0) 和 (1,1)),所以实际上只需要给出 P1和 P2的坐标即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const bezierPath = (x1, y1, x2, y2, t) => {
    const x = 3 * t * ((1 - t) ** 2) * x1 + 3 * (t ** 2) * (1 - t) * x2 + (t ** 3) * 1;
    const y = 3 * t * ((1 - t) ** 2) * y1 + 3 * (t ** 2) * (1 - t) * y2 + (t ** 3) * 1;
    return [x, y];
}

# 复杂动画

# 弹跳小球

实质上就是到达终点后的反弹和衰减,是重力效果的延伸

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
async function autoDamping() {
    let damping = 0.7, // 衰减系数
        duration = 1000,
        height = 300; 
    
    // 当衰减到一定边界值时停止动画
    while(height > 1) {
        const down = (progress) => {
        	ball.style.transform = `translate(0, ${height * (progress - 1)}px)`;
      	};
        await animate({
        	duration: duration,
        	easing(t) {
          		return t ** 2;
        	},
        	draw: down,
      	});
        height *= damping ** 2; // ** 2 可以使动画效果更加柔和
      	duration *= damping;
		const up = (progress) => {
        	ball.style.transform = `translate(0, ${-height * progress}px)`;
      	}
        await animate({
        	duration: duration,
        	easing(t) {
          		return 2 * t - (t ** 2);
        	},
        	draw: down,
      	});
    }
}

# 椭圆运动

也是套用公式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const draw = (progress) => {
    const x = 150 * Math.cos(Math.PI * 2 * progress);
    const y = 100 * Math.sin(Math.PI * 2 * progress);
    ball.style.transform = `translate(${x}px, ${y}px)`;
}

animate({
	duration: 2000,
    easing(t) {
  		return 2 * t - (t ** 2);
  	},
  	draw,
});

# 相关实践

# 动画资源

动画代码示例

  • codepen.com
  • codesandbox.com

设计网站

  • dribbble.com

动画制作工具(一般都是 UE、UI 同学使用):

  • 2D:Animate CC、After Effects
  • 3D:Cinema 4D、Blender、Autodesk Maya

svg :

  • Snap.svg - 现代 SVG 图形的 JavaScript 库。
  • Svg.js - 用于操作和动画 SVG 的轻量级库。

js :

  • GSAP - JavaScript 动画库。
  • TweenJs - 一个简单但功能强大的 JavaScript 补间 / 动画库。CreateJS 库套件的一部分。
  • Velocity - 加速的 JavaScript 动画。

css :

  • Animate.css - CSS 动画的跨浏览器库。像一件简单的事情一样容易使用。

canvas :

  • EaselJs - EaselJS 是一个用于在 HTML5 中构建高性能交互式 2D 内容的库
  • Fabric.js - 支持动画的 JavaScript 画布库。
  • Paper.js - 矢量图形脚本的瑞士军刀 - Scriptographer 使用 HTML5Canvas 移植到 JavaScript 和浏览器。
  • Pixijs - 使用最快、最灵活的 2D WebGL 渲染器创建精美的数字内容。

# 工作实践

  • 需要完全前端自己开发 使用已经封装好的动画库,从开发成本和体验角度出发进行取舍。
  • 设计不是很有空 清晰度,图片格式可以指定,动画尽量给出示意或者相似案例参考。索要精灵资源、资源等需要帮忙压缩。
  • 设计资源充足 要求设计导出 lottie 格式文件。 (Lottie 是可应用于 Android, iOS, Web 和 Windows 的库,通过 Bodymovin 解析 AE 动画,并导出可在移动端和 web 端渲染动画的 json 文件)

# 动画的优化

# 用户体验
  • 《The Guide To CSS Animation: Principles and Examples》
  • 动画的 12 项基本法则 - Wikipedia
# 性能

在实际的应用里,最为简单的一个注意点就是,触发动画的开始不要用 display: none 属性值,因为它会引起 LayoutPaint 环节,通过切换类名就已经是一种很好的办法。

translate 属性值来替换 top/left/right/bottom 的切换, scale 属性值替换 width/heightopacity 属性替换 display/visibility 等等。

CSS3 硬件加速又叫做 GPU 加速,是利用 GPU 进行渲染,减少 CPU 操作的一种优化方案。由于 GPU 中的 transform 等 CSS 属性不会触发 repaint,所以能大大提高网页的性能。

CSS 中的以下几个属性能触发硬件加速∶

  1. transform
  2. opacity
  3. filter
  4. Will-change

如果有一些元素不需要用到上述属性,但是需要触发硬件加速效果,可以使用一些小技巧来诱导浏览器开启硬件加速。

# 其他

算法优化:

  • 线性函数代替真实计算
  • 几何模型优化
  • 碰撞检测优化

内存 / 缓存优化

离屏绘制

# 参考资料

  • 字节青训营课程
  • Wikipedia
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-202,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端动画实现笔记
动画:动画是通过快速连续排列彼此差异极小的连续图像来制造运动错觉和变化错觉的过程。
赤蓝紫
2023/01/02
1.6K0
前端动画实现笔记
83.HarmonyOS NEXT 动画系统详解:构建流畅的用户体验
通过合理使用动画系统,可以显著提升应用的用户体验。在实际开发中,要注意平衡动画效果和性能消耗,确保动画流畅自然,同时不影响应用的整体性能。
全栈若城
2025/03/16
930
Threejs进阶之十二:Threejs与Tween.js结合创建动画
Tween.js是一个可以产生平滑动画效果的js库,其官方地址为:https://github.com/tweenjs/tween.js/,可以将源码下载后,可以在tween.js/dist/文件夹下找到相应的js代码,在HTML中进行引用;也可以通过npm命令在终端控制台中安装tween.js模块 npm install @tweenjs/tween.js 然后在相应的页面引用Tween.js import * as TWEEN from '@tweenjs/tween.js'
九仞山
2023/05/04
6K3
Threejs进阶之十二:Threejs与Tween.js结合创建动画
SVG 动画精髓
TL;DR 本文主要是讲解关于 SVG 的一些高级动画特效,比如 SVG 动画标签,图形渐变,路径动画,线条动画,SVG 裁剪等。 例如:路径动画 图形渐变: 线条动画: 以及,相关的动画的矩阵知识,
villainhr
2018/07/03
3.5K0
让动画更优雅–缓动算法
有些人是那种又菜又爱玩的,比如说我,最近想写个主题,主题动画细节也是一个非常重要的地方,但是动画算法我太懒了,想直接抄过来,jq是有算法插件的,可是这带个jq,更自由的我,选择隔壁大佬推荐的Tween.js
月萌
2020/06/12
2K0
【效果高能】你不知道的 Animation 动画技巧
在大多数需求中,css3 的 transition / animation 都能满足我们的需求,并且相对于 js 实现,可以大大提升我们的开发效率,降低开发成本。
一只图雀
2020/11/03
1.7K0
【效果高能】你不知道的 Animation 动画技巧
3分钟学会在小程序开发纸飞机动画
14年以上开发经验,对client和server开发都有着深刻认知,现在依然每周都在学习数学。
京东技术
2018/09/28
2.5K0
3分钟学会在小程序开发纸飞机动画
前端动画必知必会:React 和 Vue 都在用的 FLIP 思想实现小姐姐流畅移动。
乍一看,让我们手写出这个逻辑应该是非常复杂的,先看看本文最后要实现的效果吧,和这个案例是非常类似的。
ssh_晨曦时梦见兮
2020/06/05
1.5K0
前端动画必知必会:React 和 Vue 都在用的 FLIP 思想实现小姐姐流畅移动。
高中物理学运动公式实现js动画
在网页上创建动画一般有两种方式:css和javascript。它们在创建动画的时间和性能上是不一样的,各有利弊。选择哪种方法实际上取决于项目,以及想要实现什么类型的动画。
全栈程序员站长
2022/11/04
1.3K0
高中物理学运动公式实现js动画
动画(20171030)
一、简单动画 show([arg])//将元素display属性置为除none之外的值,具体记忆功能; hide([arg])//将元素display属性置为none toggle([arg])//实现元素状态的切换 以上两个函数均可带参数,一类是关键字参数:slow,normal,fast;一类是数值参数。如show(1000)表示在1秒钟之内将元素由隐藏置为显示, slow -> 600,normal -> 400,fast -> 200 fadeIn([arg])//提升已降低透明度
天天_哥
2018/09/29
4870
搞定这些疑难杂症,向css3动画说yes
本文篇幅比较长,涉及到的知识点也比较多,如3d,动画性能,动画js事件等,参考文献及demo展示也比较多,所以建议pc阅读效果更佳。
IMWeb前端团队
2019/12/04
6780
搞定这些疑难杂症,向css3动画说yes
「Web Animation API 专题」纯手工撸一个图片随机移动的动画
当我们谈及网页动画时,自然联想到的是 CSS3 动画、JS 动画、SVG 动画 等技术以及 jQuery.animate() 等动画封装库,根据实际动画内容设计去选择不同的实现方式,然而,每个现行的动画技术都存在一定的缺点,如 CSS3动画必须通过JS去获取动态改变的值,一个动画效果分散在css文件和js文件里不好维护,setInterval 的时间往往是不精确的而且还会卡顿,引入额外的动画封装库也并非对性能敏感的业务适用。
前端达人
2019/07/31
1.8K0
「Web Animation API 专题」纯手工撸一个图片随机移动的动画
如何实现一个下载进度条/播放进度条
技术上没太大难度,有难度的地方是怎么让整个动画比较流畅。一个主要问题是动画的滞后性:当下载进度到某个点的时候,你再用250ms的动画过渡过去,这个时候已经慢了,所以很多人可能因为这个原因或者嫌麻烦,直接就不做动画了,在进度事件触发的时候直接更新进度条相应的位置,不过我们可以尝试实现一下。
Nealyang
2020/06/04
2K0
如何实现一个下载进度条/播放进度条
JavaScript学习笔记019-原生js运动框架0时间运动框架
Author:Mr.柳上原 付出不亚于任何的努力 愿我们所有的努力,都不会被生活辜负 不忘初心,方得始终 吾日三省吾身 学习 学习 学习 Nodejs又来了 下个月笔记更新 前端果然是一项需要活到老学到老的语言 当你登上这座船 几乎永远不可能再停下来 <!DOCTYPE html> <!-- 文档类型:标准html文档 --> <html lang='en'> <!-- html根标签 翻译文字:英文 --> <head> <!-- 网页头部 --> <meat charset='UTF-8'/> <
Mr. 柳上原
2018/09/05
9750
动画:从 AE 到 Web,‘甩锅’给设计师
接下来因工作调整,应该就很少接触 H5 开发了。借此机会总结对动画的一些个人思考。
用户4962466
2019/08/02
3.5K0
CSS3 动画
渐变指在两个或多个指定的颜色之间显示平稳的过渡,渐变一般分为线性渐变和径向渐变,呈一条直线渐变的称作线性渐变,而从圆心到四周扩散的过程成为径向渐变
Nian糕
2020/06/05
9630
CSS3 动画
【CodeBuddy】三分钟开发一个实用小功能之:动态文字路径动画
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接: 腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴
Jimaks
2025/05/23
1160
【CodeBuddy】三分钟开发一个实用小功能之:动态文字路径动画
「Web Animation API 专题」用原生JS制作一个图片随机移动的动画
当我们谈及网页动画时,自然联想到的是 CSS3 动画、JS 动画、SVG 动画 等技术以及 jQuery.animate() 等动画封装库,根据实际动画内容设计去选择不同的实现方式,然而,每个现行的动画技术都存在一定的缺点,如 CSS3动画必须通过JS去获取动态改变的值,一个动画效果分散在css文件和js文件里不好维护,setInterval 的时间往往是不精确的而且还会卡顿,引入额外的动画封装库也并非对性能敏感的业务适用。
前端达人
2019/08/02
4.1K0
「Web Animation API 专题」用原生JS制作一个图片随机移动的动画
使用 pasition 制作酷炫Path过渡动画
Pasition – Path Transition with little JS code, render to anywhere – 超小尺寸的Path过渡动画类库 Github源代码 在线演示 最近和贝塞尔曲线杠上了,如curvejs 和 pasition 都是贝塞尔曲线的应用案例,未来还有一款和贝塞尔曲线相关的开源的东西,暂时保密。
Javanx
2019/09/05
1.4K0
使用 pasition 制作酷炫Path过渡动画
八.CSS之animation(动画)
​ 多个属性间使用,隔开 ​ 如果所有属性都需要过渡,则使用all关键字 ​ 大部分属性都支持过渡效果,注意过渡时必须是从一个有效数值向另外一个有效数值进行过渡(auto不是有效数值,过渡动画效果不会生效)
小海怪的互联网
2020/11/24
1.4K0
推荐阅读
相关推荐
前端动画实现笔记
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验