用原生js实现简单的轮播图

实现的效果:

        1.自动循环播放轮播图

        2.实现鼠标放在轮播图上停止播放,拿走鼠标继续播放

        3.实现小圆点和图片对应,点击小圆点图片也跟着变化

       因为点击按钮切换太简单了,就没实现,本人也不是很擅长界面设计,所以界面不是很好看,有能力的可以自己完善一些界面。

        展示图

        

        先放js代码,这是最核心的部分,可以直接拿去用,图片资源也不用换,用的小米官方的

<script type="text/javascript">
    //轮播图要播放的图片资源数组
    let images = ['https://i1.mifile.cn/a4/xmad_15627254995865_hbFzT.jpg',
      'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/17e67a3d3c68bb81de533d71b0e73399.jpg?thumb=1&w=1533&h=575&f=webp&q=90',
      'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/aaa292a9217632f7d1747afdb0b56cd0.jpg?thumb=1&w=1533&h=575&f=webp&q=90',
      'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/96a0d6d237659dfd2aec30ef66a05ec8.jpg?thumb=1&w=1533&h=575&f=webp&q=90',
      'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/74a864e59874fc1e17b6709c5256a4ba.jpg?thumb=1&w=1533&h=575&f=webp&q=90'];

    //拿到整个轮播图盒子对象
    const slider = document.querySelector('.slider');

    //拿到轮播图放置图片的盒子对象
    const sliderImages = document.querySelector('.slider .slider-images');

    //拿到轮播图放置图片的img对象
    const sliderImg = document.querySelector('.slider .slider-images .image');

    //拿到轮播图根据图片数量所具有的小圆点的盒子对象
    const sliderfooter = document.querySelector('.slider .slider-footer')

    //根据images图片的数量来生成圆点的个数 
    for (let i = 0; i < images.length; i++) {
      //因为原标签默认是第一张图片,所以这里需要给第一个小圆点添加active类名
      sliderfooter.innerHTML +=' <a class="swiper-bullet"></a>&nbsp;&nbsp;';
      // === 或 == 都可以,但用===更好一些,养成习惯
      if (i === 0) {
        const activeBullet = document.querySelector(`.slider .slider-footer .swiper-bullet:nth-child(1)`);
        activeBullet.classList.add('active');
      }
    }

    //数组下标,用它的变化实现轮播图切换,必须写在外面,不能在定时器里面定义
    let index = 0;

    //编写定时器实现轮播图每隔特定时间自动更换图片,之所以用变量接受返回数据,是因为后面有用,而且必须是let定义,不能是const
    let n = setInterval(() => {

      //实现轮播图切换
      sliderImg.src = images[index++];

      //如果index超过了数组长度,将其置为0
      if (index >= images.length) {
        index = 0;
      }

      //实现圆点跟着对应图片变换样式
      //排他思想,先把所有具有active类名的元素的类名移除,在给自己加上
      const bullet = document.querySelector('.slider .slider-footer .active');
      const activeBullet = document.querySelector(`.slider .slider-footer .swiper-bullet:nth-child(${index + 1})`);
      bullet.classList.remove('active');
      activeBullet.classList.add('active');
      
    },100);

    //实现鼠标移入轮播图暂停切换,移出轮播图继续播放
    slider.addEventListener('mouseenter',() => {
      clearInterval(n);
    });
    slider.addEventListener('mouseleave', () => {
      n = setInterval(() => {

        //实现轮播图切换
        sliderImg.src = images[index++];

        //如果index超过了数组长度,将其置为0
        if (index >= images.length) {
          index = 0;
        }
        const bullet = document.querySelector('.slider .slider-footer .active');
        const activeBullet = document.querySelector(`.slider .slider-footer .swiper-bullet:nth-child(${index + 1})`);
        bullet.classList.remove('active');
        activeBullet.classList.add('active');
      },100);
       
    });

    //小圆点的点击事件,实现点小圆点切换到对应图片,因为有多个小圆点,所以得用循环
    for (let i = 0; i < images.length; i++) {
      const activeBullet = document.querySelector(`.slider .slider-footer .swiper-bullet:nth-child(${i + 1})`);

      activeBullet.addEventListener('click',()=>{
        //排他思想
        const bullet = document.querySelector('.slider .slider-footer .active');
        bullet.classList.remove('active');
        activeBullet.classList.add('active');
        sliderImg.src=images[i];
      })
    }
</script>

        接下来便是html和css代码,js代码建议放在</body>标签前

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .slider {
      width: 613px;
      height: 230px;
    }
    .slider .slider-images .image{
      width: 613px;
      height: 230px;
    }
    .slider .slider-footer{
      width: 613px;
      height: 25px;
      text-align: right;
    }
    .slider .slider-footer .swiper-bullet {
      width: 8px;
      height: 8px;
      display: inline-block;
      border: 2px solid #fff;
      border-color: hsla(0, 0%, 100%, .3);
      border-radius: 10px;
      overflow: hidden;
      background: rgba(0, 0, 0, .4);
      opacity: .8;
      cursor: pointer;
    }
    .slider .slider-footer .active {
      width: 8px;
      height: 8px;
      opacity: 1;
      background: #fff;
      border-color: rgba(0, 0, 0, .4);
    }
  </style>
</head>
<body>
  <div class="slider">
    <div class="slider-images">
      <img src="https://i1.mifile.cn/a4/xmad_15627254995865_hbFzT.jpg" class="image">
    </div>
    <div class="slider-footer">
    </div>
  </div>
</body>
</html>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值