自己写的jQuery无缝滚动,为何无法无缝滚动?

需求:左右切换自动无缝滚动如下图
图片描述
代码:
HTML:

<div class="flex-viewport clearfix">
    <div class="slide">
        <ul id="silde-show">
            <li>
                <img src="img/cooperation1.png">
                <span>新加坡香港综合肿瘤中心</span>
            </li>
            <li>
                <img src="img/cooperation2.png">
                <span>香港心汇心脏及脑血管病检查预防中心</span>
            </li>
            <li>
                <img src="img/cooperation3.png">
                <span>香港养和医院</span>
            </li>
            <li>
                <img src="img/cooperation4.png">
                <span>香港卓健医疗</span>
            </li>
            <li>
                <img src="img/cooperation1.png">
                <span>香港卓健医疗1</span>
            </li>
            <li>
                <img src="img/cooperation2.png">
                <span>香港卓健医疗2</span>
            </li>
        </ul>
    </div>
    <ul class="direction-nav">
        <li><a href="javascript:void(0)" class="prev sprite">Previous</a></li>
        <li><a href="javascript:void(0)" class="next sprite">Next</a></li>
    </ul>    
</div>

css:

.flex-viewport {
    overflow: hidden;
    margin-top: 10px;
}
.slide {
    position: relative;
    height: 163px;
    overflow: hidden;
    width: 1138px;
}
.slide ul {
    margin-left: -12px;
    position: absolute;
    width: 3000px;
}
.slide li {
    float: left;
    position: relative;
    margin-left: 12px;
}
.slide li img {
    width: 275px;
    height: 160px;
    max-width: 100%;
}
.slide li span {
    position: absolute;
    display: block;
    background: #25aa77;
    bottom: 0;
    left: 0;
    width: 275px;
    height: 32px;
    font-size: 16px;
    line-height: 30px;
    text-align: center;
    color: #fff;
}
.direction-nav li a{
    display: block;
  cursor: pointer;
    position: absolute;
    width: 50px;
    height: 80px;
    top: 50%;
    text-indent: -9999px;
    background-position: -500px 0px;
}
.direction-nav li .prev {
    left: 0;
}
.direction-nav li .next {
    right: 4px;
    background-position: -452px 0px;
}

用的是jq3.0.0
JQ:

    var silde = $("#silde-show"),    
        sildeLi = $("#silde-show li"),
        next  = $(".direction-nav .next"),
        prev  = $(".direction-nav .prev"),
        len   = $("#silde-show>li").length,
        liWidth= parseInt($("#silde-show>li").width()) + parseInt($("#silde-show>li").css("marginLeft")),
        index = 0,
        clone = $("#silde-show li").clone();
    function move(){
        if(index == -1){
            sildeLi.prepend(clone);
            silde.animate({left: -(len - 4) * liWidth},500,function(){
                sildeLi.remove(clone);
            });
            index = len - 4;
        }
        if(index > len - 4){
            sildeLi.append(clone);
            silde.animate({left: 0},500,function(){
                sildeLi.remove(clone);
            });
            index = 0;
        }
        silde.stop().animate({left: -index * liWidth }, 500);
    }         

    prev.on("click",function(){
        index--;
        move();
    });        
    next.on("click",function(){
        index++;
        move();
    });

问题:自己写的jQuery无缝滚动,为何无法无缝滚动?
思路:当鼠标点击在第一个时候(index = 0 )时候,增加复制的clone,然后把left定位最后一个后移除clone。当鼠标点击最后一个(len-4)时候,增加复制clone,然后把left定位第一个后移除clone

阅读 4.2k
2 个回答

没有去试你的代码。
可以提供一个之前写循环轮播的思路:
几个轮播页排一排,都float: left
点左按钮,最左的那个轮播页动画至margin-left: -(slideItemWidth),就形成向左轮播的效果;
动画结束后,将第一个元素直接 append 到最后,恢复margin-left
点右按钮,以上逆向过程即可

之前教學時寫的,後面因為要展示其它東西,註解有些跟不上
https://jsfiddle.net/cwen0708...

為了方便把第一個給蓋住了
.marquee ul{

margin-left:-100px;

}
可以在一開始把它滾回來
go_prev();

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题