前言-为什么学习snap.svg.js

前阵子webAPP的技术群里有人感觉到svg+animate的形式感觉很炫,矢量图任意放大且不需要下载图片,并且在手机端效果流畅。

(矢量图与位图最大的区别是,它不受分辨率的影响。可以任意放大或缩小图形而不会影响出图的清晰度,

可以按最高分辨率显示到输出设备上,位图即相机拍出来的,由像素块组成的图片。

svg代码可使用Adobe公司的AI软件导出,该Snap.svg也是Adobe的开源项目)

虽然svg、animate并不新鲜,但由于svg的代码是由PC计算出来的,操纵它放大或缩小翻转等更加炫酷的效果。

还是使用js封装好的方法来操作更省时省事一些。

并且移动端的火爆也导致svg这项技术也越来越多的运用在项目中。

言归正传-会用jquery就会用snap.svg.js

先点击看个Demo让您感兴趣。

直接在演示页面看那个鳄鱼头就好了,鼠标移动过去会有交互式的动画。

现在我们要做的就是分析这个效果的原理是什么,不要畏惧,即便它看上去很凶(逃

开启F12选择元素 对准那个会动的上颚点击一下看看代码:

这时候我们可以看下点击该元素的代码中有一大堆好像前端从来都不需要用到的标签..(起码我一开始接触svg是这样认为的)

那我们就需要知道这些标签的作用,才能灵活的运用它们。为了通俗易懂,我只简介demo中的标签,想知道更详细的请去查下资料。

<g></g>   :理解为一个块,即那个鳄鱼并不是一张图片,是由N个g(块)组成的,就跟平时重构一样,无数个div嵌套,分离,把它看作一个容器,我们需要操纵容器来进行动画。

<polygon> :标签用来创建含有不少于三个边的图形。

<line>        :标签用来创建线条。

接下来看下源码是什么样的

我们把F12窗口缩小点放在一边,当鼠标移动到上颚的时候,观察下F12中上颚部分的这段代码,见图。

可以看到id="upper-jaw"的g标签中 transform=matrix(1,0,0,1,0,0)这六个数值在不断的变化,也就是我们所见到的动画效果。(matrix()资料我会贴在文章尾部,现在不需要去理解,比较费劲)

上面说过了,会用jquery就会用snap.svg.js,真的很简单,下面我贴代码让我们来look look,别忘了在此之前引入snap.svg.js。(下载snap,要在wamp环境下运行)

        window.onload = function () {

            var croc = Snap.select("#crocodile"),
head = croc.select("#upper-head"),
jaw = croc.select("#upper-jaw"),//获取到了鳄鱼的上颚
symbol = croc.select("#symbol"),
timer; var pivots = [
[44, 147],//matrix动画效果的值
[92, 126]
]; //鼠标离开时触发的函数-即合上大嘴
function close() {
clearTimeout(timer); head.animate({
transform: "r" + [8, pivots[0]]
}, 500, mina.backin); jaw.animate({
transform: "r" + [37, pivots[1]]
}, 500, mina.backin); timer = setTimeout(function () {
symbol.animate({
transform: "t-70,40r40"
}, 100);
}, 400);
} //鼠标hover时触发的函数-即合上大嘴
function open() {
clearTimeout(timer); head.animate({
transform: "r" + [0, pivots[0]]
}, 700, mina.elastic); jaw.animate({
transform: "r" + [0, [92, 200]]
}, 700, mina.elastic); symbol.animate({
transform: "t0,0r0"
}, 500, mina.elastic);
} timer = setTimeout(close, 50); //定义事件触发条件
croc.hover(open,
function () {
timer = setTimeout(close, 200);
}
);
};

我相信会jquery的肯定一看就懂了,无非就是获取元素,调用封装好的方法来达到效果。

篇幅原因(或者是我饿了?感觉有些地方可能没讲细,留言我会及时回复的。

接下来我们需要做的是了解Snap.svg.js的API,我剩下要做的也就是留下一堆资料地址,两袖清风了(泪..

Snap.svg.js中文API

理解CSS3 transform中的Matrix(矩阵)

最后感谢张鑫旭博客的资料。

------------------------------最后的最后(吐个槽-----------------------------------------------

我本来想贴个天鳄食月的效果。。但是没找到CDN,没贴上来,我也懒得整了..放在电脑里自己欣赏吧。。

最后..(没完了没完了

下星期三就要入职了,昨天刚拿到离职证明,离开第一家公司还是比较怀念的,虽然有点坑吧,但还是挺美好的回忆啊 ~ 感叹下( ̄︶ ̄)↗ 涨

前端技术-svg简介与snap.svg.js开源项目的使用的更多相关文章

  1. 字节跳动Web Infra发起 Modern.js 开源项目,打造现代 Web 工程体系

    10 月 27 日举办的稀土开发者大会上,字节跳动 Web Infra 正式发起 Modern.js 开源项目,希望推动现代 Web 开发范式的普及,发展完整的现代 Web 工程体系,突破应用开发效率 ...

  2. 【前端技术】一篇文章搞掂:JS

    待补充 //以下等价 if(val) if(val!=null&&val!=undefined&&val!="") //以下等价 if(!val) ...

  3. 定了,这个vue.js开源项目,面试时,一定会考问

     因为现在的网店,都是用的商城系统, 而实体店都是入座后,扫码打开网上商城进行选购(餐饮,超市等),所以,vue.js迅速开发网上购物商城系统成为了香饽饽, 本人开源2020年4月开发的购物商城系统, ...

  4. SLAM前端技术选择思考

    以前是专门做室内定位技术研究的,先后学习和分析了多种基于电磁的室内定位技术,如WiFi指纹定位(先后出现过RSSI.CTF.CIR多种指纹特征).WiFi ToF定位.低功耗蓝牙BLE以及iBeaco ...

  5. 前端开发的使用服务器环境开源项目 D2Server 可替代Apache

    推荐一个前端开发的使用服务器环境开源项目 D2Server 可替代Apache   攻欲善其事,必先利其器.前端开发,编辑器我们有了Sublime Text2,配置Server环境用……你可能会选择A ...

  6. 推荐前端开发使用的服务器环境开源项目 D2Server 可替代Apache

    攻欲善其事,必先利其器.前端开发,编辑器我们有了Sublime Text2,配置Server环境用……你可能会选择Apache,为什么呢?因为能供选择的选项实在太少.而现在,我向大家推荐一个针对前端开 ...

  7. Snap.svg – 现代 Web 开发必备的 JavaScript SVG 库

    SVG 是一种很好的 Web 技术方案,可以用来创建互动,在任何大小的屏幕上都会很好看.与分辨率无关的矢量图形.而这里推荐的 Snap.svg 这个 JavaScript 可以让你像 jQuery 操 ...

  8. Pizza Pie Charts – 基于 Snap SVG 框架的响应式饼图

    Pizza Pie Charts 是一个基于 Adobe 的 Snap SVG 框架的响应式饼图插件.它着重于集成 HTML 标记和 CSS,而不是 JavaScript 对象,当然Pizza Pie ...

  9. SVG系列教程:SVG简介与嵌入HTML页面的方式

    地址:http://www.w3cplus.com/html5/svg-introduction-and-embedded-html-page.html 随着技术向前的推进,SVG相关的讨论也越渐频繁 ...

随机推荐

  1. C#数字图像处理的3种方法

    本文主要通过彩色图象灰度化来介绍C#处理数字图像的3种方法,Bitmap类.BitmapData类和Graphics类是C#处理图像的的3个重要的类. Bitmap只要用于处理由像素数据定义的图像的对 ...

  2. [POJ] 2226 Muddy Fields(二分图最小点覆盖)

    题目地址:http://poj.org/problem?id=2226 二分图的题目关键在于建图.因为“*”的地方只有两种木板覆盖方式:水平或竖直,所以运用这种方式进行二分.首先按行排列,算出每个&q ...

  3. PYTHON 正则表达示入门

    确实是实践出真知,自己手打代码之后,以前停在理论上的东东,慢慢可以进入实战了. 比如,MATCH和SEARCH之间的区别. #encoding: UTF-8 import re pattern = r ...

  4. Large sum

    聪明的办法是想:求前10位,那只要前8位加起来,进2位就OK. 本的办法,就是真的加起来,截前面10位.如我. numList = str.split() sum = 0 for i in range ...

  5. centos6.5+Django+mysql+nginx+uwsgi

    centos6.5+Django+mysql+nginx+uwsgi 1.nginx的安装.这里采用nginx-1.6.0, 建立一个shell脚本然后执行. #!/bin/bash nginx_ve ...

  6. COJ 0026 汉诺塔问题

    汉诺塔问题 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK ...

  7. 设计模式(十二): Flyweight享元模式 -- 结构型模式

    说明: 相对于其它模式,Flyweight模式在PHP实现似乎没有太大的意义,因为PHP的生命周期就在一个请求,请求执行完了,php占用的资源都被释放.我们只是为了学习而简单做了介绍. 1. 概述 面 ...

  8. HDOJ(HDU) 1406 完数

    Problem Description 完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3:28=1+2+4+7+14. 本题的任务是 ...

  9. Centos6 httpd与tomcat整合发布

    有时候需要在Web入口地址中隐藏非80端口,而最常见的方案是整合httpd和tomcat ,下面是通过mod_jk实现httpd和tomcat整合的详细流程,希望对大家有所帮助. OS: CentOS ...

  10. CDH-5.4.3离线安装

    使用CM离线安装CDH-5.4.3,如下: cdh5.4.3安装 配置/etc/hosts vim /etc/hosts 192.168.10.1 s1 192.168.10.2 s2 192.168 ...