SVG技术入门:线条动画实现原理

相信大家都见到过这样神奇的技术:一副线条构成的画能自动画出自己。非常的酷。Jake Archibald是这种SVG技术的首创者,并且写了一篇非常好的文章来描述它是如何实现的。Brian Suda也在24 Ways网站上讨论过它。 Polygon使用它在一篇设计方面的文章里创造出了非常神奇的效果。Codrops也做出了一些非常漂亮的例子。

其实我没有什么好增补的,只是想把这种技术说的更明白些,所以,在这里我要用我的方式把这种技术再讲解一遍。

1. 你有一个SVG图形

2. 这个图形必须要有一个线条(stroke)属性

3. 线条可以是虚线

我们可以用Illustrator制作,也可以用编程实现。我们用CSS来设置这些路径的样式(假定我们这里是inline SVG,或通过一个<object>),把它们变成虚线形式。

<svg ...>    <path class="path" stroke="#000000" ... > </svg>
.path {stroke-dasharray: 20; }

这是让虚线里的每个小线段长度为20px。

4. 可以让虚线小段的长度变得更长….

.path {stroke-dasharray: 100; }

5. 我们还可以给我们的线条设置”offset”偏移量,这样会导致虚线里的小线段的位置发生移动。

当我们动态设置图形中线条的“offset”值时,可以看到这个效果:


可以这样简单的实现:

.path {stroke-dasharray: 100; animation: dash 5s linear; } @keyframes dash { to { stroke-dashoffset: 1000; } }

6. 想象,当虚线的小线条足够长,超过图形的整个线条长度时

没有什么变化,整个图像看起来完全不是虚线。你只需要将stroke-dasharray属性设置的足够长,超过整个线条的长度。

7. 现在给线条设置偏移量,让它不再覆盖整个图形。

这样你就看不见图形了。

8. 现在动态的慢慢将线条的偏移量设置回归到0


如果通过CSS,你需要将animation属性设置成forwards,这样整个动画就会停止在它的最终状态。

.path {stroke-dasharray: 1000; stroke-dashoffset: 1000; animation: dash 5s linear forwards; } @keyframes dash { to { stroke-dashoffset: 0; } }

Tada!

实例演示

 

为什么要用JavaScript?

大部分你看到的SVG线条动画都使用了JavaScript。这是因为在现实情况中你很难知道线条有多长。我们这里设置的是1000,是因为它碰巧是1000。

用JavaScript获取长度值的写法是这样的:

var path = document.querySelector('.path'); var length = path.getTotalLength();

然后你就可以随便使用这个值了。文本顶部链接的那些文章讲的都比本文透彻,你最好还是参考一下那些文章。我只想简单的讲一下这种技术方法,希望它能给你一些启示。

(英文:How SVG Line Animation Works.)

转载于:https://www.cnblogs.com/w3cdream/p/4995131.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习——人工神经网络之BP算法编程(python二分类数据集:马疝病数据集)

目录 一、理论知识回顾 1、神经网络模型 2、明确任务以及参数 1&#xff09;待估参数&#xff1a; 2&#xff09;超参数&#xff1a; 3&#xff09;任务 3、神经网络数学模型定义 1&#xff09;激活函数 ​ 2&#xff09;各层权重、阈值定义 3&#xff09;各层输入输…

Halcon例程(基于多个标定图的单目相机标定)详解—— Camera_calibration_multi_image.hdev

一、前言 在我的工业相机专栏里已经将相机标定涉及到的理论部分讲解完毕&#xff0c;为什么要标定以及标定要求出什么参数呢&#xff0c;用一个Halcon 例程来帮助理解。 这个例程是比较经典的标定程序&#xff0c;基本将标定过程讲的比较清楚&#xff0c;用的标定图像是系统自…

SkipList 跳表

为什么选择跳表 目前经常使用的平衡数据结构有&#xff1a;B树&#xff0c;红黑树&#xff0c;AVL树&#xff0c;Splay Tree, Treep等。 想象一下&#xff0c;给你一张草稿纸&#xff0c;一只笔&#xff0c;一个编辑器&#xff0c;你能立即实现一颗红黑树&#xff0c;或者AVL树…

机器学习——深度学习之卷积神经网络(CNN)——LeNet卷积神经网络结构

目录 一、卷积神经网络 1、卷积神经的作用 2、LeNet 1&#xff09;数据库准备——minst 2&#xff09;模型 二、关于卷积神经网络结构的一些术语定义 1、特征图&#xff08;Feature map&#xff09; 2、height&#xff08;长度&#xff09;、width&#xff08;宽度&…

工业相机(3D)主要参数详述

一、前言 准确的完成相机选型是一个视觉工程师必备的技能&#xff0c;而选型前必须对其内部参数了如指掌。工业相机是一种比较复杂的产品&#xff0c;其参数很多&#xff0c;每个参数可能会有不同的标准&#xff0c;下面对主要的参数会做比较详细的阐述。 二、参数详述 2.1 …

JAVA8永久代

在Java虚拟机&#xff08;以下简称JVM&#xff09;中&#xff0c;类包含其对应的元数据&#xff0c;比如类的层级信息&#xff0c;方法数据和方法信息&#xff08;如字节码&#xff0c;栈和变量大小&#xff09;&#xff0c;运行时常量池&#xff0c;已确定的符号引用和虚方法表…

Struts 2初体验

Struts2简介&#xff1a; Struts2是一个基于MVC设计模式的Web应用框架&#xff0c;它本质上相当于一个servlet&#xff0c;在MVC设计模式中&#xff0c;Struts2作为控制器(Controller)来建立模型与视图的数据交互。 Struts 2 目录结构:     apps目录&#xff1a;Struts2示例…

