用html css JavaScript写一个功能全面的王者荣耀轮播图 通俗易懂

首先分析一下案例需求:

1.鼠标经过 就显示隐藏左右按钮

2.动态生成小圆圈  有几张图片,就生成几个小圆圈

3.点击小圆圈,移动图片    当然移动的是 ul(大盒子)

4.点击左右按钮, 图片滚动一张,小圆圈随之变换(先做右侧)

5.鼠标经过图片不动

6.到最后一张时在点击下一张则跳到第一张(在第一张点击上一张则跳到最后一张)

7.轮播图自动播放

html骨架:

<body>
    <div class="main">
        <a href="javascript:;" class="left">
            &lt;
        </a>
        <a href="javascript:;" class="right">
            &gt;
        </a>
        <ul>
            <li>
                <img src="images/1.jpg" alt="">
            </li>
            <li>
                <img src="images/2.jpg " alt=" ">
            </li>
            <li>
                <img src="images/3.jpg " alt=" ">
            </li>
            <li>
                <img src="images/4.jpg" alt=" ">
            </li>
        </ul>
        <ol class="circle ">
        </ol>
    </div>
</body>

 css代码:

* {
    padding: 0;
    margin: 0;
    box-sizing: border-box;
}

li {
    list-style: none;
}

.main {
    position: relative;
    width: 721px;
    height: 455px;
    margin: 100px auto;
    overflow: hidden;
}

.main ul {
    position: absolute;
    left: 0;
    top: 0;
    width: 4000px;
}

.main ul li {
    float: left;
}

.main ul li img {
    width: 721px;
    height: 455px;
}

.main .left {
    position: absolute;
    display: none;
    left: 0;
    top: 50%;
    margin-top: -15px;
    width: 20px;
    height: 30px;
    background-color: rgba(0, 0, 0, 0.3);
    color: #fff;
    text-align: center;
    line-height: 30px;
    font-size: 18px;
    z-index: 2;
}

.main .right {
    position: absolute;
    display: none;
    right: 0;
    top: 50%;
    margin-top: -15px;
    width: 20px;
    height: 30px;
    background-color: rgba(0, 0, 0, 0.3);
    color: #fff;
    text-align: center;
    line-height: 30px;
    font-size: 18px;
    z-index: 2;
}

.main a {
    text-decoration: none;
}

.main .current {
    background-color: #fff;
}

.main ol {
    position: absolute;
    left: 50px;
    bottom: 50px;
}

.main ol li {
    float: left;
    width: 15px;
    height: 15px;
    border-radius: 50%;
    border: 1px solid #fff;
    margin: 0 5px;
}

页面缩小效果;第一张后面的图片隐藏后效果

 然后开始写JavaScript

写定时器函数后面我们要调用

function animate(obj, target, callback) {
    // console.log(callback);  callback = function() {}  调用的时候 callback()

    // 先清除以前的定时器,只保留当前的一个定时器执行
    clearInterval(obj.timer);
    obj.timer = setInterval(function() {
        // 步长值写到定时器的里面
        // 把我们步长值改为整数 不要出现小数的问题
        // var step = Math.ceil((target - obj.offsetLeft) / 10);
        var step = (target - obj.offsetLeft) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        if (obj.offsetLeft == target) {
            // 停止动画 本质是停止定时器
            clearInterval(obj.timer);
            // 回调函数写到定时器结束里面
            // if (callback) {
            //     // 调用函数
            //     callback();
            // }
            callback && callback();
        }
        // 把每次加1 这个步长值改为一个慢慢变小的值  步长公式:(目标值 - 现在的位置) / 10
        obj.style.left = obj.offsetLeft + step + 'px';

    }, 15);
}

功能实现js代码:

 // 1. 获取元素
    var left = document.querySelector('.left');
    var right = document.querySelector('.right');
    var main = document.querySelector('.main');
    var mainWidth = main.offsetWidth;
    // 2. 鼠标经过focus 就显示隐藏左右按钮
    main.addEventListener('mouseenter', function() {
        left.style.display = 'block';
        right.style.display = 'block';
        clearInterval(timer);
        timer = null; // 清除定时器变量
    })
    main.addEventListener('mouseleave', function() {
            left.style.display = 'none';
            right.style.display = 'none';
            timer = setInterval(function() {
                //手动调用点击事件
                right.click();
            }, 2000);

        })
        // 3. 动态生成小圆圈  有几张图片,我就生成几个小圆圈
    var ul = main.querySelector('ul');
    var ol = main.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 * mainWidth);

        })

    }
    // 把ol里面的第一个小li设置类名为 current
    ol.children[0].className = 'current';
    // 6. 克隆第一张图片(li)放到ul 最后面
    var first = ul.children[0].cloneNode(true);
    ul.appendChild(first);
    // 7. 点击右侧按钮, 图片滚动一张
    var num = 0;
    // circle 控制小圆圈的播放
    var circle = 0;
    //flag 节流阀
    var flag = true;
    right.addEventListener('click', function() {
            if (flag) {
                flag = false; // 关闭节流阀
                // 如果走到了最后复制的一张图片,此时 我们的ul 要快速复原 left 改为 0
                if (num == ul.children.length - 1) {
                    ul.style.left = 0;
                    num = 0;
                }
                num++;
                animate(ul, -num * mainWidth, function() {
                    flag = true; // 打开节流阀
                });
                // 8. 点击右侧按钮,小圆圈跟随一起变化 可以再声明一个变量控制小圆圈的播放
                circle++;
                // 如果circle == 4 说明走到最后我们克隆的这张图片了 我们就复原
                if (circle == ol.children.length) {
                    circle = 0;
                }

                for (var i = 0; i < ol.children.length; i++) {
                    ol.children[i].className = '';
                }
                // 留下当前的小圆圈的current类名
                ol.children[circle].className = 'current';
            }
        })
        // 9. 左侧按钮做法
    left.addEventListener('click', function() {
            if (flag) {
                flag = false;
                if (num == 0) {
                    num = ul.children.length - 1;
                    ul.style.left = -num * mainWidth + 'px';

                }
                num--;
                animate(ul, -num * mainWidth, function() {
                    flag = true;
                });
                // 点击左侧按钮,小圆圈跟随一起变化 可以再声明一个变量控制小圆圈的播放
                circle--;
                // 如果circle < 0  说明第一张图片,则小圆圈要改为第4个小圆圈(3)
                if (circle < 0) {
                    circle = ol.children.length - 1;
                }
                // 先清除其余小圆圈的current类名
                for (var i = 0; i < ol.children.length; i++) {
                    ol.children[i].className = '';
                }
                // 留下当前的小圆圈的current类名
                ol.children[circle].className = 'current';
            }
        })
        // 10. 自动播放轮播图
    var timer = setInterval(function() {
        right.click();
    }, 2000);

