JS 原生手写轮播图

简介: JS 原生手写轮播图

只是实现了原生JS实现轮播图的逻辑和具体实现代码,css样式并未进行美化


实现了以下功能

(1) 点击容器container下方小圆点可以进行切换


(2) 点击左右的按钮可以进行切换


(3) 自动轮播图片


(4) 鼠标放上去暂停定时器,鼠标移出重新开启定时器


具体代码实现如下:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <style>
            * {
                padding: 0;
                margin: 0;
                box-sizing: border-box;
            }
            body {
                margin: 300px;
            }
            .container {
                width: 600px;
                height: 300px;
                position: relative;
            }
            .content-list {
                width: 600px;
                height: 300px;
                position: relative;
                transition: all 0.9s;
            }
            .item {
                width: 100%;
                height: 100%;
                list-style: none;
                position: absolute;
                left: 0;
                top: 0;
                opacity: 0;
            }
            .item:nth-child(1) {
                background-color: red;
            }
            .item:nth-child(2) {
                background-color: green;
            }
            .item:nth-child(3) {
                background-color: blue;
            }
            .item:nth-child(4) {
                background-color: black;
            }
            .active {
                opacity: 1;
            }
            .order {
                position: absolute;
                left: 50%;
                transform: translateX(-50%);
                bottom: 10px;
                display: flex;
            }
            .item1 {
                width: 20px;
                height: 20px;
                margin-right: 10px;
                border-radius: 50%;
                background-color: white;
                list-style: none;
            }
            .item1Active {
                background: purple;
            }
            button {
                width: 20px;
                height: 30px;
            }
            .showBtn {
                display: block;
            }
            .hideBtn {
                display: none;
            }
            #leftBtn {
                position: absolute;
                left: 10px;
                top: 50%;
                transform: translateY(-50%);
            }
            #rightBtn {
                position: absolute;
                right: 10px;
                top: 50%;
                transform: translateY(-50%);
            }
        </style>
    </head>
    <body>
        <div class="container">
            <ul class="content-list">
                <li class="item active"></li>
                <li class="item"></li>
                <li class="item"></li>
                <li class="item"></li>
            </ul>
            <ul class="order">
                <li class="item1 item1Active">1</li>
                <li class="item1">2</li>
                <li class="item1">3</li>
                <li class="item1">4</li>
            </ul>
            <button id="leftBtn" class="hideBtn"><</button>
            <button id="rightBtn" class="hideBtn">></button>
        </div>
        <script>
            let container = document.querySelector('.container');
            let items = document.querySelectorAll('.item');
            let item1s = document.querySelectorAll('.item1');
            let leftBtn = document.querySelector('#leftBtn');
            let rightBtn = document.querySelector('#rightBtn');
            // 当前索引index
            let index = 0;
            function changeIndex() {
                for (let i = 0; i < items.length; i++) {
                    items[i].classList.remove('active');
                    item1s[i].classList.remove('item1Active');
                }
                items[index].classList.add('active');
                item1s[index].classList.add('item1Active');
            }
            function goLeft() {
                if (index > 0) {
                    index--;
                } else {
                    index = 3;
                }
                changeIndex();
            }
            function goRight() {
                if (index < 3) {
                    index++;
                } else {
                    index = 0;
                }
                changeIndex();
            }
            // 给左按钮和右按钮绑定点击事件,达到轮播图切换的效果
            leftBtn.addEventListener('click', goLeft);
            rightBtn.addEventListener('click', goRight);
            // 给底部小圆点增加自定义属性index,标记为索引,方便为小圆点绑定点击事件
            for (let i = 0; i < item1s.length; i++) {
                item1s[i].addEventListener('click', function () {
                    index = i;
                    changeIndex();
                });
            }
            // 声明定时器,达到轮播图自动向后切换的效果
            let timer;
            timer = setInterval(() => {
                goRight();
            }, 2000);
            // 鼠标移到当前容器触发的事件,两个按钮显示,关闭定时器
            container.addEventListener('mouseover', function () {
                leftBtn.className = 'showBtn';
                rightBtn.className = 'showBtn';
                // 暂停定时器
                clearInterval(timer);
            });
            // 鼠标离开当前容器触发的事件,两个按钮隐藏,重新开启定时器
            container.addEventListener('mouseleave', function () {
                leftBtn.className = 'hideBtn';
                rightBtn.className = 'hideBtn';
                // 再次打开定时器
                timer = setInterval(() => {
                    goRight();
                }, 2000);
            });
        </script>
    </body>
</html>

达到的效果图如下

目录
相关文章
|
17天前
|
前端开发 JavaScript
前端 js 经典:Object 常用原生方法
前端 js 经典:Object 常用原生方法
43 2
|
17天前
|
前端开发 JavaScript
前端 js 经典:array 原生方法
前端 js 经典:array 原生方法
20 1
|
17天前
|
JavaScript 索引
jQuery 实现 图片框切换【与原生 JS 对比】
jQuery 实现 图片框切换【与原生 JS 对比】
|
17天前
|
监控 JavaScript 前端开发
超越原生:探索Node.js中最佳文件系统三方库
超越原生:探索Node.js中最佳文件系统三方库
|
18天前
|
JavaScript 前端开发 索引
JavaScript array 原生 reduce 方法的模拟实现
JavaScript array 原生 reduce 方法的模拟实现
18 2
|
19天前
|
JavaScript 计算机视觉
原生js通过年龄判断是否可以抽奖
原生js通过年龄判断是否可以抽奖
16 0
|
19天前
|
存储 JavaScript 前端开发
原生JS如何实现验证码
原生JS如何实现验证码
16 0
|
19天前
|
JavaScript 安全 前端开发
原生JS实现一键复制,一键粘贴
原生JS实现一键复制,一键粘贴
13 0
|
19天前
|
前端开发 JavaScript 调度
原生JavaScript实现弹幕组件
原生JavaScript实现弹幕组件
|
19天前
|
JavaScript 前端开发
js原生自调用函数原理
JavaScript中的IIFE(Immediately Invoked Function Expression)是定义后立即执行的函数表达式。它有两种实现方式:匿名函数表达式 `(function() { /* 函数体 */ })()` 和命名函数声明 `(function myFunction() { /* 函数体 */ })()`。IIFE提供封闭作用域,防止变量冲突,常用于创建私有作用域、封装代码和避免变量提升问题。执行后,IIFE内部的变量和函数会被销毁,除非被特意暴露。