美文网首页
用原生js生成轮播图

用原生js生成轮播图

作者: 光年之外iii | 来源:发表于2019-10-18 21:17 被阅读0次

轮播图有几大要点,点击左右的尖角号,可以进行图片的切换,点击圆点,可以获取圆点对应的图片,可以自动播放图片,鼠标悬停在轮播图上时,轮播图会停止,离开时,轮播图会自动开始继续轮播。
下面来讲述思路:
首先,获取一些静态集合,提前声明一些将会用到的参数。


因要多次用到排他型的问题,先封装一个排他思想的函数
图片.png
图片.png
点击next,即右尖角号时,图片的下标会进行+1,而且在当循环到最后一张图片时,返回第一张图片,
调用排他思想的函数,会保留当前点击的图片,将其他图片和导航按钮的属性都隐藏。
图片.png
同理,调用prev,即左尖角号的按钮时,下标-1,递减到第一张时,会返回最后一张。调用排他函数
图片.png
设置一个间隔为0.5s的计时器,使图片可以进行自动轮播,自加方式和切换和右尖角号的方法相同
图片.png
设置一个鼠标事件mouseover,当鼠标移入时,定时器会停止,图片会停止轮播,停留在当前循环到的图片下标。
图片.png
鼠标移出时,会继续计时器,开始自动轮播
图片.png
为了导航点击时,能够使图片下标与导航点击的下标保持一致,必须设定index=this.ind,避免出现导航点击停止时,图片的轮播未停止的情况。

完整代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            list-style: none;
        }

        div {
            width: 700px;
            height: 550px;
            border: 2px solid red;
            margin: 0 auto;
            position: relative;
        }

        div ul li,
        div ul li img {
            width: 100%;
            height: 550px;
        }

        div ul li {
            display: none;
        }

        .active {
            display: block;
        }

        span {
            position: absolute;
            width: 80px;
            height: 120px;
            top: 50%;
            margin-top: -60px;
            background: rgba(23, 44, 33, 0.5);
            font-size: 30px;
            line-height: 120px;
            text-align: center;
            color: #fff;
        }

        span:nth-of-type(2) {
            right: 0px;
        }

        ol {
            position: absolute;
            bottom: 20px;
            left: 200px;
        }

        ol li {
            float: left;
            width: 40px;
            height: 40px;
            background: #fff;
            color: #f23;
            font-size: 30px;
            text-align: center;
            line-height: 40px;
            border-radius: 50%;
            margin: 0px 20px 20px 0;
        }

        ol .active {
            background: blue;
        }
    </style>
</head>

<body>
    <div>
        <ul>
            <li class="active"><img src="1.jpeg" alt=""></li>
            <li><img src="2.jpeg" alt=""></li>
            <li><img src="3.jpeg" alt=""></li>
            <li><img src="4.jpeg" alt=""></li>
            <li><img src="5.jpeg" alt=""></li>
            <li><img src="6.jpeg" alt=""></li>
        </ul>
        <ol>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
        </ol>
        <span id='prev'>&lt;</span>
        <span id='next'>&gt;</span>
    </div>

</body>
<script>
    window.onload = function () {
        var imgs = document.querySelectorAll('ul li');
        var ol_lis = document.querySelectorAll('ol li');
        var prev = document.querySelector('#prev');
        var next = document.querySelector('#next');
        var div = document.querySelector('div');
        var index = 0,
            timer = null;
        //封装一个排他型的函数
        function getOthers(index) {
            for (var i = 0; i < imgs.length; i++) {
                imgs[i].classList.remove('active');
                ol_lis[i].classList.remove('active')
            }
            imgs[index].classList.add('active');
            ol_lis[index].classList.add('active')
        }
        next.onclick = () => {
            //点击就要往后,所以每点击一次下标+1
            index++
            if (index > imgs.length - 1) {
                //当下标大于最大值时,返回0
                index = 0;
            }
            //调用排他型函数
            getOthers(index)
        }
        timer = setInterval(() => {
            //设置一个时间,可以自己递加
            index++
            if (index > imgs.length - 1) {
                index = 0;
            }
            getOthers(index)
        }, 500)
        div.onmouseover = () => {
            //设置一个点击事件,当鼠标滑过时,终止计时器,并清空
            clearInterval(timer);
            timer = null;
        }
        div.onmouseout = () => {
            //滑出时,立即恢复计时器
            timer = setInterval(() => {
                index++
                if (index > imgs.length - 1) {
                    index = 0;
                }
                getOthers(index)
            }, 500)
        }
        prev.onclick = () => {
            //点击左尖角号时,图片的下标递减
            index--
            if (index < 0) {
                index = imgs.length - 1;
            }
           getOthers(index)
        }
        for (var i = 0; i < ol_lis.length; i++) {
            ol_lis[i].ind = i;
            //先遍历ol中的每个下标,再将选中的下标的值绑定一个点击事件
            ol_lis[i].onclick =function (){ 
                index=this.ind  
                //为了保持ol中的下标和图片中的下标保持一致,进行排他  
                getOthers(this.ind)
            }   
        }
      
    }
</script>

</html>

相关文章

  • JavaScript | 365笔记第87天 | 原生JS做轮播

    用原生JS做一个轮播图

  • 用原生js生成轮播图

    轮播图有几大要点,点击左右的尖角号,可以进行图片的切换,点击圆点,可以获取圆点对应的图片,可以自动播放图片,鼠标悬...

  • 用js原生实现轮播图

    用jquery实现轮播图非常简单的啦!有没有想过用原生js实现轮播图呢???今天琢磨了一下,摸索出来一个,就和大家...

  • 原生js制作轮播图

    原生js 制作的轮播图 今天学习了一个原生js轮播图的方法。效果图如下 通过点击上下页和中间的点进行翻页,通过改变...

  • 原生JS实现轮播图

    实习刚结束,由于实习期间一直用的React框架,原生js都有些生疏了,所以用原生js写了个简单的轮播图练练手。 方...

  • 轮播图(2)——基于JQ的左右滑动轮播

    上回书我们说到原生js淡入淡出效果的轮播图,这回我们说说左右滑动轮播图,由于需要缓动动画效果,原生js需要封装缓动...

  • 项目-轮播图

    整个轮播图分为三部分:轮播指标、轮播项目及轮播导航。用boostrap实现轮播图要比用js、jQuery方便的多,...

  • JS原生轮播图

    1.首先写好轮播图的HTML页面结构; 2.输写CSS的样式 看起来好乱,为了方便展示CSS部分的代码,只能这样编...

  • 原生js轮播图

    1、静态页面,布局结构 2、css样式可以根据自己的喜好进行改动,本样式只供参考 3、原生js代码代码中含有些注释...

  • 原生JS轮播图

网友评论

      本文标题:用原生js生成轮播图

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