最终效果, 视频转GIF模糊了:

 

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 好的,我可以回答这个问题。要实现一个轮播图,可以使用HTMLCSSJavaScript。首先,需要在HTML中创建一个包含图片的容器,然后使用CSS设置容器的样式,如宽度、高度、边框等。接着,使用JavaScript轮播图的逻辑,可以使用定时器来控制图片的切换,也可以使用按钮来手动切换图片。最后,将HTMLCSSJavaScript代码整合在一起,就可以实现一个简单的轮播图了。 ### 回答2: 轮播图是一种常见的网页设计元素,可以在网页上展示多张图片或内容,并通过自动切换或手动操作切换不同的图片或内容。下面是使用HTMLCSSJavaScript一个简单的轮播图的示例。 首先,我们需要在HTML中创建一个容器元素来显示轮播图,可以使用一个div元素,给它一个唯一的id属性: ``` <div id="carousel"></div> ``` 接下来,我们使用CSS来定义轮播图的样式。可以设置图片或内容的大小、背景图片、边框等样式: ```css #carousel { width: 500px; height: 300px; border: 1px solid #ddd; background-image: url('image1.jpg'); background-size: cover; background-position: center; } ``` 在JavaScript中,我们将编代码来切换轮播图的内容。可以使用一个数组来存储要展示的图片或内容,然后使用定时器或交互事件来自动或手动切换到下一张图片或内容: ```javascript var carouselElement = document.getElementById('carousel'); var images = ['image1.jpg', 'image2.jpg', 'image3.jpg']; var index = 0; function changeImage() { carouselElement.style.backgroundImage = `url(${images[index]})`; index++; if (index === images.length) { index = 0; } } setInterval(changeImage, 3000); ``` 以上代码会使轮播图每3秒钟切换到下一张图片。你可以根据需要修改代码,例如增加左右切换按钮、添加过渡效果或其他自定义样式。 最后,可以通过在HTML文档中引用CSS文件和JavaScript文件来加载轮播图样式和逻辑: ```html <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="styles.css"> </head> <body> <div id="carousel"></div> <script src="script.js"></script> </body> </html> ``` 通过以上的HTMLCSSJavaScript代码,我们成功地使用这三种技术编一个简单的轮播图,实现了图片的自动切换效果。当然,你可以根据需求进行更多的定制和扩展。 ### 回答3: 轮播图是一种常见的网页设计元素,通过展示多张图片或内容,实现信息的轮流展示和切换。我们可以使用HTMLCSSJavaScript来创建一个简单的轮播图。 首先,我们需要在HTML中设置轮播图的基本结构。我们可以使用一个div元素作为轮播图的容器,包含一个具有"id"属性的div作为图片容器,和两个按钮用于切换上一张和下一张图片。 ```html <div id="carousel-container"> <div id="image-container"> <img src="image1.jpg" alt="Image 1"> <img src="image2.jpg" alt="Image 2"> <img src="image3.jpg" alt="Image 3"> </div> <button id="previous-button">上一张</button> <button id="next-button">下一张</button> </div> ``` 接下来,我们使用CSS样式来设置轮播图的外观。我们可以给容器设置适当的宽度和高度,并使用相对定位(relative)来控制图片容器的位置,使得图片在容器中依次排列。 ```css #carousel-container { width: 500px; height: 300px; position: relative; } #image-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } img { width: 100%; height: 100%; object-fit: cover; } button { position: absolute; top: 50%; transform: translateY(-50%); } ``` 最后,我们使用JavaScript来实现轮播图功能。我们可以使用一个计数器来追踪当前显示的图片。当点击上一张或下一张按钮时,我们改变计数器的值,并根据计数器的值来显示相应的图片。 ```javascript var images = document.getElementById("image-container").getElementsByTagName("img"); var currentIndex = 0; document.getElementById("previous-button").addEventListener("click", function() { currentIndex = (currentIndex - 1 + images.length) % images.length; showImage(); }); document.getElementById("next-button").addEventListener("click", function() { currentIndex = (currentIndex + 1) % images.length; showImage(); }); function showImage() { for (var i = 0; i < images.length; i++) { if (i === currentIndex) { images[i].style.display = "block"; } else { images[i].style.display = "none"; } } } showImage(); ``` 上述代码中,我们首先获取所有的图片元素和两个按钮的引用。然后,我们为两个按钮添加点击事件监听器,并在事件处理函数中更新计数器的值,然后调用showImage()函数来显示相应的图片。 总之,通过HTMLCSSJavaScript的结合,我们可以创建一个简单的轮播图。当点击上一张或下一张按钮时,图片将进行切换显示,使得用户可以浏览多张图片。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我该早点睡的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值