js的轮播图

本文介绍了如何使用JavaScript实现轮播图功能,包括获取按钮和轮播图、设置按钮的鼠标事件、创建并绑定小圆点、点击小圆点切换图片、处理最后一张图片的跳转、自动播放轮播图、鼠标悬停时停止播放以及实现点击按钮的节流阀机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现自动轮播、左右按钮切换上下一张图片、点击小圆点切换图片
效果图:

1.前期html和css布局

<div class="main">
      <div class="focu">
        <!-- 左侧按钮 -->
        <a href="javascript:;" class="arrow-l">
             <
        </a>
        <!-- 右侧按钮 -->
        <a href="javascript:;" class="arrow-r">></a>
        //大轮播
        <ul>
          <li>
            <a href="#"><img src="../img/壁纸1.jpg" alt="" /></a>
          </li>
          <li>
            <a href="#"><img src="../img/壁纸2.jpg" alt="" /></a>
          </li>
          <li>
            <a href="#"><img src="../img/壁纸3.jpg" alt="" /></a>
          </li>
          <li>
            <a href="#"><img src="../img/壁纸四.jpg" alt="" /></a>
          </li>
        </ul>
        <!-- 小圆圈 -->
        <ol class="circle"></ol>
      </div>
    </div>

2.获取按钮和大轮播

 var arrow_l = document.querySelector(".arrow-l");
 var arrow_r = document.querySelector(".arrow-r");
 var focu = document.querySelector(".focu");

3.给按钮设置鼠标经过显示和离开隐藏事件

focu.addEventListener("mouseenter", function () {
    arrow_l.style.display = "block";
    arrow_r.style.display = "block";
  });
  focu.addEventListener("mouseleave", function () {
    arrow_l.style.display = "none";
    arrow_r.style.display = "none";
  });

4.获取ul和小圆圈

var ul = focu.querySelector('ul');
var ol = focu.querySelector('ol');

5.让小圆圈的数目根据图片的数目来l创建和插入小圆点,并且加入点击事件,当点击小圆点时候按钮背景颜色样式改变

for(var i = 0; i < ul.children.length; i++){
    /*创建小li  */
    var li = document.createElement('li');
    li.setAttribute('index',i)    /* 把i记录下来 索引号方便设置动画 */
    /*将li插入ol  */
    ol.appendChild(li);
     /* 点击小圆圈切换颜色 */
  li.addEventListener('click',function(){
    /* 排他思想 */
    for(var i = 0;i < ol.children.length;i++){
      ol.children[i].className='';
    }
    this.className ='current'
  }
  ol.children[0].className = 'current'

5.点击小圆圈时候能够改变轮播的图片,animation动画后放在附件

 /* 点击那个小li就拿到那个li的索引 */
    var index = this.getAttribute('index')
    /* 为了让点击左右箭头还是小圆点时候 圆都能同步 */
    num = index;
    circle=num
    //获取轮播的图片宽度
    var focuwidth =focu.offsetWidth;
    /* 点击小圆圈移动图片  移动距离就是索引号乘以一个图片宽度 */
    animate(ul, -index * focuwidth);
  })

6.由于轮播图播放到最后一张图片时,这时再轮播,需要直接跳转到第一张图片。那就需要把第一张图片复制一份,放入大轮播之中

 // 克隆第一张图片放到ul里面去 
    var first = ul.children[0].cloneNode(true);
    ul.appendChild(first)

7.按钮点击进行下一张轮播图
先给按钮绑定事件

arrow_r.addEventListener('click',function ()

每一次点击按钮,num次数加一,执行动画函数,让图片跳转下一张,不要忘记小圆点的记录也要记上,不然会导致点击小圆点出现bug

 num++;
 animate(ul,-num*focuwidth)
 circle++;

当轮播到租后一张图片时候,这时候小圆点已经到达最后,需要手动清除当前小圆点的样式,重新给第一个小圆点赋值

// 如果circle等于li的长度 说明走到克隆图片了,已经到达尽头
    if(circle ==ol.children.length){
      circle = 0;
    }
    // 先清除小圆圈的class
    for(var i =0; i<ol.children.length;i++){
      ol.children[i].className= ''
    }
    // 再添加第一个小圆圈的class
    ol.children[circle].className = 'current'
   }

这时候同样的图片也走到了尽头,需要清除num,从新重第一张图片开始

   if(num == ul.children.length - 1){
      ul.style.left =0;
      num=0;
    }

8.轮播自动播放,就是等同于点击一次按钮,所以说在定时器里面加入点击事件即可。

var timer =setInterval(function(){
    arrow_r.click()
  },2000)

在鼠标经过轮播图时候,需要清除定时器

  clearInterval(timer)
  timer = null/* 清除定时器变量 */

9.如果一直点击按钮,轮播就会一直跳转,这样的效果不太好,所以在点击的时候设置节流阀

var flag =true
 arrow_r.addEventListener('click',function () {
   if(flag){
     flag =false;
    ......

在轮播动画结束之后,打开节流阀

 animate(ul,-num*focuwidth,function(){
      flag =true //等动画加载完毕之后打开节流阀
    })

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值