轮播图案例

案例效果

在这里插入图片描述

案例功能需求

  1. 鼠标经过轮播图,左右按钮显示,离开隐藏左右按钮
  2. 点击左右按钮一次,图片往左播放一张,以此类推,左侧按钮同理
  3. 图片播放的同时,下面小圆圈模块跟随一起变化
  4. 点击小圆圈,可以播放响应图片
  5. 鼠标不经过轮播图,.轮播图也会自动播放图片
  6. 鼠标通过,轮播图模块,自动播放停止

代码展示

我此处的代码全部是写在html中的,这是不提倡的,最好各写各的,封装在自己的模块中

<!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>
    // 引用icon图标
    @font-face {
    font-family: 'icomoon';
    src:  url('../品优购/shopping/fonts/');
    src:  url('../品优购/shopping/fonts/icomoon.eot?slklzb#iefix') format('embedded-opentype'),
      url('../品优购/shopping/fonts/icomoon.ttf?slklzb') format('truetype'),
      url('../品优购/shopping/fonts/icomoon.woff?slklzb') format('woff'),
      url('../品优购/shopping/fonts/icomoon.svg?slklzb#icomoon') format('svg');
    font-weight: normal;
    font-style: normal;
    font-display: block;
  }
   *{
      margin: 0;
      padding: 0;
   }
      .slider{
          position: relative;
          overflow:hidden;
          width: 500px;
          height: 300px;
          margin: 100px auto;
      }
      .slider-bar{
          position: relative;
          width: 1500px;
          height: 300px;
      }
      ul li{
          list-style: none;
      }
      img{ 
          float: left;
          width: 500px;
          height: 300px;
      }
      .front span, .next span{
        position: absolute;
        display: none;
        font-family: 'icomoon';
        color: lightblue;
        font-size: 25px;
        cursor: pointer;
      } 
      .front span{
          top: 50%;
          left: 24px;
          content: '\ea44';
          transform: translateY(-50%);
      }
      .next span{
          top: 50%;
          right: 24px;
          content: '\ea42';
          transform: translateY(-50%);
      }
      .content{
          position: absolute;
          left: 50%;
          transform: translateX(-50%);
          bottom: 10px;
          /* background-color: pink; */
      }
     .current{
       background-color: lightblue!important;
      }
    .content ol li{
        display: inline-block;
        width: 8px;
        height: 8px;
        background-color: #fff;
        margin: 10px;
        border-radius: 4px;
    }
    </style>
    <script src="../品优购/shopping/js/animate.js"></script>
</head>
<body>
    <div class="slider">
        <div class="slider-bar">
            <ul>
                <li><img src="./img/02374b8e81521da118ef60fc481de725.jpeg" alt=""></li>
                <li><img src="./img/c07e7a7d592b9de571eb86b45f13531b.jpeg" alt=""></li>
                <li><img src="./img/d551f24bbd0adb87008c239830f3bb9a.jpeg" alt=""></li>
            </ul>
        </div>
        <div class="front">
            <span></span>
        </div>
        <div class="next">
            <span></span>
        </div>
        <div class="content">
            <ol>
            </ol>
        </div>
    </div>
</body>
<script>
    var front = document.querySelector('.front').children[0];
    var next = document.querySelector('.next').children[0];
    var slb = document.querySelector('.slider-bar');
    var slider = document.querySelector('.slider');
    var ul = slb.querySelector('ul');
    var ol = document.querySelector('ol');
    var focusWith = slider.offsetWidth;
    var timer = null;
    var flag = true;
    // 鼠标经过显示左右按钮
    slider.addEventListener('mouseover',function(){
        front.style.display = 'block';
        next.style.display = 'block';
        // 停止计时器
        clearInterval(timer)
    })
    // 鼠标离开隐藏按钮
    slider.addEventListener('mouseout',function(){
        front.style.display = 'none';
        next.style.display = 'none';
        // 开启定时器
        timer = setInterval(function(){
        // 手动调用点击事件
        next.click();
    },1000)
    })
    // 动态添加小圆圈
    for(var i = 0;i<ul.children.length;i++)
    {
        var li = document.createElement('li');
        // 记录当前小圆圈的索引号
        li.setAttribute('index',i);
        ol.appendChild(li);
        // 创建li的时候就给其绑定点击事件
         li.addEventListener('click',function(){
            for(var i = 0;i<ol.children.length;i++)
            {
                ol.children[i].className = '';
            }
            this.className = 'current';
            var index = this.getAttribute('index');
            // 当我们点击了某个小li,把当前li的索引号赋值给num
            num = index;
            // 当我们点击了某个小li,把当前li的索引号赋值给circle
            circle = index; 
            // 点击小圆圈,移动图片
            // 图片移动距离,就是小圆圈的索引号乘以图片的宽度 注意是负值
            animate(slb,-index*focusWith)
        })
    }
    // 把ol里面的第一个小圆点设置类名为current
    ol.children[0].className = 'current';
    // 克隆第一张图片,放到ul盒子最后面
    var first = ul.children[0].cloneNode(true);//加true表示深克隆,它本身及其子元素都会被复制。
    ul.appendChild(first);
    var num = 0;
    var circle = 0;
   // 点击左侧按钮,图片滚动一张   
    front.addEventListener('click',function(){
        if(flag)
        {
            flag= false;
            if(num == 0)
        {   num = ul.children.length-1;
            slb.style.left = -num*focusWith+'px';
        }
        num--;
        animate(slb,-num*focusWith,function(){
            flag = true;
        })
        circle--;
       if(circle < 0)
       {
           circle = ol.children.length-1;
       }
     // 给小圆圈添加样式   
       for(var i =0;i<ol.children.length;i++){
           ol.children[i].className = '';
       }
       ol.children[circle].className = 'current';
        }
       
    })
    // 点击右侧按钮,图片滚动一张
    next.addEventListener('click',function(){
        if(flag)
        {    // 关闭节流阀
            flag = false;
            num++; 
     // 如果走到了最后复制的一张图片,设置滚动盒子的left值为0 
       if(num==ul.children.length-1)
       {
         slb.style.left = 0;
         num=0;
       }
       animate(slb,-num*focusWith,function(){
           flag = true;
       })
       circle++;
    //    如果circle等于圆圈的个数,使circle重新赋值为0
       if(circle == ol.children.length)
       {
           circle = 0;
       }
       for(var i =0;i<ol.children.length;i++){
           ol.children[i].className = '';
       }
       ol.children[circle].className = 'current';
        }
     
    })
    // 自动播放
    var timer = setInterval(function(){
        // 手动调用点击事件
        next.click();
    },1000)
</script>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值