美文网首页
普通轮播图

普通轮播图

作者: 升龙无涯 | 来源:发表于2021-09-01 11:53 被阅读0次

效果图如下:


普通轮播图

html结构代码:

<div class="carousel">
    <ul>
        <li class="active">
            <a href="./img/1.jpg">
                <img src="./img/1.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="./img/2.jpg">
                <img src="./img/2.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="./img/3.jpg">
                <img src="./img/3.jpg" alt="">
            </a>
        </li>
    </ul>
    <ol>
        <li class="active"></li>
        <li></li>
        <li></li>
    </ol>
    <a href="" class="leftBtn">&lt;</a>
    <a href="" class="rightBtn">&gt;</a>
</div>

样式代码:

.carousel {
    width: 600px;
    height: 300px;
    border: 1px solid #000;
    position: relative;
}
.carousel:hover {
    cursor: pointer;
}
.carousel ul, .carousel ol {
    list-style: none;
    padding: 0;
    margin: 0;
}
.carousel ul li a img {
    width: 600px;
    height: 300px;
}
.carousel ul li {
    display: none;
}
.carousel ul li.active {
    display: block;
}
.carousel ol {
    width: 60px;
    height: 20px;
    background-color: rgba(255, 255, 255, .7);
    border-radius: 10px;
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    bottom: 10px;
}
.carousel ol li {
    width: 10px;
    height: 10px;
    background-color: #333;
    border-radius: 50%;
    float: left;
    margin: 5px;
}
.carousel ol li.active {
    background-color: #f00;
}
.carousel>a {
    text-decoration: none;
    width: 20px;
    height: 40px;
    background-color: rgba(0, 0, 0, .7);
    color: #fff;
    text-align: center;
    line-height: 40px;
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
}
.carousel>a.leftBtn {
    left: 0;
}
.carousel>a.rightBtn {
    right: 0;
}

js逻辑代码:

// 获取所有标签
var carousel = document.querySelector('.carousel');
var ulis = carousel.querySelectorAll('ul li');
var olis = carousel.querySelectorAll('ol li');
var leftBtn = carousel.querySelector('a.leftBtn');
var rightBtn = carousel.querySelector('a.rightBtn');
// 定义当前显示的li的下标
var index = 0;
// 定义定时器变量
var timerId;
// 右方向按钮的点击事件
rightBtn.onclick = function() {
    // 让下标++
    index++;
    // 限制下标最大值
    if(index === ulis.length) {
        index = 0; // 超过最大值就设置为0 - 循环轮播
    }
    // 将所有li的active类名去掉
    for(var i = 0; i < ulis.length; i++) {
        ulis[i].className = '';
        olis[i].className = '';
    }
    // 根据新的下标,显示对应的li
    ulis[index].className = 'active';
    olis[index].className = 'active';
    // 阻止a标签的默认行为
    return false;
}
// 左方向按钮的点击事件
leftBtn.onclick = function() {
    // 让下标--
    index--;
    // 限制下标最小值
    if(index < 0) {
        index = ulis.length - 1; // 超过最小值就设置为最大值 - 循环轮播
    }
    // 将所有li的active类名去掉
    for(var i = 0; i < ulis.length; i++) {
        ulis[i].className = '';
        olis[i].className = '';
    }
    // 根据新的下标,显示对应的li
    ulis[index].className = 'active';
    olis[index].className = 'active';
    // 阻止a标签的默认行为
    return false;
}
// 小圆点的点击事件
for(var i = 0; i < olis.length; i++) {
    // 给每一个li设置属性,值为自己的下标
    olis[i].index = i;
    // 给每个li绑定单击事件
    olis[i].onclick = function() {
        // 将自己的下标赋值给index变量
        index = this.index;
        // 将所有li的active类名去掉
        for(var j = 0; j < ulis.length; j++) {
            ulis[j].className = '';
            olis[j].className = '';
        }
        // 根据新的index变量让对应的li显示
        ulis[index].className = 'active';
        olis[index].className = 'active';
    }
}
// 自动轮播
timerId = setInterval(function() {
    // 让下标++
    index++;
    // 限制下标最大值
    if(index === ulis.length) {
        index = 0; // 超过最大值就设置为0 - 循环轮播
    }
    // 将所有li的active类名去掉
    for(var i = 0; i < ulis.length; i++) {
        ulis[i].className = '';
        olis[i].className = '';
    }
    // 根据新的下标,显示对应的li
    ulis[index].className = 'active';
    olis[index].className = 'active';
}, 1000);
// 鼠标移入大盒子停止自动轮播
carousel.onmouseover = function() {
    clearInterval(timerId);
}
// 鼠标移出大盒子再次开始自动轮播
carousel.onmouseout = function() {
    timerId = setInterval(function() {
        // 让下标++
        index++;
        // 限制下标最大值
        if(index === ulis.length) {
            index = 0; // 超过最大值就设置为0 - 循环轮播
        }
        // 将所有li的active类名去掉
        for(var i = 0; i < ulis.length; i++) {
            ulis[i].className = '';
            olis[i].className = '';
        }
        // 根据新的下标,显示对应的li
        ulis[index].className = 'active';
        olis[index].className = 'active';
    }, 1000);
}

