图片轮播事件,最后一个和第一个总是跳过,无法播放-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

图片轮播事件,最后一个和第一个总是跳过,无法播放

2016-06-03 19:44:05 1913 1
        <div class="img_show" id="img_show">
            <a href="#"title="链接1" class="box image show"><img src="./images/img1.jpg" alt=""></a>
            <a href="#"title="链接2" class="box image no"><img src="./images/img1.jpg" alt=""></a>
            <a href="#"title="链接3" class="box image no"><img src="./images/img1.jpg" alt=""></a>
            <a href="#"title="链接4" class="box image no"><img src="./images/img1.jpg" alt=""></a>
            <a href="#"title="链接5" class="box image no"><img src="./images/img1.jpg" alt=""></a>
            <a href="#"title="链接6" class="box image no"><img src="./images/img1.jpg" alt=""></a>
            <span class="left">&#xe948</span><span class="right">&#xe946</span>
        </div>
//   ********以上为HTML代码

//***********以下为JS 代码。
function userCheck(){
    var aList=getClassName("image");
    if(this.className=="left"){
        leftLoop(aList);
    }else if(this.className="right"){
        rightLoop(aList);
    }
}

//  左播放
function leftLoop(list){
    for(var i=0;i<list.length;i++){
        (function(){
            if(list[i].className.indexOf("show")!=-1){
                list[i].className=list[i].className.replace(/show/ig,"no");
                if(i!=0){
                    list[i-1].className=list[i-1].className.replace(/no/ig,"show");
                }else{
                    list[list.length-1].className=list[list.length-1].className.replace(/no/ig,"show");
                }
            }
        })(list,i);
    }
}

// 右播放
function rightLoop(list){
    for(var i=list.length-1;i>=0;i--){
        (function(){
            if(list[i].className.indexOf("show")!=-1){
                list[i].className=list[i].className.replace(/show/ig,"no");
                if(i!=list.length-1){
                    list[i+1].className=list[i+1].className.replace(/no/ig,"show");
                }else{
                    list[0].className=list[0].className.replace(/no/ig,"show");
                }
            }
        })(list,i);
    }
}

在进行鼠标点击时,点击左方向键时,直接从第一个跳到倒数第二个。
如图:
screenshot

取消 提交回答
全部回答(1)
  • 杨冬芳
    2019-07-17 19:27:11

    以右播放为例,是你下面的循环写错了

    // 右播放
    function rightLoop(list){
        for(var i=list.length-1;i>=0;i--){
            (function(){
                if(list[i].className.indexOf("show")!=-1){
                    list[i].className=list[i].className.replace(/show/ig,"no");
                    if(i!=list.length-1){
                        list[i+1].className=list[i+1].className.replace(/no/ig,"show");
                    }else{
                        list[0].className=list[0].className.replace(/no/ig,"show");
                    }
                }
            })(list,i);
        }
    }

    原因:有6张图,现在已经显示到第6张了,此时点击,首次i=5,其class为show,进行你的样式替换逻辑是对的,将i=5的图样式改为no,i=0的图样式改为show,但你的循环操作并没有停止,在继续执行,i=4时,其class不是show,没有问题,i=3/2/1也是,但当循环到i=0时,就有问题,因为第一次循环时你已经将i=0改为show了,就又进行了一替换,将i=0改为no,同时i+1改为show,所以就跳过了第一张
    left同理
    修改:当符合条件了就break,不要再循环就好了,并且你这里用闭包是没有意义的,其没有暂存变量

    function rightLoop(list){
        for(var i=list.length-1;i>=0;i--){
            if(list[i].className.indexOf("show")!=-1){
                list[i].className=list[i].className.replace(/show/ig,"no");
                if(i!=list.length-1){
                    list[i+1].className=list[i+1].className.replace(/no/ig,"show");
                }else{
                    list[0].className=list[0].className.replace(/no/ig,"show");
                }
                break; //增加break,并去掉闭包
            }
        }
    }
    0 0
相关问答

12

回答

在阿里云上安装和运行Node.js全功略

ycwong 2013-09-18 15:17:30 66072浏览量 回答数 12

19

回答

【分享】如何提高网站的打开速度?

enj0y 2012-11-17 14:35:22 57690浏览量 回答数 19

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 159351浏览量 回答数 145

28

回答

钉钉开放平台“常见问题常见问题常见问题“重要请关注

竹梅 2015-12-03 00:39:14 95888浏览量 回答数 28

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 148487浏览量 回答数 22

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 147453浏览量 回答数 31

23

回答

【云服务器分享】网站访问速度快才是硬道理

dreamdoo 2012-10-15 10:15:02 86348浏览量 回答数 23

13

回答

【云服务器分享】如何节省网站流量

dreamdoo 2012-10-15 10:36:09 81419浏览量 回答数 13

15

回答

对象存储oss【问答合集】

我是管理员 2018-08-03 14:54:02 69036浏览量 回答数 15

3

回答

Nginx—owncloud安装记事

寒喵 2014-06-07 23:24:41 49564浏览量 回答数 3
+关注
杨冬芳
IT从业
1
文章
9167
问答
问答排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载