【问题标题】:Measure the length of an svg path?测量svg路径的长度?
【发布时间】:2017-06-24 20:21:54
【问题描述】:

我在玩Scrollmagic,想在这里使用效果:http://scrollmagic.io/examples/advanced/svg_drawing.html

我创建了一个 squiggle svg 来测试它,并且需要将路径的长度插入到 stroke-dasharray: 2000px;中风-dashoffset:2000px;

如何找到路径的长度?

	
function pathPrepare ($el) {
		var lineLength = $el[0].getTotalLength();
		$el.css("stroke-dasharray", lineLength);
		$el.css("stroke-dashoffset", lineLength);
	}

	var $word = $("path#word");
	var $dot = $("path#dot");

	// prepare SVG
	pathPrepare($word);

	// init controller
	var controller = new ScrollMagic.Controller();

	// build tween
	var tween = new TimelineMax()
		.add(TweenMax.to($word, 0.9, {strokeDashoffset: 0, ease:Linear.easeNone})) // draw word for 0.9
		.add(TweenMax.to("path", 1, {stroke: "#33629c", ease:Linear.easeNone}), 0);			// change color during the whole thing

	// build scene
	var scene = new ScrollMagic.Scene({triggerElement: "#trigger1", duration: 200, tweenChanges: true})
					.setTween(tween)
					.addIndicators() // add indicators (requires plugin)
					.addTo(controller);

</script>
		<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
		<script src="http://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/ScrollMagic.js"></script>
		<script src="http://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/plugins/debug.addIndicators.min.js"></script>
		<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.16.1/TweenMax.min.js"></script>
		<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.2/plugins/animation.gsap.js"></script>

<div style="height: 400px;"></div>
<div class="spacer s2"></div>


<div id="trigger1" class="spacer s0"></div>

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 viewBox="0 0 841.9 595.3" xml:space="preserve" width="1000px">
<style type="text/css">
	.st0{fill:none;stroke:#000000;stroke-width:12;stroke-miterlimit:10;}
</style>
<path id="word" style="stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 2000px; stroke-dashoffset: 2000px;" fill="none" class="st0" d="M29.7,6.4c-42,87.9,34.6,16.4,96.4,12.1s346,145.7,192.8,110.4S40.8,9.8,66.8,128s179.2,218.1,281.7,122.4
	s10.2-115.2,215-94c465.8,48.3,233.5,90.1,90.2,85.4c-247-8.1,299.2,110.9-259.5,138C46.5,396.6-33.3,439.2,145.8,491
	s171.8-83.6,431.3-18.1s96.4,107.8-79.1,122.4"/>
</svg>

<div style="height: 400px;"></div>
<div class="spacer s2"></div>

【问题讨论】:

    标签: javascript jquery svg scrollmagic


    【解决方案1】:

    你可以使用getTotalLength():

    SVGGeometryElement.getTotalLength() 方法返回用户代理计算的用户单位路径总长度值。

    这是您的 SVG 演示:

    var myPath = document.getElementById("word");
    var length = myPath.getTotalLength();
    console.log(length);
    <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
    	 viewBox="0 0 841.9 595.3" xml:space="preserve" width="1000px">
    <style type="text/css">
    	.st0{fill:none;stroke:#000000;stroke-width:12;stroke-miterlimit:10;}
    </style>
    <path id="word" style="stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 2000px; stroke-dashoffset: 2000px;" fill="none" class="st0" d="M29.7,6.4c-42,87.9,34.6,16.4,96.4,12.1s346,145.7,192.8,110.4S40.8,9.8,66.8,128s179.2,218.1,281.7,122.4
    	s10.2-115.2,215-94c465.8,48.3,233.5,90.1,90.2,85.4c-247-8.1,299.2,110.9-259.5,138C46.5,396.6-33.3,439.2,145.8,491
    	s171.8-83.6,431.3-18.1s96.4,107.8-79.1,122.4"/>
    </svg>

    【讨论】:

    • 不,不是。
    • 似乎deprecated 在路径元素上。该方法已移至SVGGeometryElement。 SVGGeometryElement 到底是什么?它与术语 路径元素 有何不同?
    • @vsync 我建议您将其作为问题发布,并带有svg 标签,以便 SVG 专家为您解答。
    • @vsync 我不确定具体的区别是什么,但请注意 SVG path 元素是两者的实例。 See this jsfiddle 。我认为部分原因是getTotalLength 自然适用于许多其他类型的 SVG 元素,包括圆形、矩形等。
    • 此解决方案似乎无法正常工作。我确实找到了这个,我希望它可以帮助其他人:codepen.io/gabriellewee/pen/EZPYmw
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2010-10-25
    • 2014-09-06
    • 1970-01-01
    • 2017-02-08
    • 2020-11-12
    • 1970-01-01
    相关资源
    最近更新 更多