JavaScript轮播图

前端轮播图实现:自动切换、手动切换与页码切换

轮播图是前端开发中常见的功能之一,本文将详细介绍如何实现一个功能完善的轮播图,包括自动切换、手动切换(上一页/下一页)和页码切换。

1. 自动切换轮播图

HTML 结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自动切换轮播图</title>
    <script src="js/轮播图.js" defer></script>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        img {
            width: 100%;
            height: 100%;
        }
        .container {
            width: 800px;
            height: 500px;
            background-color: red;
            margin: 100px auto;
            position: relative;
            overflow: hidden;
        }
        .container ul {
            width: 3200px;
            height: 100%;
            background-color: aqua;
            display: flex;
            position: absolute;
        }
        .container ul li {
            list-style: none;
            width: 800px;
        }
        .container ul li img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
    </style>
</head>
<body>
    <div class="container">
        <ul>
            <li><img src="image/45C8E05A4BA6AD530A98C868199A4A3C.jpg" alt=""></li>
            <li><img src="image/9571723BF569A1E74D5E5F23E8D85028.jpg" alt=""></li>
            <li><img src="image/B2727E6B05CE3F2EDC6E49AA027BFDD3.jpg" alt=""></li>
            <li><img src="image/034B86D3B4421A69C1D438088451DF1C.jpg" alt=""></li>
        </ul>
    </div>
</body>
</html>

JavaScript 实现

// 获取 ul 元素
var ul = document.querySelector("ul");
ul.style.left = "0px";

// 自动切换函数
var change = function () {
    var position = parseInt(ul.style.left) - 800;
    if (position < -2400) {
        position = 0;
    }
    ul.style.left = position + "px";
};

// 设置定时器,每秒切换一次
setInterval(change, 1000);

说明

  • setInterval 用于实现自动切换。

  • 当图片滚动到最后一张时,重置位置为 0,实现循环播放。

2. 手动切换轮播图(上一页/下一页)

