js_for循环应用之生成轮播

本文介绍了如何利用JavaScript的for循环来实现轮播图的制作,包括生成与图片数量相等的底部按钮,以及处理按钮的选中状态。通过两种方法详细阐述了如何在用户点击按钮或切换图片时,正确更新按钮的选中状态。

目的:使用 for循环生成轮播图(如图)
步骤:

        获取每个需要的元素
        将图片装入数组中,使用数组的下标获取图片
        申请变量,通过改变变量,获取数组里面的图片
<div id="banner">
    <img src=""/>
    <ul></ul>
    <div id="btn">
        <div><</div>
        <div>></div>
    </div>
</div>

window.onload = function(){
    var Banner = document.getElementById('banner');
    var Img = document.getElementsByTagName('img');
    var Ul = document.getElementsByTagName('ul');
    var Btns = document.getElementById('btn');
    var btns = Btns.getElementsByTagName('div');
    var Lis = document.getElementsByTagName('li');
    var Icos = document.getElementsByClassName('ico');
    var arr = ['img/jiushui.gif','img/mx6.gif','img/car.gif','img/banner.jpg','img/MZ6.jpg'];


    //初始化
    var index = 0;
    Img[0].src = arr[0];
    //生成下方点击按钮  
    for(var i=0; i<arr.length; i++){
        str+='<li></li>';
    }
    Ul[0].innerHTML = str;
    Lis[0].className = 'active';        
    //向前翻页
    btns[0].onclick = function (){
        index--;
        if(index<0){
            index = arr.length-1;
        }
        Img[0].src = arr[index%5];
        fn()
    }

    //向后翻页
    btns[1].onclick = function (){
        index++;
        Img[0].src = arr[index%5];
        fn()
    }

    var old = Lis[0];
    for(var i=0; i<Lis.length; i++){
        Lis[i].index = i;
        Lis[i].onclick = function(){
            index = this.index;
            Img[0].src = arr[this.index];
            fn();
        }
    }

    function fn(){
        old.className = '';
        Lis[index%5].className = 'active';
        old = Lis[index%5];
    }   
}

注意点:

  1. 使用for循环生成图片下方按钮,有多少图片生成多少按钮
  2. 图片下方按钮选中状态通过添加class,点击新的按钮时,去掉上一个按钮选中状态,给当前选中按钮添加class
    方法一:使用for循环清空所有按钮选中状态,给当前添加选中状态
    方法二:使用变量储存上一次点击的按钮,默认为第一个,点击时,清空默认选中选中按钮的class,给当前添加选中状态,将当前选中的按钮赋值给变量,使下次点击时现在选中的按钮为上次选中的按钮,按照这个步骤循环。
    3.点击左右按钮时切换下面按钮的选中状态,方法:使index = this.index统一使之一样。
### 使用 `for` 循环实现轮播图 通过使用 JavaScript 的 `for` 循环,可以轻松创建一个带有动画效果的轮播图。以下是具体方法和代码示例: #### HTML 结构 首先定义一个容器来存储所有的图片项。 ```html <div class="carousel"> <div class="slides"></div> </div> <ul class="dots"></ul> ``` #### CSS 样式 设置基本样式以确保轮播图正常显示,并利用 `@keyframes` 定义动画效果。 ```css .carousel { position: relative; width: 300px; height: 200px; overflow: hidden; } .slides { display: flex; transition: transform 0.5s ease-in-out; } .slide { min-width: 100%; box-sizing: border-box; } .dots { list-style-type: none; padding: 0; margin-top: 10px; text-align: center; } .dot { cursor: pointer; display: inline-block; width: 15px; height: 15px; margin: 0 5px; background-color: gray; border-radius: 50%; } ``` #### JavaScript 实现逻辑 下面是一个基于 `for` 循环轮播图实现方式,其中包含了定时器功能以及手动点击控制的功能。 ```javascript // 初始化数据 const images = [ 'circle1.jpg', 'circle2.jpg', 'circle3.jpg', 'circle4.jpg', 'circle5.jpg' ]; let currentIndex = 0; // 获取 DOM 节点 const slidesContainer = document.querySelector('.slides'); const dotsContainer = document.querySelector('.dots'); // 动态生成幻灯片内容 function generateSlides() { const slideElements = []; for (let i = 0; i < images.length; i++) { const imgElement = `<div class="slide"><img src="../IMG/${images[i]}" style="width:100%;height:auto;"></div>`; slideElements.push(imgElement); } slidesContainer.innerHTML = slideElements.join(''); } generateSlides(); // 动态生成指示点 function generateDots() { for (let i = 0; i < images.length; i++) { const dotElement = `<li class="dot" data-index="${i}"></li>`; dotsContainer.insertAdjacentHTML('beforeend', dotElement); } // 设置第一个点为激活状态 const allDots = document.querySelectorAll('.dot'); allDots[currentIndex].classList.add('active'); } generateDots(); // 更新当前索引并应用变化 function updateCarousel(index) { const offset = index * -100; // 偏移量计算 slidesContainer.style.transform = `translateX(${offset}%)`; // 切换活动指示点 const allDots = document.querySelectorAll('.dot'); allDots.forEach(dot => dot.classList.remove('active')); allDots[index].classList.add('active'); } updateCarousel(currentIndex); // 自动播放功能 function autoPlay() { setInterval(() => { currentIndex = (currentIndex + 1) % images.length; updateCarousel(currentIndex); }, 2500); // 每隔2.5秒切换一次 } autoPlay(); // 手动点击事件处理 document.addEventListener('click', event => { if (!event.target.matches('.dot')) return; const clickedDot = event.target; const newIndex = parseInt(clickedDot.getAttribute('data-index'), 10); currentIndex = newIndex; updateCarousel(newIndex); }); ``` 以上代码实现了以下功能: - **动态加载图片**:通过 `for` 循环遍历数组中的图片路径[^1]。 - **自动播放**:每隔一定时间更新当前展示的图片[^2]。 - **手动控制**:允许用户通过点击圆点跳转至指定图片[^3]。 ### 注意事项 为了使轮播图更加流畅,建议优化以下几个方面: - 图片资源预加载,防止初次访问时出现空白现象。 - 添加触摸滑动手势支持(移动端友好)。 - 配置更复杂的过渡动画效果提升用户体验。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值