摘要:在上能看到好多效果惊艳的图标。现在来看代码,相信不会再是一头雾水了也可以用控制的属性,控制的动画过程,做成能响应点击等事件的图标按钮。当然能做的远不止图标,这里有不少例子。
在 loading.io 上能看到好多效果惊艳的loading图标。它们都是用svg写成的,寥寥几行代码,比img图片更精细更节省体积,比纯dom实现要更灵活和高效。
怎么画这些圆和方块?怎么着色?怎么动起来? 先看看svg的基础知识,然后将上面第一个图标画出来。
svg有一些预定义的形状元素:矩形
1 2 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300" height="300" viewBox="0 0 300 300"> 3 4 5 <line x1="0" y1="0" x2="250" y2="30" /> 6 7 8 <polygon points="5,5 100,100 50,200" /> 9 10 11 <rect x="100" y="100" width="120" height="100" /> 12 13 14 <circle cx="100" cy="50" r="40" stroke="black"/> 15 16 17 <text x="0" y="20" style="font-size:16px;font-weight: bold">Try SVGtext> 18 19 svg>
svg元素的样式可以写成标签的属性,也可以写在style里面。下面是一些主要的样式属性:
svg还支持很多滤镜效果,能做渐变、阴影、模糊、图像混合等等。不需要了解那么多,例如要画几个彩色圆圈,用circle 配合fill 即可。
注意:transform 默认以svg左上角为基点,而不是圆心或其他中心。左上角是svg坐标系原点。了解transform和坐标系统,可以参考 这里。
svg有几个辅助元素:
对于上面提到的transform基点问题,可以通过嵌套
1 <svg width="80px" height="80px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"> 2 <g transform="translate(20 50)"> 3 <circle cx="0" cy="0" r="7" fill="#e15b64" transform="scale(0.99275 0.99275)" /> 4 g> 5 <g transform="translate(40 50)"> 6 <circle cx="0" cy="0" r="7" fill="#f47e60" transform="scale(0.773605 0.773605)" /> 7 g> 8 <g transform="translate(60 50)"> 9 <circle cx="0" cy="0" r="7" fill="#f8b26a" transform="scale(0.42525 0.42525)" /> 10 g> 11 <g transform="translate(80 50)"> 12 <circle cx="0" cy="0" r="7" fill="#abbd81" transform="scale(0.113418 0.113418)" /> 13 g> 14 svg>
svg的动画效果是基于动画标签元素实现的:
svg的写法很灵活,样式可以写成标签属性也可以写在style里面,动画标签可以通过xlink指定元素,也可以写在动画元素的内部。如下演示animateTransform的xlink写法:
上例的动画是A到B的过渡,要形成顺畅的循环,至少要定义三个关键点。animateTransform支持更多更灵活的属性设置:
discrete
| linear
| paced
| spline
对svg动画的更详细介绍,参考 这里 。
五、代码实例
circle画圆,fill着色,用g标签包裹并定位,transform设置初始形变,animateTransform设置动画。现在来看代码,相信不会再是一头雾水了:
也可以用js控制svg的属性,控制svg的动画过程,做成能响应点击等事件的图标按钮。当然svg能做的远不止图标,这里有不少例子。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/2006.html
摘要:作者通常我们用绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的这些图怎么做出来呢今天就来分享下如何一步步绘制出三维矢量图。八面体我们先以下面这个八面体为例。 showImg(https://segmentfault.com/img/remote/1460000019800947); 作者 | Jay Alammar 通常我们用 Python 绘制的都是二维平面图,但有...
摘要:非常的庞大,而且它是完全为设计而生的动效库。它运行于纯粹的之上,是目前最强健的动画资源库之一。可能是创建滚动特效最好用的工具,它支持大量的浏览器,只要它们支持和特性。可以通过安装吊炸天了,接近现实生活中的物理运动碰撞惯性动画库。 收集日期为2019-02-28,★代表当时的该项目在github的star数量 Animate.css 56401 ★ 一个跨浏览器的动效基础库,是许多基础动...
摘要:层叠即表示允许以多种方式来描述样式,一个元素可以被渲染呈现出多种样式。可以让属性的变化过程持续一段时间,而不是立即生效。比如,将元素的颜色从白色改为黑色,通常这个改变是立即生效的,使用后,将按一个曲线速率变化。 showImg(https://segmentfault.com/img/bVZwyL?w=900&h=385); CSS 的全称是 Cascading Style Sheet...
阅读 3000·2021-09-03 10:33
阅读 1157·2019-08-30 15:53
阅读 2584·2019-08-30 15:45
阅读 3351·2019-08-30 14:11
阅读 500·2019-08-30 13:55
阅读 2556·2019-08-29 15:24
阅读 1863·2019-08-26 18:26
阅读 3522·2019-08-26 13:41