欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

首次模拟JS轮播图效果

程序员文章站 2022-04-10 09:45:38
首次模拟JS轮播图效果大佬手下留情代码有点小问题,就是点击最后一张后跳不到首张,困惑。图的话自己去淘宝扒吧(^~*)HTML + CSS代码部分 ...

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