回答此问题可获得+50声望bounty。赏金宽限期已经结束。Kunal Vijan正在寻找来自可靠来源的**答案 *:
如果你能分享解决方案的要求,这将是有帮助的。
我想创建一个页面滚动CSS动画。箭头将移动到页面滚动条上的蛇形路径,如果可能的话,还可以在每个新部分上更改图标。
我举几个例子:
codepen.io/yesvin/pen/XymwvX
codepen.io/gkando/pen/LYEvjOv
但无法根据设计创建路径,并在每个部分更改图标 *1-2箭头,2-3圆圈,3-4另一个图标等 *
我也附上路径以供参考。
我的代码到目前为止:
window.addEventListener('scroll', function() {
let l = Path_440.getTotalLength();
let dasharray = l;
let dashoffset = l;
e = document.documentElement;
theFill.setAttributeNS(null, "stroke-dasharray", l);
theFill.setAttributeNS(null, "stroke-dashoffset", l);
dashoffset = l - window.scrollY * l / (e.scrollHeight - e.clientHeight);
//console.log('window.scrollY', window.scrollY, 'scrollTop', e.scrollTop, 'scrollHeight', e.scrollHeight, 'clientHeight', e.clientHeight, 'dash-offset', dashoffset);
theFill.setAttributeNS(null, "stroke-dashoffset", dashoffset);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<svg width="246" height="2990" viewBox="0 0 246 2990" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<path id="Path_440" d="M210.001 1.5C210.001 1.5 41.0015 324.5 6.50082 617.5C-27.004 902.042 182.501 1032.5 240.001 1313C275.095 1484.2 29.8527 1661 41.0008 1914.5C50.4751 2129.94 230.431 2237.5 235.001 2431.5C240.42 2661.59 41.0008 2988 41.0008 2988" stroke="#F39029" stroke-width="4" stroke-dasharray="20 10"/>
</defs>
<use xlink:href="#Path_440" stroke="#000" stroke-width="4" stroke-dasharray="1"/>
<use id="theFill" xlink:href="#Path_440" stroke="#000" stroke-width="1"/>
</svg>
2条答案
按热度按时间disbfnqx1#
因为你有一种计算
scrollPercent
的方法,也就是window.scrollY / (docElt.scrollHeight - docElt.clientHeight)
,你可以用它来 * 粗略地 * 计算到目前为止沿着路径的距离scrollPercent * Path_440.getTotalLength()
。然后使用该距离,使用getPointAtLength(distance)
在路径上获得DOMPoint
,可用于更新箭头图标的位置和旋转,如下所示。您还可以在事件处理程序中添加逻辑以基于scrollPercent
更新图标。***在不久的将来(希望如此)...***我们将在浏览器中获得Scroll-driven Animations,这将使单独使用CSS沿着路径动画元素变得更加简单。例如,如果你在Chrome Canary 115+上启用了
experimental-web-platform-features
标志,下面的CSS即使不能更好,也能工作得很好。不需要JS:您可以了解有关如何在this article中使用滚动驱动动画的更多信息。
2admgd592#
这不是完全的CSS动画,但产生类似的效果。如果你对这样的东西持开放态度,这可以进一步完善。
我只是使用HTML画布来绘制一条正弦曲线。现在,你必须知道一些高中水平的三角学...
而
canvas.js
有看起来是这样的