微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SVG textPath动画在页面上滚动多次

如何解决SVG textPath动画在页面上滚动多次

我试图在 Shopify 主页上获得多个标题,以便在 svg textPath 上进行动画处理。我的代码加载了标题,它们每个都位于自己的 svg 曲线路径上。但是,滚动时只有一个标题是动画的。如何让每个标题在滚动时动画化?每个标题是否需要多个 window.addEventListener(‘scroll’,onScroll-n) 函数

<script>
 console.clear();

 var textPath = document.querySelector('#text-path');
 var textContainer = document.querySelector('#text-container');
 var path = document.querySelector( textPath.getAttribute('href') );
 var pathLength = path.getTotalLength();
 console.log(pathLength);

 function updateTextPathOffset(offset){
   textPath.setAttribute('startOffset',offset); 
 }

 updateTextPathOffset(pathLength);

 function onScroll(){
  requestAnimationFrame(function(){
    var rect = textContainer.getBoundingClientRect();
    var scrollPercent = rect.y / window.innerHeight;
    console.log(scrollPercent);
    updateTextPathOffset( scrollPercent * 2 * pathLength );
  });
 }

 window.addEventListener('scroll',onScroll);
</script>

<svg id="text-container" viewBox="0 0 1000 200" xmlns="http://www.w3.org/2000/svg">
  <path id="text-curve" d="M0 100s269.931 86.612 520 0c250.069-86.612 480 0 480 0" fill="none"/>
  <text y="40">
    <textPath id="text-path" href="#text-curve" startOffset="200">
      {{ section.settings.title }}
    </textPath>
  </text>
</svg>

解决方法

您可以使用 SVG SMIL 制作动画:

<svg width="450" height="180">
  <path id="P1" pathLength="200" d="M0 100s270 87 520 0c250-87 480 0 480 0" fill="none" stroke-width="2" stroke="red"/>
  <text>
    <textPath id="P2" href="#P1">
      TEXT
      <animate 
         attributeName="startOffset"
         attributeType="XML"
         values="0;80"
         keyTimes= "0;1"
         dur="2s"
         fill="freeze"
         repeatCount="1"/>
    </textPath>
  </text>
  <animateMotion>
    <mpath href="#P2" />
  </animateMotion>
</svg>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。