原生js实现简易轮播图

这一次写了一个简易的轮播图,运用的逻辑是先写好样式,通过修改class的值来实现样式

实现的效果是每两秒图片进行轮播,点击按钮可以切换到下一张,继续每两秒进行轮播。

边代码边解释
1、HTML部分
设置三张图片,不给classname和id,设置三个input来表示图片下面的小圆点,也不给classname和id

<body>
<img   src="https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2779570103,872955341&fm=26&gp=0.jpg" alt="">
<img  src="https://dss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2254997567,3945700522&fm=26&gp=0.jpg" alt="">
<img  src="https://dss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2042820083,2341220856&fm=26&gp=0.jpg" alt="">
<input  type="radio" name="1">
<input  type="radio" name="1">
<input  type="radio" name="1">
<button id="aa">下一张</button>
</body>

2、CSS部分
先用css把图片隐藏,a、b、c是还没有应用上的样式,我们在js部分对上面没有给classname的图片和CheckBox设置classname

     img{
        display: none;
        }
        .a{
            display: block;
        }
        .b{
            display: block;
        }
        .c{
            display: block;
        }
        img {
            width: 300px;
            height: 200px;
        }

3、JS部分
1、在这里我们先获取到所有的图片和CheckBox以及下一张的按钮
2、我们包装一个方法,在事件里面设置一个信号量ww,每点击一次自增一次,当增加到3的时候,自动返回1
3、然后我们遍历CheckBox,当CheckBox的下标和信号量一致的时候,就设置CheckBox的状态为选中效果
4、接着遍历一遍图片,判断一下,如果当前CheckBox的下标被选中,并且CheckBox的下标和图片的下标一致时,给图片设置classname分别为a、b、c,刚好和我们前面设置的样式对应。样式就是设置图片显示。
5、接着我们可以设置一个计时器,每隔2秒调用一次方法
在给按键绑定一个按键事件,每点击一次调用一次方法。
注:要记得在点击按钮后清除清除清定时器,然后在运行定时器。

 var ww =0;
   var a = document.getElementsByTagName("img");
   var q = document.getElementsByTagName("input");
   var aa = document.getElementById("aa");
    var SetInterval;//声明一个变量设置计时器
    q[0].checked = true;//设置刚刚打开页面时第一个CheckBox被选中
    a[0].className = "a";//设置第一个图片显示
    function changee(){
        ww++;
        if (ww>=3){
            ww = 0
        }
        for (var i = 0; i <q.length ; i++) {//遍历CheckBox
            if (i == ww){
                q[i].checked = true;
            }
            for (let j = 0; j <a.length ; j++) {//遍历图片
                if (q[i].checked){//判断CheckBox是否处于被选中状态
                    if (i==j){//判断当CheckBox下标和图片下标一致时设置classname
                        if (i ==0){
                            a[j].className = "a";
                        }
                        if (i == 1){
                            a[j].className = "b";
                        }
                        if (i == 2){
                            a[j].className = "c"
                        }
                    }else {
                        a[j].className = "";//当都不符合时在设置名字为空
                    }

                }
               
            }
        }
    clearInterval(SetInterval);//清除定时器
        SetInterval =  setInterval(changee,2000);//设置定时器

    }
     aa.addEventListener("click",changee,false);//绑定按键事件
     SetInterval =  setInterval(changee,2000);//设置定时器
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值