为了账号安全,请及时绑定邮箱和手机立即绑定

js图片轮播为什么这样不能循环?

js图片轮播为什么这样不能循环?

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> img{ width: 400px; height: 300px; box-shadow: 2px 3px 2px gray; } </style> </head> <body> <img src="img/1.jpg" id="myImg" /> <script type="text/javascript"> var myImg = document.getElementById("myImg"); var imgs=["1.jpg", "2.jpg", "3.jpg","4.jpg", "5.jpg","6.jpg", "7.jpg", "8.jpg"]; var intervalID = setInterval(chgImg,1000); function chgImg(){ for(var i=0;i<imgs.length;i++){ myImg.src="img/"+imgs[i]; } } </script> </body> </html>
查看完整描述

4 回答

已采纳
?
winner4265975

TA贡献19条经验 获得超17个赞

            var i=0;
            var len=imgs.length;
            function chgImg(){
                if(i>=len);i=0
                myImg.src="img/"+imgs[i];
                i++;
                }

加个判断就好!

如果不要全局变量的的话用闭包!

            function chgImg(){
                var i=0;
                var len=imgs.length;
                return (function(){
                      if(i>=len);i=0
                        myImg.src="img/"+imgs[i];
                        i++;
                    })
                }


查看完整回答
1 反对 回复 2017-05-28
?
慕运维2284031

TA贡献11条经验 获得超2个赞

题主的算法在一次定时器溢出时进行了一次数组的循环 导致的结果就是 再一次定时器溢出时 改变了数组长度次数的图片URL地址 每次都停留在最后一张图片上 正确的做法是取消for循环 每次定时器溢出时i加一后对数组长度取余(比如数组长度是4 当i等于四时 也就是第五张 取余等于0 是第一张) 需要注意 i要在定时器外定义(否则每次定时器溢出都会重新定义i)
查看完整回答
1 反对 回复 2017-05-29
?
错过了年华

TA贡献56条经验 获得超22个赞

我试了下代码,中间的图片全都不显示,直接第一张然后跳到最后一张,图片有4张,你可以吗?

另外不循环就是因为你的循环到底自然就不轮播了,加个判断,到最后一张时i=0,i++就又可以重新轮播了。思路应该是对的。就是没发现错误在哪,好久没碰过js了。。。

查看完整回答
1 反对 回复 2017-05-29
?
qq_薛定谔的猫_6

TA贡献6条经验 获得超0个赞

没有运行代码 初步看了下 应该有两个问题 一个是关于闭包的 还有就是少了判断 不能无限轮播  

查看完整回答
反对 回复 2017-05-31
  • 4 回答
  • 0 关注
  • 2490 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信