【发布时间】:2023-01-27 02:48:13
【问题描述】:
我正在尝试创建一个页面(在 Wordpress 中),它本质上是一个时间轴。当用户滚动到下一部分时,我有一条垂直线“连接”到下一个内容部分。经过大量的反复试验,我能够创建一条在滚动时“绘制”自身的线,并在向上滚动时反转。我的问题是,当我尝试在同一页面中再次使用该代码时,它已经被绘制了——换句话说,我认为代码存在一个问题,不知道它不应该被触发。我对此知之甚少,不知道为什么它不起作用。理想情况下,我希望每一行都在查看视图框/浏览器窗口时开始绘制。
我已经尝试创建唯一 ID、唯一 div 和 ID 等。我最初认为这可能是需要唯一容器/ID 的问题。现在,我*认为这可能是因为我不知道如何告诉“线”在被拉入视野之前不可见。
这是我的笔:
// Get the id of the <path> element and the length of <path>
var triangle = document.getElementById("triangle");
var length = triangle.getTotalLength();
// The start position of the drawing
triangle.style.strokeDasharray = length;
// Hide the triangle by offsetting dash. Remove this line to show the triangle before scroll draw
triangle.style.strokeDashoffset = length;
// Find scroll percentage on scroll (using cross-browser properties), and offset dash same amount as percentage scrolled
window.addEventListener("scroll", myFunction);
function myFunction() {
var scrollpercent = (document.body.scrollTop + document.documentElement.scrollTop) / (document.documentElement.scrollHeight - document.documentElement.clientHeight);
var draw = length * scrollpercent;
// Reverse the drawing (when scrolling upwards)
triangle.style.strokeDashoffset = length - draw;
}
body {
height: 200vh;
}
#mySVG {
position: relative;
top: 15%;
left: 50%;
width: 50px;
height: 710px;
}
<svg id="mySVG" preserveAspectRatio="none" viewBox="0 0 4 100">
<path fill="none" stroke="#000000" stroke-width="1"
id="triangle" d="M 0 0 V 100 0"/>
</svg>
【问题讨论】:
标签: svg draw scrolltrigger