添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

一、你需要准备什么?

对于svg,可能一些刚接触前端的同学比较的陌生。你可以先去MDN上看一下基本的介绍。本篇内容最重要的一个知识点就是stroke-dasharray和stroke-offset的组合使用。

这里你可以先看一下 张鑫旭对于stroke相关属性的介绍

二、加载等待动画

这个动画大家应该很熟悉:

这个难度不是很大,本质上就是一个小圆弧在圆环上旋转。

    svg(viewBox="0 0 50 50")
        circle(class="item" cx="25" cy="25" r="20" fill="none")
        circle(class="item" cx="25" cy="25" r="20" fill="none")
复制代码

对于圆环的设置我们采用stroke-dasharray来实现:

    .item:nth-child(2) {
        stroke: rgb(24,120,222);
        stroke-width: 2px;
        stroke-dasharray: 10, 300;
        stroke-linecap: round;
复制代码

接下来重点来了,我们需要通过transform让图形旋转。一谈到 transform不得不要注意transform-origin的设置。对于HTML中的元素,我们通过transform-origin的设置,很容易就解决了。但是SVG中的transform变化就没这么简单,这里有一篇很好文章作为参考 张鑫旭SVG transform坐标变换

这里我就采用比较朴实的方法,旋转SVG:

    svg {
        animation: zfbloading 1.4s linear infinite;
    @keyframes zfbloading {
            transform: rotate(0deg);
        100% {
            transform: rotate(360deg);
复制代码

三、加载失败动画

接下来我们实现这样的效果:

首先看一下它的结构:

    svg(viewBox="0 0 100 100")
        circle(cx="50" cy="50" r="40" fill="none")
        path(class="line1" d="M30 30 L70 70" fill="none")
        path(class="line2" d="M70 30 L30 70" fill="none")
复制代码

首先对于外圈的动画我们还是采用stroke-dasharray和stroke-dashoffset来实现。但是这里你要完完全全的理解这两个属性的用法(好好看看上文提供的张鑫旭的文章),他通过一个火腿肠的例子很好的讲解了这两者的用法。

从动画效果可以看出,小圆弧在旋转的过程中长度由短边长,由长变短,最后形成一个圆。

    @keyframes loading {
            stroke-dasharray: 0, 251;
            stroke-dashoffset: 0;
        35% {
            stroke-dasharray: 86, 86;
            stroke-dashoffset: -86;
        70% {
            stroke-dasharray: 0, 251;
            stroke-dashoffset: -251;
        100% {
            stroke-dasharray: 251, 0;
            stroke-dashoffset: -251;
复制代码

对于上述CSS代码中的251,你可以通过JS中的getTotalLength方法获取到。

对于叉号的动画效果,我们仍然采用的是stroke-dasharray和stroke-dashoffset实现。到这里你应该明白了这两个属性的重要性。再通过animation-delay设置动画的衔接。

显然SVG的魅力不止于此,下次再见。

喜欢本文的小伙伴们,欢迎关注我的订阅号 超爱敲代码 ,查看更多内容.

私信
6,306