技术笔记:SVG学习之stroke

简介: 技术笔记:SVG学习之stroke

本文适合对SVG已经有所了解,但是对stoke-dasharray和stroke-dashoffset用法有疑问的童鞋


第一:概念解释


1. stroke意思是:画短线于,在...上划线


2. stroke-dasharray:用于创建虚线,之所以后面跟的是array的,是因为值其实是数组。请看下面解释


stroke-dasharray = '10'


stroke-dasharray = '10, 5'


stroke-dasharray = '20, 10, 5'


stroke-dasharray为一个参数时: 其实是表示虚线长度和每段虚线之间的间距


  如:stroke-dasharray = '10' 表示:虚线长10,间距10,然后重复 虚线长10,间距10


两个参数或者多个参数时:一个表示长度,一个表示间距


  如:stroke-dasharray = '10, 5' 表示:虚线长10,间距5,然后重复 虚线长10,间距5


  如:stroke-dasharray = '20, 10, 5' 表示:虚线长20,间距10,虚线长5,接着是间距20,虚线10,间距5,之后开始如此循环


3. stroke-dashoffset: offset:偏移的意思。


这个属性是相对于起始点的偏移,正数偏移x值的时候,相当于往左移动了x个长度单位,负数偏移x的时候,相当于往右移动了x个长度单位。


需要注意的是,不管偏移的方向是哪边,要记得dasharray 是循环的,也就是 虚线-间隔-虚线-间隔。


这个属性要搭配stroke-dashoffset才能看得出来效果,非虚线的话,是无法看出偏移的。


概念有点抽象,来看一个MDN的例子,图中红线段是偏移的距离


上图效果分别是:


1.没有虚线


2.stroke-dasharray="3 1" ,虚线没有设置偏移,也就是stroke-dashoffset值为0


3.stroke-dashoffset="3",偏移正数,虚线整体左移了3个单位,图中3后面的红线段,就是起始线段,线段之后是1个单位的间隔,我们可见区域从这个间隔开始,然后循环 3-1,3-1的虚线-间隔-虚线-间隔


4.stroke-dashoffset="-3",偏移负数,虚线整体右移动了3个单位,由于dasharray 是循环的,前面偏移的位置会有dasharray 填充上


5.stroke-dashoffset="1",偏移正数,虚线整体左移了1个单位,最终呈现出来的效果跟 线段4 一样


2.示例


利用这两个属性,我们可以做出好看的动画效果


线段从无到有,由短变长


实现思路就是:


第一步:设置stroke-dasharray虚线长度等于当前svg的宽度,间隔大于或者等于svg宽度


  


这时候的效果是这样的,可视区域内只能看到一段虚线


第二步:设置stroke左移 300单位(stroke-dashoffset:300),也就是刚好隐藏了虚线,可视区域内变成了320单位的间隔,


第三步:当鼠标移入的时候,使offset由300变成0,就实现了动图中的效果

//代码效果参考: http://www.lyjsj.net.cn/wx/art_23144.html


svg:hover #line{


stroke-dashoffset: 0;


}


#line{


transition: all 2s;


}


圆形环绕一圈效果


鼠标hover的时候,外层线段绕自身一圈。这个动画的实现原理,跟上面的是一毛一样的


设置stroke-dasharray虚线长度等于当前圆的周长,间隔大于或者等于圆的周长


第一步:先画出一个圆圈:代码如下,圆的半径设置为50


第二步:设置圆的stroke-dasharray和stroke-dashoffset,为圆的周长


#circle{


transition: all 2s;


stroke-dasharray:314,314;


stroke-dashoffset:314;


}


第三步:hover的时候,设置stroke-dashoffset为0,注意圆的stroke起始位置为右侧中间


svg:hover #circle{


stroke-dashoffset:0;


}


圆形环绕的效果就做好了~


码字不易,觉得有帮助,不妨点个赞哦~


原创文章,转载请加原文链接:


代码在github仓库:

相关文章
|
Python
Python 压缩PDF减小文件大小
【8月更文挑战第6天】介绍了三种用Python压缩PDF文件的方法:1) 使用`pdfcompressor`库,安装后可通过简单命令压缩文件;2) 利用`PyPDF2`库,需手动设置压缩参数;3) 采用`pdfsizeopt`库,一键优化PDF大小。各方法均提供示例代码,便于快速实现文件压缩。
1649 0
|
机器学习/深度学习 存储 人工智能
5秒实现AI语音克隆(Python)
推荐一个有趣的AI黑科技--MockingBird,该项目集成了Python开发,语音提取、录制、调试、训练一体化GUI操作,号称只需要你的 5 秒钟的声音,就能实时克隆出你的任意声音
|
20天前
|
前端开发 JavaScript IDE
WebStorm 2025.1 最新版本发布安装+激活+中文设置全流程教程
WebStorm 2025.1 是 JetBrains 推出的专业前端 IDE,全面支持 JS/TS 及主流框架,智能补全、重构与调试能力升级,新增 AI 辅助编码、性能分析工具,大幅提升开发效率与代码质量。
309 1
|
JSON Linux 数据格式
原来是Gson导致,本地和linux服务器不同的环境导致Date转换出现问题:Invalid time zone indicator ‘ ‘
看到报错日志,第一反应就是,date数据的问题,同时又能发现全是和gson相关 结合报错行数的代码,盲猜就是gson对时间处理的问题了 于是寻找解决方法
928 0
|
Android开发
获取APP版本号:versionName、versionCode---Android基础篇
获取APP版本号:versionName、versionCode---Android基础篇
2543 0
|
缓存 前端开发 JavaScript
如何优化前端性能:7个实用技巧
在当今互联网高速发展的时代,前端性能优化成为了每个开发者必须面对的挑战之一。本文将介绍7个实用的技巧,帮助前端开发者提升网站性能,提升用户体验。
|
5月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
562 80
|
8月前
|
Java 数据安全/隐私保护 微服务
微服务——SpringBoot使用归纳——Spring Boot中使用监听器——Spring Boot中自定义事件监听
本文介绍了在Spring Boot中实现自定义事件监听的完整流程。首先通过继承`ApplicationEvent`创建自定义事件,例如包含用户数据的`MyEvent`。接着,实现`ApplicationListener`接口构建监听器,用于捕获并处理事件。最后,在服务层通过`ApplicationContext`发布事件,触发监听器执行相应逻辑。文章结合微服务场景,展示了如何在微服务A处理完逻辑后通知微服务B,具有很强的实战意义。
490 0
|
7月前
|
人工智能 机器人 Linux
把大模型变成微信私人助手,三步搞定!
随着大模型的应用越来越广泛,相信大家都对拥有一个自己的私人AI助手越来越感兴趣。然而基于大模型遵循的"规模效应"(Scaling Law)原理,传统部署方式面临三重阻碍:高昂的运维成本、复杂的技术门槛(需掌握模型部署、量化等技术概念)以及系统集成难题。
660 0
|
数据可视化 JavaScript 数据挖掘
2024年最值得关注的5款数据可视化工具
在信息爆炸的时代,数据可视化工具帮助我们从海量数据中提取有价值的信息,并以直观、易于理解的方式展现。本文介绍五款主流工具:板栗看板、Power BI、Datawrapper、QlikView 和 Highcharts,从产品特色、使用场景等角度分析,帮助用户根据自身需求选择合适的工具。
1575 0
2024年最值得关注的5款数据可视化工具