机器学习——深度学习之数据库和自编码器

目录 一、数据库——数据获取 1、Mnist 2、ImageNet 二、自编码器&#xff08;Auto-encoder&#xff09;——参数初始化 1、功能 2、基本思想 1&#xff09;训练第一层 2&#xff09;训练第二层及以后的神经网络 ​ 3&#xff09;利用BP对整个神经网络的参数初始值进…

Halcon例程详解 (深度图转换为3D图像)—— xyz_attrib_to_object_model_3d

一、前言 深度图向点云图进行转换是进行3D检测项目时会遇到的问题&#xff0c;halcon里也有针对此问题的相关例程&#xff0c;下面对此例程进行分析。通过学习此例程&#xff0c;我们可以掌握如何将一张深度图像和一张正常二维图像转换为3D点云。 二、分析 * 初始化界面 dev…

动态代理之Cglib浅析

什么是Cglib Cglib是一个强大的&#xff0c;高性能&#xff0c;高质量的代码生成类库。它可以在运行期扩展JAVA类与实现JAVA接口。其底层实现是通过ASM字节码处理框架来转换字节码并生成新的类。大部分功能实际上是ASM所提供的&#xff0c;Cglib只是封装了ASM&#xff0c;简化了…

机器学习——深度学习之卷积神经网络(CNN)——AlexNet卷积神经网络结构

目录 一、AlexNet卷积神经网络结构模型 1、数据库ImageNet 2、AlexNet第一层卷积层 二、AlexNet卷积神经网络的改进 1、非线性变化函数的改变——ReLU 2、最大池化&#xff08;Max Pooling&#xff09;概念的提出——卷积神经网络通用 1&#xff09;池化层 2&#xff0…

C#委托——基础2

在上一篇随笔中&#xff0c;简要说明了怎样定义委托&#xff0c;定义事件&#xff0c;订阅事件&#xff0c;最后也实现了效果&#xff0c;就是当员工类的某个对象&#xff0c;执行某个事件时&#xff0c;委托事件被触发&#xff0c;后面也得到了结果&#xff0c;但是想象一下实…

机器学习——深度学习之编程工具、流行网络结构、卷积神经网络结构的应用

目录 一、编程工具 caffe实现LENET-5 二、流行的网络结构 1、VGGNET 2、Googlenet ​ 3、ResNet​ ​ 三、卷积神经网络的应用 1、人脸识别 ​ 2、人脸验证 3、人脸特征点检测 4、卷积神经网络压缩 一、编程工具 caffe的优点&#xff1a;模型标准化&#xff0c;源代码…

Halcon例程详解(激光三角系统标定)—— calibrate_sheet_of_light_calplate.hdev

前言 1 激光三角测距 激光三角测距法原理很简单,是通过一束激光以一定的入射角度照射被测目标,激光在目标表面会产生漫反射,在另一角度利用透镜对反射激光汇聚成像,光斑成像在CCD(Charge-coupled Device,感光耦合组件)位置传感器上。当被测物体沿激光方向发生移动时,…

【tenserflow】——数据类型以及常用属性

目录 一、什么是Tensor&#xff1f; 二、Tensorflow常见数据类型 三、Tensorflow常见属性device\cpu\gpu\ndim\shape\rank等 1、创建一个tensor 1&#xff09;tf.constant() 2)tf.Variable() 2、判断一个变量是否为tensor张量 3、生成不同设备&#xff08;cpu,gpu&#x…

网页开发浏览器兼容性问题

1、在ie6下的双margin问题 在ie6下&#xff0c;设置了float的元素&#xff0c;以float:left为例&#xff0c;如图所示。会出现第一个浮动元素&#xff0c;即相对于父级元素浮动的&#xff0c;会出现双倍margin的问题。 注意仅仅是相对于父级元素浮动的&#xff0c;即第一个会出…

【tensorflow】——创建tensor的方法

目录 1、tf.constant() 2、tf.Variable() 3、tf.zeros():用0去填充指定形状的数组 4、tf.convert_to_tensor(a,dtypetf.int32) 5、tf.ones():用1去填充指定形状的数组 6、tf.fill():用指定的元素去填充指定形状的数组 7、随机化初始化进行创建 1&#xff09;normal正态分…

Halcon —— 图像像素类型与转换

图像类型 就目前工业领域主流的图像处理工具halcon来讲&#xff0c;有以下几种图像类型&#xff1a;‘byte’, ‘complex’, ‘cyclic’, ‘direction’, ‘int1’, ‘int2’, ‘int4’, ‘int8’, ‘real’, ‘uint2’&#xff0c;具体含义如下图所示。 ‘byte’ 每像素1字节…

Halcon例程详解(基于卡尺工具的匹配测量方法) —— measure_stamping_part.hdev

前言 1卡尺工具介绍 Halcon中的Metrology方法即为卡尺工具&#xff0c;可用来拟合线&#xff0c;圆&#xff0c;这种方法对于目标比背景很明显的图像尺寸测量是很方便的&#xff0c;不需要用blob进行边缘提取等&#xff0c;但缺点也很明显&#xff0c;需要目标的相对位置基本…

【TensorFlow】——不同shape的tensor在神经网络中的应用(scalar,vector,matrix)

目录 ​ 1、scalar——标量 1&#xff09;在神经网络中存在的场景 2&#xff09;one_hot编码 3&#xff09;举例应用 2、vector——向量 ​ 3、matrixs——矩阵 4、dim3的tensor 5、dim4的tensor 6、dim5的tensor 本文主要的目的是让初学者对tensor的各种形式的使用场…