如何使用JS实现轮播图

当我们开始学习js后,终于要实现更加完善的轮播图了。但是这时我们难免会有些没有思路,所以我在此为大家提供一些轮播图的思路。
首先,我们想要做轮播图,需要了解一些所需要的相关方法。

window.setTimeout():

这个方法的意义是在设定时间过后执行目标函数。
这个方法有两个参数。第一个:传入一个function,用来设定执行的目标函数;第二个:传入一个数字(单位:毫秒)设定多久后执行目标函数。

取得元素节点对象的相关方法

document.getElementsByxxx()

通过元素类名/ID/标签名等获取.

document.querySelector() or document.querySelectorAll()

通过选择器选取(传入一个字符串,字符串里写选择器,注意一定要按选择器的形式来写),前者仅选择第一个元素,后者选取所有元素。

注意:无论是那种方法取得的是多个元素,其返回的都是一种“伪数组”。伪数组就是你可以像数组一样通过索引来取得元素,例如:document.getElementsByClassName("a")[0] 但是 不能使用数组的方法(因为不是数组,所以肯定不能用)。

轮播图原理

上面我们先了解了一些实现轮播图可能会用到的方法。现在我们来聊一下轮播图的原理。
实现轮播图,我们肯定要修改其css属性,如何修改就要看轮播图的实现方式。
我通过正常的轮播图来举例:通过修改内层盒子的margin-left值来使内层盒子相对外层盒子运动,从而实现轮播图效果。

相信对于轮播图效果的实现大家都能快速理解,且对于其他类型诸如渐入渐出轮播图等都是差不多的。就算实现自动切换,也不过是设置一个动画的事罢了。但是难点就在于把手动切换和自动切换结合在一起,这时就会有难点产生。
首先,如果使用动画来使轮播图自动切换,是无法再进行手动切换的。所以我们就需要通过js来实现其自动切换。自动切换可以用setInterval()来实现(这个函数与setTimeout基本一致,区别仅在于setTimeout只会在设定时间到后执行一次,而setInterval会在每过设定时间都会执行一次),设定一个change方法来切换下一张轮播图,让setInterval每过一段时间调用一次来切换即可。这样写基本就能结合手动切换和自动切换,但是有一个小问题,就是如果马上就要到执行setInterval的时间,但是我手动点击切换了一次,就会导致刚切换到我想看的那张轮播图,就会立刻切换到下一张。为了解决这个小问题,我们可以这样写(此方法作为所有切换的方法,只要是这个同一个轮播图的切换,都调用这同一个方法)

function change(i){
    /*当没有传入参数时调用此方法就会切换下一张*/
    if(i == undefined){
        index++;//index是一个去全局变量,表示当前显示的轮播图是第几张
    }else{
        index = i;
    }
    /*判断是否越界*/
    if(index < 1) index = max;//max表示最多轮播图的张数
    if(index > max) index = 1;
    //根据index修改css属性,此处以正常轮播图为例
    //此处需要注意
    //1.必须使用负值,为何是负值可以看着上面那个图自己思考一下
    //2.最后一定要加上"px",因为这个值直接修改了其css属性,所以必须按照css的写法来写
    //imgWidth就是每张轮播图图片的宽度
    inner.style.marginLeft = -index*imgWidth +"px";
    //这里是重点!
    clearTimeout(pre);
    pre = setTimeout(change,1000);
}

让我们来解析一下重点部分的代码:clearTimeout这个方法的意思是清除一个定时器(setTimeout生成的,如果执行过了,执行清除不会报错,但是没有意义)而其参数就是setTimeout返回的一个数字,这个数字就如同这个定时器的id。
每次切换图片时,我们都会调用一次此方法,如果是自动切换,就会在每次切换时,清除一次定时器,但是由于定时器正在执行,实际上此次清除是无意义的;之后再执行setTimeout再次设置定时器,从而形成一个循环。
如果定时器还未执行,此时点击就会将正在准备的定时器清除,并创建一个新的定时器。
注意:想要页面开始就触发自动播放,可以在js最后加一句change(1);也就是切换到第一张,同时开启了循环。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值