码迷,mamicode.com
首页 > Web开发 > 详细

js实现固定大小轮播图

时间:2020-11-04 17:32:42      阅读:31      评论:0      收藏:0      [点我收藏+]

标签:click   initial   items   text   mouseover   效果图   auto   back   tin   

效果图:

技术图片

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .swipterWrap {
            width: 600px;
            height: 330px;
            margin: 100px auto;
          
            overflow: hidden;
            position: relative;
            box-sizing: border-box;
        }

        .swipter {
            width: 600px;
            height: 300px;
            overflow: hidden;
            border: 2px solid #0099cc;
            position: relative;
            box-sizing: border-box;
        }

        ul {
            transition: all .8s;
            width: 3000px;
        }

        ul>li {
            list-style: none;
            float: left;
            width: 600px;

        }

        ul>li img {
            width: 100%;
            height: 300px;
            display: inline-block;
        }

        .dots {
            width: 250px;
            height: 30px;
            left: 0;
            right: 0;
            margin: auto;
            display: flex;
            justify-content: center;
            align-items: center;
            position: absolute;
            bottom: 0;
        }

        .dots span {
            display: inline-block;
            width: 15px;
            height: 15px;
            border-radius: 50%;
            margin: 0px 10px;
            background-color: #0099cc;
            cursor: pointer;
        }

        .active {
            background-color: aliceblue !important;

        }

        .arrow {
            position: absolute;
            margin: auto;
            width: 100%;
            height: 50px;
            top: 0;
            bottom: 0;
            box-sizing: border-box;
        }

        .arrow div {
            width: 30px;
            height: 50px;
            background-color: #07a34e;
            text-align: center;
            font-size: 28px;
            color: #ffffff;
        }

        .arrow .left-arrow {
            float: left;
        }

        .arrow .right-arrow {
            float: right;
        }

        .arrow div span {
            display: inline-block;
            line-height: 50px;
            cursor: pointer;
        }
        .txt{
            text-align: center;
            font-size: 20px;
            color: #1e75d9;
            cursor: pointer;
        }
    </style>
</head>

<body>
    <div class="swipterWrap">
        <div class="swipter">
            <ul class="imgList">
                <li>
                    <img src="https://cdn.pinduoduo.com/home/static/img/subject/girlclothes.jpg" alt="图片1">
                </li>
                <li>
                    <img src="https://cdn.pinduoduo.com/home/static/img/subject/boyshirt.jpg" alt="图片2">
                </li>
                <li>
                    <img src="https://cdn.pinduoduo.com/home/static/img/subject/medical.jpg" alt="图片3">
                </li>
                <li>
                    <img src="https://cdn.pinduoduo.com/home/static/img/subject/food.jpg" alt="图片4">
                </li>
                <li>
                    <img src="https://cdn.pinduoduo.com/home/static/img/subject/shoes.jpg" alt="图片5">
                </li>
            </ul>
            <!-- 左右箭头 -->
            <div class="arrow">
                <div class="left-arrow"><span>  &lt; </span>
                </div>

                <div class="right-arrow"><span> &gt; </span></div>
            </div>

            <!-- 底部圆点 -->
            <div class="dots">
                <span class="active"></span>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </div>
        </div>
        <div class="txt">第1张图片</div>
    </div>
    <script>
        (function () {
            //获取要操作的dome 节点
            let ul = document.getElementsByClassName(imgList)[0];
            let liList = ul.getElementsByTagName("li");
            // let liList = document.getElementsByTagName(‘li‘)
            let dots = document.getElementsByClassName(dots)[0].getElementsByTagName(span)
            let arrowLeft = document.getElementsByClassName(left-arrow)[0]
            let arrowRight = document.getElementsByClassName(right-arrow)[0]
            let swipterBox = document.getElementsByClassName(swipter)[0]
            let txt = document.getElementsByClassName(txt)[0]
            //定义一个索引值 记录 当前是第几张图片  默认为0 第一张
            let indexActive = 0;
            // 每次移动的距离
            let move = `transform:translateX(0px)`
            //es6 新增 数组语法 将伪数组 转换为数组  
            dots = Array.from(dots)
            //底部圆点点击
            dots.forEach((value, index) => {
                value.onclick = function () {
                    //赋值索引
                    indexActive = index
                    //执行轮播方法
                    swipterMoveFn()
                }
            })

            // 右箭头点击
            arrowRight.onclick = () => {
                indexActive += 1
                //判断是否是最后一张图片
                if (indexActive >= liList.length) {
                    indexActive = 0
                }
                //执行轮播方法
                swipterMoveFn()

            }
            //左箭头点击
            arrowLeft.onclick = () => {
                indexActive -= 1
                //判断是否是第一张图片
                if (indexActive < 0) {
                    indexActive = liList.length - 1
                }
                //执行轮播方法
                swipterMoveFn()
            }

            //负责执行轮播的方法
            function swipterMoveFn() {
                //每一次点击 清楚所有 dots 的 class
                dots.forEach(value => {
                    value.className =  
                })
                txt.innerHTML = `第${indexActive+1}张图片`
                dots[indexActive].className = "active"
                //添加移动 move 距离 当前索引 * 当前元素宽度 = 移动的距离
                move = `transform:translateX(${indexActive * -600}px)`
                //给ul 添加 style
                ul.style = move
            }

            // 自动轮播  设置没 1.5秒执行一次
            let timing = setInterval(swipterTiming, 1500)
            //自动轮播方法
            function swipterTiming() {
                indexActive += 1
                //判断是否是最后一张图片
                if (indexActive >= liList.length - 1) {
                    indexActive = 0
                }
                //调用 轮播图方法
                swipterMoveFn()
            }

            //鼠标移入时 清除定时器
            swipterBox.onmouseover = () => {
                clearInterval(timing)
            }
            //鼠标移出 设置定时器
            swipterBox.onmouseleave = () => {
                timing = setInterval(swipterTiming, 1500)
            }
        })()
    </script>
</body>
</html>

备注:如果要修改轮播图的大小,只需要修改下面几个值即可。

技术图片

 

 技术图片

 

js实现固定大小轮播图

标签:click   initial   items   text   mouseover   效果图   auto   back   tin   

原文地址:https://www.cnblogs.com/hellocd/p/13917979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!