SVG+CSS动画实现动效(流光、呼吸等效果)

这篇具有很好参考价值的文章主要介绍了SVG+CSS动画实现动效(流光、呼吸等效果)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

流光效果


  • 绘制流光线条
    创建SVG,根据UI给的背景图,定位到图上每条管道(即流光线条的路径)的起始点以及拐点,绘制折线。绘制折线的时候按照下图方框通过class分组,这几组的光线流动是同时出发的。
    svg相关知识点:https://www.w3school.com.cn/svg/index.asp
<svg width="100%" height="100%" class="added-wrap_svg" :class="{toPause: pause}">
    // 线条光晕
    <filter id="filter1" x="-120%" y="-120%" width="400%" height="400%">
      <feOffset result="offOut" in="SourceGraphic" dx="0" dy="0"></feOffset>
      <feGaussianBlur result="blurOut" in="offOut" stdDeviation="6"></feGaussianBlur>
      <feBlend in="SourceGraphic" in2="blurOut" mode="multiply"></feBlend>
    </filter>

    // 绘制折线
    <polyline class="cleanToMarket" points="1233,976 1239,983 1267,983"/>
    <polyline class="cleanToMarket" points="1233,992 1239,999 1274,999"/>
    <polyline class="cleanToMarket" points="1226,1010 1284,1010"/>
    <polyline class="cleanToMarket" points="1233,1028 1239,1022 1274,1022"/>
    <polyline class="cleanToMarket" points="1232,1045 1239,1039 1267,1039"/>
</svg>

折线样式

polyline{
  stroke: #E5DA40;
  fill: transparent;
  stroke-width: 2;
  stroke-linecap: round;
  animation: act 3s linear infinite;
}
  • 让光线动起来
    上边画出来的是一整条长的实线,接下来我们会用到SVG的两个属性:stoke-dasharray和stroke-dashoffset。

stoke-dasharray:用于创建虚线。
stroke-dasharray = ‘10’
stroke-dasharray = ‘10, 5’
stroke-dasharray = ‘20, 10, 5’
svg流光效果,css,前端,动画
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,之后开始如此循环

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

感兴趣的可以参考https://www.cnblogs.com/daisygogogo/p/11044353.html

这里相当于一条管道上,只有一段虚线,然后让这条虚线从左至右移动起来。
首先获取到所有的折线

var char = 'http://www.w3.org/2000/svg'
var polylines = document.getElementsByTagNameNS(char, 'polyline')

每条折线,获取到折线的长度,设置虚线,如第一组,设置虚线长80,间距为该条折线的长度,将偏移量设置为80px,虚线就会往左移动80px,这样初始时相当于虚线隐藏了。

然后,设置虚线移动动画,即设置偏移量为折线的长度。

这样,流光效果就出来了。文章来源地址https://www.toymoban.com/news/detail-812172.html

polylines.forEach((i, index) => {
      // 获取折线长度
      const len = i.getTotalLength()
      // 设置滤镜
      i.style.filter = 'url(#filter1)'
      // 设置虚线和间隔
      i.style.strokeDasharray = '80,' + len
      // 设置偏移量
      i.style.strokeDashoffset = 80
      // 设置动画名称
      i.style.animationName = 'act' + index

      var style = document.styleSheets[0]
      // 插入动画规则
      style.insertRule('@Keyframes act' + index + '{100% {stroke-dashoffset: ' + (-(len)) + '}}', 1)

      if (i.classList[0] === 'cleanToMarket') {
        i.style.strokeDasharray = '20,' + len
        i.style.strokeDashoffset = 20
        i.style.strokeWidth = 1
        // 动画延迟
        i.style.animationDelay = '3s'
      }
      if (i.classList[0] === 'marketToEmpowerment') {
        i.style.strokeDasharray = '30,' + len
        i.style.strokeDashoffset = 30
        i.style.strokeWidth = 1
        i.style.animationDelay = '6s'
      }
      if (i.classList[0] === 'operatioCcenter') {
        i.style.animationDelay = '9s'
      }
      if (i.classList[0] === 'empowermentToLib') {
        i.style.strokeDasharray = '60,' + len
        i.style.strokeDashoffset = 60
        i.style.strokeWidth = 1
        i.style.animationDelay = '9s'
      }
      if (i.classList[0] === 'libToEmpowerment') {
        i.style.strokeDasharray = '60,' + len
        i.style.strokeDashoffset = 60
        i.style.strokeWidth = 1
        i.style.animationDelay = '12s'
      }
      if (i.classList[0] === 'libToService') {
        i.style.animationDelay = '12s'
      }
      if (i.classList[0] === 'serviceToApply') {
        i.style.animationDelay = '15s'
      }
 })

