【发布时间】:2016-06-23 23:06:56
【问题描述】:
我的任务是添加一条虚线来链接页面上的一堆插图。我已经搜索了一段时间,遇到了一些没有破折号的法线绘制示例,例如我以前使用过的http://cbron.github.io/blog/2013/12/30/draw-svg-path-on-scroll-tutorial/。
据我所知,这种技术不适用于虚线,因为它使用笔划虚线数组来实际绘制线条的动画。也许我错了?
有人知道用虚线实现相同效果的方法吗?另一件需要注意的是,这条线会在不同的颜色背景上移动。
任何建议将不胜感激。
更新: 工作解决方案
var line;
var subPaths = [];
window.onload = function(){
line = Snap(document.getElementById("drawMe"));
getSubPaths();
}
window.addEventListener("scroll", drawLine);
function drawLine() {
var percentDrawn = (document.body.scrollTop + document.documentElement.scrollTop) / (document.documentElement.scrollHeight - document.documentElement.clientHeight);
var percentDrawn = Math.round(percentDrawn * 100);
line.attr({
d: subPaths[percentDrawn]
});
}
function getSubPaths(){
var maxLength = line.getTotalLength();
for(var i = 0; i<101; i++){
var currentLength = maxLength*i/100;
subPaths[i] = line.getSubpath(0, currentLength);
}
}
【问题讨论】:
-
您可以在要绘制的线条上放置一条虚线,并为其赋予背景颜色:jsfiddle.net/t9kqudxo 但是,由于您在不同颜色的背景之间移动,您可能希望将这条线分割成更小的块......真的取决于你的情况,你也可以将你的背景副本放在线条上并“剪切透明破折号”。这并不完美,但我希望能给你一些想法。
-
@yoshi 干杯!是的,我添加了关于不同背景的部分,因为我偶然发现了这种技术。我想知道 snap.svg 是否可以像演示 snapsvg.io/demos/#globe 那样通过动画 d 属性来处理它,但我认为它不适用于滚动交互。
-
有一种更简单的方法可以使用虚线掩码。 See this answer for a demonstration
标签: javascript svg