如何使用SVG生成超酷的页面预加载素描动画效果
1 SVG简介
可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式。它由万维网联盟制定,是一个开放标准。
2 SVG的特点
与其他图像格式相比(比如 JPEG 和 GIF),使用 SVG 的优势在于:
SVG 图像可通过文本编辑器来创建和修改
SVG 图像可被搜索、索引、脚本化或压缩
SVG 是可伸缩的
SVG 图像可在任何的分辨率下被高质量地打印
SVG 可在图像质量不下降的情况下被放大
3 浏览器支持
Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持内联 SVG。Internet Explorer 8或更早版本,可通过安装Adobe SVG Viewer以支持SVG。
4 SVG 标签
SVG 代码以 <svg> 元素开始,包括开启标签 <svg> 和关闭标签 </svg> 。这是根元素。width 和 height 属性可设置此 SVG 文档的宽度和高度。version 属性可定义所使用的 SVG 版本,xmlns 属性可定义 SVG 命名空间。
5 SVG 制作素描线动画举例
1)首先画一条素描线 如图:
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
viewBox = "0 0 200 100">
<!--
fill属性是否填充
stroke为绘制,颜色#AAAAAA
stroke-width为绘制线的粗细
d是具体数据,这里看到的数据代表了坐标,以及折线等等,可以使用工具生成
-->
<path fill="none"
stroke = "#AAA"
stroke-width = "2"
d = "M62.9 14.9c-25-7.74-56.6 4.8-60.4 24.3-3.73 19.6 21.6 35 39.6 37.6 42.8 6.2 72.9-53.4 116-58.9 65-18.2 191 101 215"
/>
</svg>
素描线的参数可以使用工具生成,
2)SVG实现素描的动画及原理
stroke-dasharray = "100 10" stroke-dashoffset = "0"
stroke-dasharray定义了生成线段长度,及其线段和线段之间的缝隙 ,这里包含两个参数
stroke-dashoffset定义了从那个位置开始渲染生成线段
相关课程 SVG实现的素描动画模拟效果及其原理
3)使用CSS3来实现素描动画效果
/*定义keyframe动画*/
/* 添加动画到path元素 */
.path{
stroke-dasharray: 265.07;
stroke-dashoffset: 265.07;
animation: dash 3s linear infinite;
/* 支持chrome */
-webkit-animation: dash 3s linear infinite;
}
@keyframes dash{
from{
stroke-dashoffset: 265.07; /* 这里是svg图形中素描线长度,可以使用js获取 */
}
to{
stroke-dashoffset: ;
}
}
/* 支持chrome浏览器 */
@-webkit-keyframes dash{
from{
stroke-dashoffset: 265.07; /* 这里是svg图形中素描线长度,可以使用js获取 */
}
to{
stroke-dashoffset: ;
}
}
相关课程 使用CSS3实现素描动画效果
4)使用Javascript来调节动画效果的参数
/*定义相关Javascript*/
var current_frame, //定义当前帧
total_frames, //定义全部帧数
path, //定义svg中的唯一path元素
length, //定义path所生成的素描长度
handle; //定义javascript动画句柄
path = document.getElementById('path'),
length = path.getTotalLength();
//定义初始化方法
var init = function(){
current_frame = ;
total_frames = ;
path.style.strokeDasharray = length + ' ' + length; //定义dasharray
path.style.strokeDashoffset = length; //定义dashoffset
handle = ;
}
//定义实际的动画绘制方法
var draw = function(){
var progress = current_frame/total_frames;
if(progress>){ //这里定义完成动画
window.cancelAnimationFrame(handle);
}else{//否则使用reqeuestAnimationFrame来生成动画
current_frame++;
path.style.strokeDashoffset = Math.floor(length*( - progress));
handle = window.requestAnimationFrame(draw);
}
}
//定义一个重新运行方法
var rerun = function(){
init();
draw();
}
//页面加载即运行
rerun();
这里主要定义初始化方法和动画绘制的方法,window.requestAnimationFrame(draw);
来生成动画。
5)我们选用极客标签的logo,作为原始图片,坐标参数用 Inkscape 工具生成。
当运行动画绘制程序的时候,各条线安装设定的方式进行绘制,我们就看到非常酷的预加载动画了。
观看完整效果,请访问轻视频课程: 使用javascript生成极客标签Logo的素描动画效果
如何使用SVG生成超酷的页面预加载素描动画效果的更多相关文章
- 页面预加载loading动画,再载入内容
默认情况下如果网站请求速度慢,所以会有一段时间的空白页面等等,用户体验效果不好,见到很多的页面都有预加载的效果,加载之前先加载一个动画,后台进程继续加载页面内容,当页面内容加载完之后再退出动画显示内容 ...
- 使用 SVG 实现一个漂亮的页面预加载效果
今天我们要为您展示如何使用 CSS 动画, SVG 和 JavaScript 创建一个简单的页面预加载效果.对于网站来说,这些预载入得画面提供了一种创造性的方法,使用户在等待内容加载的时候不会那么无聊 ...
- 使用 CSS3 实现超炫的 Loading(加载)动画效果
SpinKit 是一套网页动画效果,包含8种基于 CSS3 实现的很炫的加载动画.借助 CSS3 Animation 的强大功能来创建平滑,易于定制的动画.SpinKit 的目标不是提供一个每个浏览器 ...
- 使用CSS3实现超炫的Loading(加载)动画效果
SpinKit 是一套网页动画效果,包含8种基于 CSS3 实现的很炫的加载动画.借助 CSS3 Animation 的强大功能来创建平滑,易于定制的动画.SpinKit 的目标不是提供一个每个浏览器 ...
- HBuilder mui 手机app开发 Android手机app开发 ios手机app开发 打开新页面 预加载页面 关闭页面
创建子页面 在mobile app开发过程中,经常遇到卡头卡尾的页面,此时若使用局部滚动,在android手机上会出现滚动不流畅的问题: mui的解决思路是:将需要滚动的区域通过单独的webview实 ...
- 通过页面预加载(preload)提升小程序的响应速度
GitHub: https://github.com/WozHuang/mp-extend 主要目标 如果小程序在打开新页面时需要通过网络请求从接口中获取所用的数据,在请求完成之前页面都会因为没有数据 ...
- mpvue 页面预加载,新增preLoad生命周期
存在的必要性:mpvue开发微信小程序,在页面跳转到新页面的过程中会有200ms左右的延迟,这个200ms如果用来请求新页面的接口,那么跳转到新页面或许已经渲染好了页面. 就是两种方式: 1.新页面跳 ...
- 超酷jQuery进度条加载动画集合
在丰富多彩的网页世界中,进度条加载动画的形式非常多样,有利用gif图片实现的loading动画,也有利用jQuery和CSS3实现的进度加载动画,本文主要向大家介绍很多jQuery和CSS3实现的进度 ...
- 在iframe内页面完全加载完后,关闭父页面生成的div遮罩层
遮罩层div为iframe父页面生成,需在iframe内页面完全加载完后,关闭遮罩层 alertMsgClose() :函数为关闭遮罩层函数 此段代码在iframe页面内: <script> ...
随机推荐
- scan cell
scan cell有两种不同的input: 1)data input:由电路的combinational logic驱动: 2)scan input:由另一个scan cell驱动,从而形成scan ...
- Sublime怎样新建HTML文档
1.在右下角有个plain text的标志,点击,选择文件类型为HTML 2.保存为HTML文档 3.这时候输入"!"(注意一定要选择对输入法) 4.然后按"Tab&qu ...
- s3c2440 lcd 显示图片裸机程序
因为前面的裸机程序非常的简单,就不写博了. 程序的流程: 1,初始化C SP 2,关看门狗 3,初始化SDRAM 4,读出 NAND FLASH 中的 包含图片的程式放到SDRAM里面 5,跳转到SD ...
- 【python cookbook】【数据结构与算法】3.保存最后N个元素
问题:希望在迭代或是其他形式的处理过程中对最后几项记录做一个有限的历史记录统计 解决方案:选择collections.deque. 如下的代码对一系列文本行做简单的文本匹配操作,当发现有匹配时就输出当 ...
- git 用法
git init #创建仓库git add _filename #添加文件到缓冲区git commit -m "msg" #提交更新,从缓冲区提交到版本库git status #查 ...
- js,replace() 和 正则表达式(regular expression)
repalce() 只能替换字符串中的匹配到的第一个字符或者字符串 正则表达式 替换多个字符或者字符串 注意:一些数字型的字符串使用replace() 时要确保是字符串,而不是数字. 转换方法: ...
- office 2016 专业增强版 和 visio 2016 专业版 下载安装(附带激活工
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://babyshen.blog.51cto.com/8405584/1697910 o ...
- Centos7下用命令下载jdk7及jboss-eap-6
计划在南非的一台云主机上搭建一个web环境,首先需要在云主机上搭建我们指定版本的JDK和JBOSS. 在云上搭特定版本的环境,软件包传输是一件十分艰巨的任务.我先后尝试了:公司电信专线.公司联通专线. ...
- ThinkPHP跳转与重定向的区别在哪里
跳转: 浏览器认为 : 当前 URL 请求成功 , 重新请求新的 URL . 浏览器会记录当前的 URL 和新的 URL 在请求历史记录中. 回退, 是可以回退到 , 当前的 URL 上的 . ( 无 ...
- Xcode如何打包ipa安装包
http://jingyan.baidu.com/article/ceb9fb10f4dffb8cad2ba03e.html