当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 首次模拟JS轮播图效果

首次模拟JS轮播图效果

2020年07月11日  | 移动技术网IT编程  | 我要评论

首次模拟JS轮播图效果
大佬手下留情
代码有点小问题,就是点击最后一张后跳不到首张,困惑。
图的话自己去淘宝扒吧(^~*)
我在淘宝上扒的图嘿嘿

HTML + CSS代码部分
<!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>        
        *{            
            margin: 0;            
            padding: 0;        
         }        
         img {           
            position: absolute;                   
         }       
         li {           
            list-style: none;        
         }        
         .box {           
            position: relative;           
            width: 520px;           
            height: 280px;                       
            top: 200px;            
            left: 500px;            
            overflow: hidden;        
         }       
         .zi {            
            display: none;            
            position: absolute;            
            z-index: 1;            
            width: 20px;            
            height: 30px;            
            line-height: 30px;            
            color: powderblue;            
            text-decoration: none;            
            top: 50%;            
            margin-top: -15px;           
            background: rgba(0, 0, 0, .3);            
            border-top-right-radius: 15px;            
            border-bottom-right-radius: 15px;        
        }        
         .zi1 {            
            display: none;            
            position: absolute;            
            z-index: 1;            
            width: 20px;            
            height: 30px;            
            line-height: 30px;            
            color: powderblue;            
            text-decoration: none;            
            top: 50%;            
            left: 100%;            
            margin-left: -20px;            
            text-align: center;            
            margin-top: -15px;            
            background: rgba(0, 0, 0, .3);            
            border-top-left-radius: 15px;            
            border-bottom-left-radius: 15px;       
        }        
        .box .ul1 {            
            position: absolute;            
            top: 0;            
            left: 0;            
            height: 280px;        
        }        
        .box .ul1 li {            
            position: absolute;            
            float: left;                    
        }        
        .current {            
            background-color: orange;        
        }        
        .box .tb1 {            
           left: 0;        
        }        
        .box .tb2 {            
           left: 520px;        
        }        
        .box .tb3 {            
           left: 1040px;        
        }        
        .box .tb4 {            
           left: 1560px;      
        }        
        .box .tb5 {            
           left: 2080px;        
        }                
        ol {            
           position: absolute;           
           z-index: 2;            
           width: 520px;            
           height: 20px;                        
           top: 260px;        
        }        
        ol li {            
           float: left;           
           width: 10px;            
           height: 10px;            
           background-color: #fff;            
           border-radius: 50%;            
           margin: 3px;            
           margin-left: 8px;        
        }    
</style>    
<script src="../第四天/animate.js"></script>    
<script src="index.js"></script></head>    
<body>        
<div class="box">            
<a href="javascript:;" class="zi"><</a>            
<a href="javascript:;" class="zi1">></a>            
<ul class="ul1">            
<li>                
<a href=""><img src="../图片/TB1_rGSNhv1gK0jSZFFSuv0sXXa.jpg" class="tb1"></a>            </li>            
<li>          
<a href=""><img src="../图片/TB1D4dSMFP7gK0jSZFjXXc5aXXa.jpg" class="tb2"></a>            </li>            
<li>                
<a href=""><img src="../图片/TB1iUJuM.Y1gK0jSZFCXXcwqXXa-520-280.jpg_q90_.webp" class="tb3"></a>            
</li>            
<li>                
<a href=""><img src="../图片/TB1MQw0M4v1gK0jSZFFwu20sXXa.png_q90_.webp" class="tb4"></a>            </li>            
<li>                
<a href=""><img src="../图片/TB1S9nja9R26e4jSZFESuvwuXXa.jpg" class="tb5"></a>            </li>            
</ul>            
<ol class="circle">            
</ol>        
</div>
</body>
</html>

JS代码部分

window.addEventListener('load', function() {
    // 1. 获取元素    
    var zi = document.querySelector('.zi');    
    var zi1 = document.querySelector('.zi1');   
    var div = document.querySelector('.box');    
    var divWidth = div.offsetWidth;    
    // 2.经过盒子div 隐藏左右div           
    div.addEventListener('mouseover', function() {  
        zi.style.display = 'block';                
        zi1.style.display = 'block';   
}) 
    div.addEventListener('mouseleave', function() {         
        zi.style.display = 'none';        
        zi1.style.display = 'none';  
 })    
 // 3.动态生成小圆圈 有几张图片,就生成几个小圆圈    
    var ul = div.querySelector('.ul1');    
    var ol = div.querySelector('.circle');    
    for(var i = 0; i < ul.children.length; i++) {        
        // 创建一个小li        
        var li = document.createElement('li');        
        // 记录当前小圆圈的索引号 通过自定义属性来做        
        li.setAttribute('index', i);        
        // 把小li插入到ol里面        
        ol.appendChild(li);        
        // 4.小圆圈的排他思想 我们可以在生成小圆圈的同时直接绑定点击事件        
        li.addEventListener('click', function(){            
           //干掉所有人 把所有小li清除 current 类名            
           for(var i = 0; i < ol.children.length; i++) {                
            ol.children[i].className = '';            
            }            
           // 留下我自己 当前的小li 设置current 类名 
           this.className = 'current';                       
           // 5.点击小圆圈,移动图片 当然移动的是 ul            
           // ul的移动距离是 小圆圈的索引号 乘以 图片的宽度 注意是负值            
           // 当我们点击了某个li 就拿到当前小li的索引号            
           var index = this.getAttribute('index');            
           //当我们点击了某个小li 就把这个li的索引号给num            
           num = index;            
           //当我们点击了某个小li 就把这个li的索引号给circle            
           circle = index;            
           animate(ul, -index * divWidth -10);                    
        })    
   }    
   // 把ol里面的第一个小li设置类名为 current    
   ol.children[0].className = 'current';    
   // 6. 克隆第一张图片放到最后面    
   var first = ul.children[0].cloneNode(true);    
   ul.appendChild(first);    
   // 7.点击右侧按钮, 图片滚动一张    
   var num = 0;    
   var circle = 0;    
   var zi1 = document.querySelector('.zi1');      
   zi1.addEventListener('click', function() {        
       if(num == 5) {                        
           ul.style.left = 0 + 'px';            
           num = 0;        
       }        
       num++;        
       animate(ul, -num * divWidth - 9);        
       circle++;        
       //先清除其余的小圆圈的current类名        
       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';    
   })    
   //9.左侧按钮    
   var zi = document.querySelector('.zi');     
   zi.addEventListener('click', function() {        
       if(num == 0) {            
           num = ul.children.length - 1;            
           ul.style.left = -num * divWidth + 'px';                   
       }        
       num--;        
       animate(ul, -num * divWidth - 9);        
       circle--;        
       //先清除其余的小圆圈的current类名        
       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';    
       }) 
 })

本文地址:https://blog.csdn.net/qq_44894416/article/details/107256050

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网