layout: post

title: "svg自定义路径动画"

subtitle: "svg path 动画"

date: 2016-09-26 12:00:00

author: "Guolei"

header-img: ""

header-mask: 0.3

catalog: false

tags:

- svg

svg相对于canves,svg更加适合做小图标和线条,canves做大型游戏

svg的基础教程可以在w3c上查看,本篇文章主要讲,如何绘制自定义路径,以及如何在自定义路径上实现动画。

先看效果

(忽略我丑陋的书法)

难点:

如何将自定义路径转化为Path代码

如何获取svn每个像素点的坐标

车子并不是简单的位移,车头方向和前进方向相同(切线)

原理

svg实现动画一般是通过 stroke-dasharray和stroke-dashoffset这两个属性来实现。

backgroundLayer 1

html

path {

stroke-dasharray: 3000;

stroke-dashoffset: 3000;

-webkit-animation: dash 5s linear infinite;

animation: dash 5s linear infinite;

}

css

stroke-dasharray代表虚线之间的间距大小

stroke-dashoffse代表虚线的偏移量

实现过程

设置一个足够长的间距 (大于路径的长度)

设置一个足够长的偏移量,保证刚开始看不到路径。(可以和长度一样)

让偏移变成0 最后在配合css3的animation 增加一个动画过度,实现动画。

path代码

问题来了,path的代码哪里来的

难道自己一个个像素点去算?

当然不是,我们有工具

使用教程:

选择画笔工具

在画板上绘制路线

点击view,导出路径代码

高阶用法

绘制好svn路线之后,如何让物体沿着路径前进

// 配置位移矢量 一共走100步

var STEP = 100;

var curStep = 0;

var path = $('#path')[0];

var $car = $('#car');

var timer = null;

// 最重要的两个属性 获取长度,以及每个点的坐标

var totalLength = path.getTotalLength();

var initPosition = path.getPointAtLength(0);

var prePosition = initPosition;

var curPosition = initPosition;

// 获取前进切线角度

function getRotate(a, b) {

var k = (b.y - a.y) / (b.x - a.x);

var rotate = Math.atan(k) * 180 / Math.PI;

return k < 0 ? rotate + 90 : rotate - 90;

}

// 定位car

$car.css({

left: initPosition.x,

top:initPosition.y,

'-webkit-transform': 'translate(-2px, 0) rotate(' + getRotate(curPosition , path.getPointAtLength(1)) +'deg)'

}).show()

// 定时器控制前进

timer = setInterval(function() {

if (curStep != STEP) {

curStep++;

curPosition = path.getPointAtLength(totalLength/STEP * curStep);

$car.css({

left: curPosition.x,

top:curPosition.y,

'-webkit-transform': 'translate(-2px, 0) rotate('+getRotate(prePosition, curPosition)+'deg)'

}).show();

prePosition = curPosition;

} else {

clearInterval(timer);

}

}, 100)

原理就是将svn的长度平分100次,每100ms走一次,每次的坐标通过 path.getPointAtLength(totalLength/STEP * curStep)计算,然后通过js控制小车的位置。

通过setimeout可以配置小车运动的快慢,还可以通过缓动函数,使小车具有惯性。

