【发布时间】:2018-01-02 13:50:19
【问题描述】:
我目前正在一个网站上工作,其中舞台/英雄有一组带有循环背景图像(文本图像)的 div,并且我正在使用 jQuery 为它们的位置设置动画,以呈现“海洋”的外观在屏幕上移动的图像。
var position = 0;
setInterval(function () {
position -= 1;
$(".sub-image-1").css({ "background-position":+ position +"px 0px" })
}, 20 );
setInterval(function () {
position -= 1;
$(".sub-image-2").css({ "background-position":+ position +"px 0px" })
}, 140 );
setInterval(function () {
position -= 1;
$(".sub-image-3").css({ "background-position":+ position +"px 0px" })
}, 200 );
.stage-image {
width:100vh;
height:30vh;
}
.stage-sub-image {
position:absolute; top:0;
width:100%;
height:100%;
background-repeat:repeat-x;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="stage-image">
<div class="stage-sub-image sub-image-1" style="background:url(https://upload.wikimedia.org/wikipedia/commons/c/ca/Triple-Spiral-4turns_green_transparent.png)"></div>
<div class="stage-sub-image sub-image-2" style="background:url(https://upload.wikimedia.org/wikipedia/commons/b/be/Blender3D_Lisc_lipy-Transparent.png)"></div>
<div class="stage-sub-image sub-image-3" style="background:url(https://cdn0.iconfinder.com/data/icons/ball/256/transparent.png)"></div>
</div>
我很好奇这个解决方案是否有更好的方法来减少浏览器密集度。我觉得setInterval 在这种情况下给网站增加了不必要的开销。有没有更好的方法来处理这样的事情?除了性能问题之外,通过 JS 完成的动画非常不稳定,我希望效果更流畅。
这是我目前在上面的 CodePen:
https://codepen.io/stufu/pen/GvJdxq
更新
@FuriousD 在下面给出了一个很好的建议,使用 CSS 来实现这一点,虽然这更接近我所希望的,但 CSS 动画在到达背景位置的末尾时会导致跳跃。
这是一个基于他们的回答的 Codepen,但在动画完成后出现了“跳跃”的新问题:
【问题讨论】:
标签: javascript jquery html performance