其中有些重复代码,可以封装为函数重复调用:

// 获取所有标签
var carousel = document.querySelector('.carousel');
var ulis = carousel.querySelectorAll('ul li');
var olis = carousel.querySelectorAll('ol li');
var leftBtn = carousel.querySelector('a.leftBtn');
var rightBtn = carousel.querySelector('a.rightBtn');
// 定义当前显示的li的下标
var index = 0;
// 定义定时器变量
var timerId;
// 右方向按钮的点击事件
rightBtn.onclick = function() {
    rightMove()
    // 阻止a标签的默认行为
    return false;
}
// 左方向按钮的点击事件
leftBtn.onclick = function() {
    // 让下标--
    index--;
    move()
    // 阻止a标签的默认行为
    return false;
}
// 小圆点的点击事件
for(var i = 0; i < olis.length; i++) {
    // 给每一个li设置属性,值为自己的下标
    olis[i].index = i;
    // 给每个li绑定单击事件
    olis[i].onclick = function() {
        // 将自己的下标赋值给index变量
        index = this.index;
        move()
    }
}
// 自动轮播
autoMove()
// 鼠标移入大盒子停止自动轮播
carousel.onmouseover = function() {
    clearInterval(timerId);
}
// 鼠标移出大盒子再次开始自动轮播
carousel.onmouseout = function() {
    autoMove()
}
// 有按钮点击轮播的代码重复了3次,封装为函数
function rightMove() {
    // 让下标++
    index++;
    move()
}
// 轮播图的核心代码重复了很多次
function move() {
    // 限制下标最大值
    if(index === ulis.length) {
        index = 0; // 超过最大值就设置为0 - 循环轮播
    }
    // 限制下标最小值
    if(index < 0) {
        index = ulis.length - 1; // 超过最小值就设置为最大值 - 循环轮播
    }
    // 将所有li的active类名去掉
    for(var i = 0; i < ulis.length; i++) {
        ulis[i].className = '';
        olis[i].className = '';
    }
    // 根据新的下标,显示对应的li
    ulis[index].className = 'active';
    olis[index].className = 'active';
}
// 自动轮播重复了2次
function autoMove() {
    timerId = setInterval(function() {
        rightMove()
    }, 1000);
}

相关文章

  • 普通轮播图

    效果图如下: html结构代码: 样式代码: js逻辑代码: 其中有些重复代码,可以封装为函数重复调用:

  • 无标题文章

    轮播图分为:传统轮播图、间歇轮播图、呼吸轮播图、无缝滚动轮播图等。它们各具特色,各有用处。 1.传统轮播图 第一步...

  • Recyclerview基本使用<8>-----用R

    用RecyclerView实现无限轮播图,有普通版和3d版

  • 轮播图

    轮播图分为:传统轮播图、间歇轮播图、呼吸轮播图、无缝滚动轮播图等。 1.传统轮播图 第一步,得到元素 第二步,设置...

  • 现金红包

    每日红包 轮播图 详情图 周末红包 轮播图 详情图 圣诞红包 轮播图 详情图

  • day7_作业

    轮播图1 轮播图2

  • [iOS]定制性强的广告轮播图--SCAdView

    @[无限轮播图] @[3D轮播图] @[广告轮播图] SCAdView Statement If my code ...

  • js实现效果:循环轮播图

    效果简介 跟普通的左右切换轮播图类似,但是它看起来是首尾相连的。 注意:要想学习这种轮播图,首先要学会实现基本左右...

  • 普通奖品

    卡西欧小方块 轮播图 详情图 三只松鼠大礼包 轮播图 详情图 天猫精灵 轮播图 详情图 小米蓝牙无线耳机 轮播图 ...

  • 轮播图心得

    轮播图 写轮播图之前我们要认识到几个问题:一、什么是轮播图?二、怎么实现轮播效果?三、轮播图还有什么小功能可以实现...

网友评论

      本文标题:普通轮播图

      本文链接:https://www.haomeiwen.com/subject/fewbiltx.html