【发布时间】:2016-01-04 02:42:37
【问题描述】:
这与之前的帖子here 有关。但是,我认为这是一项艰巨的任务。所以我把它分解成更小的块。
我制作了一个简单的 SVG 图像,其中包含一个“路径”和一个“矩形”元素。用户可以通过向上和向下滚动页面(向下滚动页面以打开页面,向上滚动页面以关闭/“取消绘制”)来在窗口上和窗口外绘制线条。但是,两个元素同时“绘制”/动画。我想要做的是当用户向下滚动页面时,线条路径绘制,然后“rect”元素绘制(之后),所以它更加流畅和按时间顺序排列。
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>the single line</title>
<link rel="stylesheet" type="text/css" href="line.css">
<style>
svg {
position: fixed;
margin: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 50%;
}
/*.line{
stroke-dashoffset:850;
stroke-dasharray: 850;
}
.box {
stroke-dashoffset:1852;
stroke-dasharray: 1852;
}*/
.all{
stroke-dashoffset:2702;
stroke-dasharray: 2702;
}
.straightLine {
height: 3000px;
position: relative;
width: 360px;
margin: 40vh auto 0 auto;
}
</style>
</head>
<body>
<main role="article" title="line">
<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="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;stroke-width:8;stroke-miterlimit:10;}
</style>
<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>
</div>
</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>
<script>
$(document).ready(function() {
//variable for the 'stroke-dashoffset' unit
var $dashOffset = $(".all").css("stroke-dashoffset");
//on a scroll event - execute function
$(window).scroll(function() {
//calculate how far down the page the user is
var $percentageComplete = (($(window).scrollTop() / ($("html").height() - $(window).height())) * 100);
//convert dashoffset pixel value to interger
var $newUnit = parseInt($dashOffset, 10);
//get the value to be subtracted from the 'stroke-dashoffset'
var $offsetUnit = $percentageComplete * ($newUnit / 100);
//set the new value of the dashoffset to create the drawing effect
$(".all").css("stroke-dashoffset", $newUnit - $offsetUnit);
});
});
</script>
</body>
</html>
【问题讨论】:
标签: javascript jquery css svg scroll