我有一个自动滚动条脚本,可以使图像向右滚动。我希望在达到目的后重复它。请帮忙!
<div class="scrolls">
<div>
<img src="img1" height="200"/>
<img src="img2" height="200"/>
<img src="img3" height="200"/>
</div>
</div>
<script>
$(document).ready(function() {
var sL = 4000;
$('.scrolls').animate({
scrollLeft : sL
},100000, 'linear');
$(".scrolls").on("click",function(){
$(this).stop(true,false);
});
$(".scrolls").on("mouseenter",function(){
$(this).stop(true,false);
});
$(".scrolls").on("mouseleave",function(){
$(this).animate({
scrollLeft : sL
},100000, 'linear');
});
})
</script>
答案 0 :(得分:0)
使用listitems(html标记)
获取无序列表<div class="scrolls">
<ul>
<li><img src="img1" height="200"/></li>
<li><img src="img2" height="200"/></li>
<li><img src="img3" height="200"/></li>
</ul>
</div>
复制此列表项,以便您可以将整个水平空间填充两次。现在将div向右滚动,每当图像离开div时,将其从开头移动到结尾。
// create as many copys as needed for filling the whole harizontal space twice
var dummyClones = $('.scrolls > ul > li').clone(true);
while($('.scrolls > ul').width() < 2*$('.scrolls').width())
$('.scrolls > ul').append(dummyClones.clone(true));
动画本身通过window.requestAnimationFrame
解决:
var animationSpeedInMiliseconds = 10000; // 10 seconds for 1000px
function step(timestamp) {
if(!step.startTimestamp) step.startTimestamp = timestamp;
if(!step.stopped) {
let delta = timestamp - step.startTimestamp;
let pixelCountToShift = (delta / animationSpeedInMiliseconds) * 1000;
if($('.scrolls').scrollLeft()+pixelCountToShift > $('.scrolls > ul > li:eq(0)').width()) {
$('.scrolls > ul').append($('.scrolls > ul > li:eq(0)'));
$('.scrolls').scrollLeft($('.scrolls').scrollLeft()+pixelCountToShift-$('.scrolls > ul > li:eq(0)').width());
} else {
$('.scrolls').scrollLeft($('.scrolls').scrollLeft()+pixelCountToShift);
}
}
step.startTimestamp = timestamp;
window.requestAnimationFrame(step);
}
注意:它并不完美。这是我在4分钟内创建的一个例子,它意味着被理解为概念验证。不是生产用的脚本。