android svg路径动画,svg实现自定义路径动画相关推荐

  1. Android 动画介绍及自定义3D动画效果的基本使用

    导语 Android的动画框架包括帧动画.视图动画(又叫补间动画).属性动画.在Android3.0之前,视图动画一家独大,但随之后属性动画框架被推出.相比属性动画,视图动画一个非常大的缺陷就是不具备 ...

  2. android动画介绍之 自定义Animation动画实现qq抖一抖效果

    昨天我们介绍了Animation的基本用法.小伙伴们了解的怎么样了?如果还没有了解过Animation的小伙伴可以看看这篇博客 android动画介绍--Animation 实现loading动画效果 ...

  3. 自己写的一个动画,包含自定义的动画set

    动画集内包含自定义的一个动画,和一个缩放动画. 这个是页面 package com.nico;import android.app.Activity; import android.os.Bundle ...

  4. swiftui动画之tab自定义切换动画_Unity动画系统详解1:在Unity中如何制作动画?

    摘要:在场景中加入动态的物体,可以让整个场景更加生动.真实.Unity场景中的物体可以通过制作动画,让物体动起来.简单的动画如物体的移动.旋转(比如旋转的风扇.闪烁不定的灯泡等),复杂的动画如游戏中角 ...

  5. swiftui动画之tab自定义切换动画_vue 基础-动画过渡 transition 示例

    前言 <vue 基础>系列是再次回炉 vue 记的笔记,除了官网那部分知识点外,还会加入自己的一些理解.(里面会有大部分和官网相同的文案,有经验的同学择感兴趣的阅读) 讲到动画,说真的我自 ...

  6. Compose 动画艺术探索之可见性动画

    本篇文章是此专栏的第二篇文章,上一篇文章简单写了下 Compose 的动画,让大家先看了下 Compose 开箱即用的动画效果,效果还是挺好的,感兴趣的可以去看下:Compose 动画艺术探索之瞅下 ...

  7. UE4动画系统:什么是动画通知(Anim Notify)

    文章目录 什么是动画通知(Anim Notify)? 动画通知的使用方法 1. 直接在动画编辑器中添加动画通知 2. 创建可复用的动画通知类(Anim Notify Class) 补充 什么是动画通知 ...

  8. SVG基本使用(四、动画、动画常用属性、复合动画/往返动画/形变动画/路径动画、脚本编程

    一.动画 1.SVG动画 在SVG中提供了三种常用动画标记 animate:基础动画 animateTransform:形变动画 animateMotion:路径动画 2.SVG动画属性 attrib ...

  9. android 流畅动画svg,Android自定义View-SVG动画

    SVG 1.SVG与Bitmap的区别: SVG是可缩放矢量图形,全称Scalable Vector Graphics.经过数学计算利用直线和曲线绘制而成,无论怎么放大,都不会出现马赛克现象.可以使用 ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续6)
  2. python数据结构与算法(11)
  3. cocos2dx[3.2](18)——屏幕截图ScreenShot
  4. TianyaDL_4thread天涯帖子下载4线程版
  5. 安卓app与阿里云服务器的无线通信(非局域网)
  6. Android开机广播和关机广播
  7. (王道408考研操作系统)第三章内存管理-第一节6-4:非连续分配管理方式之基本分页存储管理之两级页表
  8. azure云数据库_Microsoft Azure SQL数据库-分步创建教程
  9. 文档控件正在将数据上传到服务器,关于CellWeb插件中文件打开、上传、以及导入数据库中的问题...
  10. 如何搭建中国电信物联网云平台
  11. 22. 协程与Python中的多任务异步协程
  12. Android 微信聊天页面
  13. GitHub 热点速览 Vol.16:化身蒙娜丽莎和乔布斯对话
  14. 网上在线培训平台哪家好?
  15. 魔法少女小圆计算机音乐,魔法少女小圆 无损音乐合集
  16. 数数字(UVa1225)
  17. Python兔鼠大战游戏源代码
  18. 当今app行业 比较流行的 简称 汇总
  19. OBD车载诊断系统、移动管家车联网汽车OBD诊断系统车辆信息管理硬件
  20. Android 锁屏后Service服务保活(支持9.0)

热门文章

  1. 实习公司没有转正hc,怎么办?
  2. 使用Tensorflow进行数字(字母)验证码训练和预测
  3. 计算机网络协议的概念
  4. 深入理解Spring IOC和AOP
  5. HashMap和HashTable到底哪不同?
  6. 单片机c语言编程教学大纲,2014《单片机原理及应用》课程教学大纲.doc
  7. 吉利纯电动品牌几何A:极简设计、智能驾驶背后暗含大野心...
  8. Word技巧:Alt键不为人知的5个强大功能,你知道吗
  9. Python破解WIFI的简单代码
  10. 手游游戏盒子有什么作用和优势?