重复水平自动滚动条

时间:2017-08-25 23:12:58

标签: javascript scroll

我有一个自动滚动条脚本,可以使图像向右滚动。我希望在达到目的后重复它。请帮忙!

<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>

1 个答案:

答案 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分钟内创建的一个例子,它意味着被理解为概念验证。不是生产用的脚本。

jsfiddle:https://jsfiddle.net/Kasalop/tktfr4rz/2/