上下浮动


@keyframes float{
  0%{transform:translateY(0)}
  50%{transform:translateY(6px)}
  100%{transform:translateY(0)}
}

忽闪


@keyframes dataMarket {  0% {    opacity: 1;  }  50% {    opacity: 0;  }  100% {    opacity: 1;  }}

发光


@keyframes showBlur{
  0% {
    filter: blur(0px);
  }
  50% {
    filter: blur(50px);
  }
  100% {
    filter: blur(0px);
  }
}

动画暂停


animation-play-state: paused

到了这里,关于SVG+CSS动画实现动效(流光、呼吸等效果)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 开发指导—利用CSS动画实现HarmonyOS动效(一)

    注:本文内容分享转载自 HarmonyOS Developer 官网文档 CSS 是描述 HML 页面结构的样式语言。所有组件均存在系统默认样式,也可在页面 CSS 样式文件中对组件、页面自定义不同的样式。请参考通用样式了解兼容 JS 的类 Web 开发范式支持的组件样式。 ● 逻辑像素 px(文档中以le

    2024年02月10日
    浏览(32)
  • 纯CSS实现边框流光效果(跑马灯效果)

    首先上一个效果图 有木有发现和夜晚街上的广告牌很像,接下来让我们看看如何使用css实现的吧 首先很明显应该使用一个盒子将文字装起来,并且将文字进行了居中,然后我们看到这盒子的周围围绕了两条光带,那么这两条光带是怎么实现的呢? 其实这是用四个小盒子实现

    2024年02月07日
    浏览(51)
  • 【CSS】SVG图片属性及修改颜色

    最近的开发中遇到了SVG不能修改颜色的问题,以前是直接用,没有研究过,现在搞个笔记记录下 width:设置最终SVG图片的宽度 height:设置最终SVG图片的高度 viewbox:视区,在svg上截取一块,然后放大到整个svg图片上,也就是上述所有最终的宽高 fill:设置颜色 举例: 在上述的SV

    2024年04月17日
    浏览(46)
  • css特效:流光背景+动态边框+滑动效果+聚集效果+小耳朵+阴影流光效果

    目录 总览 类选择器 自定义变量 效果 三种基本样式 确定 取消  删除 流光效果 背景流光 边框流光 ​编辑动态边框 双元素旋转  单元素旋转 单元素移动 边框线  顶部边框线 底部边框线 双边框线  滑动 反光滑动  箭头滑动  中央扩展  文字覆盖 横向文字覆盖  纵向文字覆

    2024年02月03日
    浏览(49)
  • 基于css实现动画效果

            本文将会基于css,实现各种动画效果,接下来会从简单几个例子入手。 效果 效果展示

    2024年01月23日
    浏览(57)
  • 呼吸灯效果css

    2024年02月15日
    浏览(35)
  • CSS3实现动画加载效果

    2024年02月07日
    浏览(61)
  • 【HTML】SVG实现炫酷的描边动画

    今天闲来无事,看到 Antfu 大佬的个性签名,觉得还是非常炫酷的,于是也想要搞一个自己的个性签名用来装饰自己的门面,不过由于手写的签名太丑了,遂放弃。于是尝试理解原理,深入研究此等密法,终于小有所成,发现原来是描边动画,于是记载如下,方便以后借鉴。

    2024年02月20日
    浏览(50)
  • css有哪些动画效果怎么实现的

     css常见的动画效果:平移,缩放,旋转 css实现动画主要有三种方式: transition实现渐变动画 transform实现缩放平移效果动画 animation实现自定义动画   transition实现渐变动画 transform实现缩放平移效果动画  animation实现自定义动画  属性 描述 属性值 animation-name 动画名称 animat

    2024年02月09日
    浏览(49)
  • 【CSS】简记CSS效果:通过transition(动画过渡属性)实现侧边栏目滑入滑出

    在资金明细的页面中,点击按钮时筛选区域从左侧滑出,完成筛选点击确认后调用接口完成数据查询,筛选区域滑入左侧; https://www.cnblogs.com/yadiblogs/p/10145625.html  

    2024年02月10日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包