【问题标题】:SVG animation / dirty pathSVG动画/脏路径
【发布时间】:2017-02-16 16:57:43
【问题描述】:

谁能解释我如何删除我的路径中的一个点以及它为什么来自?

 window.onload =function(){
  
        var myHeart = $("#Heart");
        var current = 0;
  
        var PathTail_MainPath = $("#PathTail_MainPath");
        var tailMainPath = $("#tailMainPath");
  
        myHeart.click(function () {
  
            if (current++ % 2 == 0) {
             
            PathTail_MainPath.toggleClass("tailMainPath tailMainPathReturn");
            tailMainPath.toggleClass("tailMainPath tailMainPathReturn");
  
            console.log("one");
        } else {
  
            PathTail_MainPath.toggleClass("tailMainPath tailMainPathReturn");
            tailMainPath.toggleClass("tailMainPath tailMainPathReturn");
 
            console.log("two");
        }
    });
};
   #Heart {
    width: 600px;
    border: 1px solid #000;
    cursor: pointer;
}
  
#Heart .tailMainPath {
  -webkit-animation: tailStroke 500ms linear;
          animation: tailStroke 500ms linear;
  -webkit-animation-fill-mode: forwards;
          animation-fill-mode: forwards;
}
 
#Heart .tailMainPathReturn {
  -webkit-animation: tailStrokeReturn 500ms linear 125ms;
          animation: tailStrokeReturn 500ms linear 125ms;
  -webkit-animation-fill-mode: forwards;
          animation-fill-mode: forwards;
}
 
@-webkit-keyframes tailStroke {
  0% {
    stroke-dasharray: 0 150;
    stroke-dashoffset: 0;
  }
  100% {
    stroke-dasharray: 150 0;
    stroke-dashoffset: 150;
  }
}
 
@keyframes tailStroke {
  0% {
    stroke-dasharray: 0 150;
    stroke-dashoffset: 0;
  }
  100% {
    stroke-dasharray: 150 0;
    stroke-dashoffset: 150;
  }
}
 
@-webkit-keyframes tailStrokeReturn {
  0% {
    stroke-dasharray: 150 0;
    stroke-dashoffset: 150;
  }
  100% {
    stroke-dasharray: 0 150;
    stroke-dashoffset: 0;
  }
}
 
@keyframes tailStrokeReturn {
  0% {
    stroke-dasharray: 150 0;
    stroke-dashoffset: 150;
  }
  100% {
    stroke-dasharray: 0 150;
    stroke-dashoffset: 0;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<svg version="1.1" id="Heart" class="moving" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
    viewBox="0 0 450 320" style="enable-background:new 0 0 450 320;" xml:space="preserve">
  
    <defs>
        <path id="PathTail_MainPath" class="tailMainPathReturn"  d="M296.2,253.9l9.1-3.8l8,0.2c2.5,0.5,8.3,1.6,10.9,6.5c3.9,7.5,0.6,18.3-4.3,24.9
        c-0.8,1.1-7.5,10.2-19.4,9.5c-9-0.5-13.8-4.1-18.6-8.1c-5.2-4.3-7.6-9.6-12.4-16.9c-3.7-5.7-6.9-13.5-16-22.4"/>
  
        <path id="tailMainPath" class="tailMainPathReturn" d="M296.2,253.9l9.1-3.8l8,0.2c2.5,0.5,8.3,1.6,10.9,6.5c3.9,7.5,0.6,18.3-4.3,24.9
        c-0.8,1.1-7.5,10.2-19.4,9.5c-9-0.5-13.8-4.1-18.6-8.1c-5.2-4.3-7.6-9.6-12.4-16.9c-3.7-5.7-6.9-13.5-16-22.4"/>
          
    </defs>
    <use xlink:href="#PathTail_MainPath" fill="none";   stroke="#000" stroke-width="11"/>
    <use xlink:href="#tailMainPath" fill="none";  stroke="#A50808"  stroke-linecap="round"  stroke-width="9"/>
</svg>
PS此代码不适用于代码生成器stackoverflow。(我不知道为什么)这就是为什么我在这里复制https://jsfiddle.net/BlackStar1991/ea6255h1/

【问题讨论】:

    标签: animation svg svg-animate


    【解决方案1】:

    脏点是由带有圆形线帽的“0 长度”子路径引起的。当 stroke-dashoffset 的值为 0 时,路径被 [0, 150] 分割。所以它有“0 长度”的子路径。

    为了解决这个问题,可以将虚线的起点偏移一点。

    @keyframes tailStroke {
      0% {
        stroke-dasharray: 0 151;
        stroke-dashoffset: 1;
      }
      100% {
        stroke-dasharray: 151 0;
        stroke-dashoffset: 151;
      }
    }
    @keyframes tailStrokeReturn {
      0% {
        stroke-dasharray: 151 0;
        stroke-dashoffset: 151;
      }
      100% {
        stroke-dasharray: 0 151;
        stroke-dashoffset: 1;
      }
    }
    

    【讨论】:

    猜你喜欢
    • 2016-02-14
    • 2016-01-06
    • 2022-01-03
    • 1970-01-01
    • 2021-12-19
    • 2021-04-18
    • 2020-03-14
    • 2015-04-10
    • 2017-03-30
    相关资源
    最近更新 更多