如何一次(按时间顺序)滚动绘制每个 SVG 路径? [英] How to scroll draw each SVG path one at a time (chronologically)?
问题描述
这与此处有关.但是,我认为这是一项艰巨的任务.所以我把它分解成更小的块.
我制作了一个简单的 SVG 图像,其中包含一个路径"和一个矩形"元素.用户可以通过上下滚动页面(向下滚动页面打开和向上滚动页面关闭/取消绘制")在窗口内外绘制线条.但是,两个元素同时绘制"/动画.我想要做的是当用户向下滚动页面时,线条路径绘制,然后rect"元素绘制(之后),因此它更加流畅和按时间顺序.
<头><meta charset="UTF-8"><title>单行</title><link rel="stylesheet" type="text/css" href="line.css"><风格>SVG {位置:固定;保证金:自动;顶部:0;左:0;右:0;底部:0;宽度:50%;}/*.线{中风-dashoffset:850;中风-dasharray:850;}.盒子 {中风-dashoffset:1852;中风-dasharray:1852;}*/.全部{中风-dashoffset:2702;中风-dasharray:2702;}.直线{高度:3000px;位置:相对;宽度:360px;边距:40vh 自动 0 自动;}</风格>头部><身体><主要角色=文章"标题=行"><div class="straightLine"><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 1280 800" style="enable-background:new 0 0 1280 800;"xml:space="保留"><style type="text/css">.st0{fill:none;stroke:#000000;stroke-width:8;stroke-miterlimit:10;}</风格><g class="all"><path class="st0" d="M54,178h509.6c49.9,0,90.4,40.5,90.4,90.4V428"/><rect x="498" y="428" class="st0" width="308" height="162"/></g></svg>
</main><script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script><script src="line.js"></script><脚本>$(document).ready(function() {//'stroke-dashoffset'单元的变量var $dashOffset = $(".all").css("stroke-dashoffset");//在滚动事件上 - 执行函数$(窗口).滚动(功能(){//计算用户离页面多远var $percentageComplete = (($(window).scrollTop()/($("html").height() - $(window).height())) * 100);//将dashoffset像素值转换为整数var $newUnit = parseInt($dashOffset, 10);//获取要从'stroke-dashoffset'中减去的值var $offsetUnit = $percentageComplete * ($newUnit/100);//设置dashoffset的新值来创建绘图效果$(".all").css("stroke-dashoffset", $newUnit - $offsetUnit);});});