HTML 结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>手动切换轮播图</title>
    <script src="js/轮播图.js" defer></script>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        img {
            width: 100%;
            height: 100%;
        }
        .container {
            width: 800px;
            height: 500px;
            background-color: red;
            margin: 100px auto;
            position: relative;
            overflow: hidden;
        }
        .container .imgbox {
            width: 3200px;
            height: 100%;
            background-color: aqua;
            display: flex;
            position: absolute;
        }
        .container .imgbox li {
            list-style: none;
            width: 800px;
        }
        .container .imgbox li img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
        .btn {
            position: absolute;
            width: 750px;
            height: 50px;
            margin: 225px 25px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        .btn li {
            list-style: none;
            width: 50px;
            height: 50px;
            background: rgba(255, 255, 255, 0.5);
            text-align: center;
            line-height: 50px;
            border-radius: 25px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div class="container">
        <ul class="imgbox">
            <li><img src="image/45C8E05A4BA6AD530A98C868199A4A3C.jpg" alt=""></li>
            <li><img src="image/9571723BF569A1E74D5E5F23E8D85028.jpg" alt=""></li>
            <li><img src="image/B2727E6B05CE3F2EDC6E49AA027BFDD3.jpg" alt=""></li>
            <li><img src="image/034B86D3B4421A69C1D438088451DF1C.jpg" alt=""></li>
        </ul>

        <ul class="btn">
            <li class="left"><</li>
            <li class="right">></li>
        </ul>
    </div>
</body>
</html>

JavaScript 实现

// 获取 ul 元素和按钮
var ul = document.querySelector("ul");
var left_btn = document.querySelector(".left");
var right_btn = document.querySelector(".right");
ul.style.left = "0px";

// 轮播切换的核心方法
var change = function (offset) {
    var position = parseInt(ul.style.left) + offset;
    if (position < -2400) {
        position = 0;
    }
    ul.style.left = position + "px";
};

// 上一页切换
left_btn.onclick = function () {
    change(800);
};

// 下一页切换
right_btn.onclick = function () {
    change(-800);
};

// 自动切换
var timer = setInterval(change, 4000);

// 避免手动自动冲突
left_btn.onmouseenter = function () {
    clearInterval(timer);
};
right_btn.onmouseenter = function () {
    clearInterval(timer);
};
left_btn.onmouseleave = function () {
    timer = setInterval(change, 4000);
};
right_btn.onmouseleave = function () {
    timer = setInterval(change, 4000);
};

说明

  • left_btnright_btn 分别实现上一页和下一页切换。

  • 鼠标悬停时停止自动切换,移开后恢复自动切换。

3. 页码切换轮播图

HTML 结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>页码切换轮播图</title>
    <script src="js/轮播图.js" defer></script>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        img {
            width: 100%;
            height: 100%;
        }
        .container {
            width: 800px;
            height: 500px;
            background-color: red;
            margin: 100px auto;
            position: relative;
            overflow: hidden;
        }
        .container .imgbox {
            width: 3200px;
            height: 100%;
            background-color: aqua;
            display: flex;
            position: absolute;
        }
        .container .imgbox li {
            list-style: none;
            width: 800px;
        }
        .container .imgbox li img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
        .btn {
            position: absolute;
            width: 750px;
            height: 50px;
            margin: 225px 25px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        .btn li {
            list-style: none;
            width: 50px;
            height: 50px;
            background: rgba(255, 255, 255, 0.5);
            text-align: center;
            line-height: 50px;
            border-radius: 25px;
            cursor: pointer;
        }
        .page {
            position: absolute;
            width: 100%;
            margin-top: 438px;
            display: flex;
            justify-content: center;
        }
        .page li {
            list-style: none;
            border: 1px solid black;
            margin: 0 3px;
            padding: 3px 5px;
            cursor: pointer;
            background: rgba(255, 255, 255, 0.5);
            font-size: 14px;
        }
        .page .current {
            background: rgba(27, 114, 226, 0.5);
            color: #fff;
        }
    </style>
</head>
<body>
    <div class="container">
        <ul class="imgbox">
            <li><img src="image/45C8E05A4BA6AD530A98C868199A4A3C.jpg" alt=""></li>
            <li><img src="image/9571723BF569A1E74D5E5F23E8D85028.jpg" alt=""></li>
            <li><img src="image/B2727E6B05CE3F2EDC6E49AA027BFDD3.jpg" alt=""></li>
            <li><img src="image/034B86D3B4421A69C1D438088451DF1C.jpg" alt=""></li>
        </ul>

        <ul class="btn">
            <li class="left"><</li>
            <li class="right">></li>
        </ul>

        <ul class="page">
            <li class="current">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>
    </div>
</body>
</html>

JavaScript 实现

// 获取 ul 元素和按钮
var ul = document.querySelector("ul");
var left_btn = document.querySelector(".left");
var right_btn = document.querySelector(".right");
var page_item = document.querySelectorAll(".page li");
ul.style.left = "0px";
var oldpage = 1;

// 轮播切换的核心方法
var change = function (offset) {
    var position = parseInt(ul.style.left) + offset;
    if (position < -2400) {
        position = 0;
    }
    ul.style.left = position + "px";
};

// 上一页切换
left_btn.onclick = function () {
    change(800);
    oldpage--;
    highlight();
};

// 下一页切换
right_btn.onclick = function () {
    change(-800);
    oldpage++;
    highlight();
};

// 自动切换
var timer = setInterval(right_btn.onclick, 4000);

// 避免手动自动冲突
left_btn.onmouseenter = function () {
    clearInterval(timer);
};
right_btn.onmouseenter = function () {
    clearInterval(timer);
};
left_btn.onmouseleave = function () {
    timer = setInterval(left_btn.onclick, 3000);
};
right_btn.onmouseleave = function () {
    timer = setInterval(right_btn.onclick, 4000);
};

// 页码样式切换函数
var highlight = function () {
    if (oldpage > 4) {
        oldpage = 1;
    } else if (oldpage < 1) {
        oldpage = 4;
    }
    for (var i = 0; i < page_item.length; i++) {
        page_item[i].className = "";
        if (i == oldpage - 1) {
            page_item[i].className = "current";
        }
    }
};

// 任意页码切换
for (var i = 0; i < page_item.length; i++) {
    page_item[i].onclick = function () {
        // 图片切换
        change((oldpage - this.innerText) * 800);
        oldpage = this.innerText;

        // 样式切换
        highlight();
    };

    // 鼠标悬停时停止定时器
    page_item[i].onmouseenter = function () {
        clearInterval(timer);
    };

    // 鼠标离开开始定时器
    page_item[i].onmouseleave = function () {
        timer = setInterval(right_btn.onclick, 4000);
    };
}

说明

  • 通过 page_item 实现页码切换。

  • 鼠标悬停在页码上时,停止自动切换,移开后恢复自动切换。

总结

通过以上实现,我们完成了轮播图的三种常见功能:

  1. 自动切换:通过 setInterval 实现。

  2. 手动切换:通过按钮点击事件实现。

  3. 页码切换:通过页码点击事件实现。

希望本文对你实现轮播图功能有所帮助!如果有任何问题,欢迎在评论区留言讨论。 😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值