求解!写了个轮播图,在谷歌浏览器和火狐浏览器100%缩放的时候,轮播图点击小圆点正常切换,但是在谷歌浏览器缩放小于100%的时候,轮播图切换到不了正确的位置?

求解!写了个轮播图,在谷歌浏览器和火狐浏览器100%缩放的时候,轮播图点击小圆点正常切换,但是在谷歌浏览器缩放小于100%的时候,轮播图切换到不了正确的位置?

求解!写了个轮播图,在谷歌浏览器和火狐浏览器100%缩放的时候,轮播图点击小圆点正常切换,但是在谷歌浏览器缩放小于100%的时候,轮播图切换到不了正确的位置?

求解!写了个轮播图,在谷歌浏览器和火狐浏览器100%缩放的时候,轮播图点击小圆点正常切换,但是在谷歌浏览器缩放小于100%的时候,轮播图切换到不了正确的位置?

求解!写了个轮播图,在谷歌浏览器和火狐浏览器100%缩放的时候,轮播图点击小圆点正常切换,但是在谷歌浏览器缩放小于100%的时候,轮播图切换到不了正确的位置?

<!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>
    <script src="./js/animate.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        a {
            text-decoration: none;
        }

        ol {
            list-style: none;
        }

        /* 轮播容器 */
        .focus {
            position: relative;
            margin: 200px auto;
            width: 720px;
            height: 455px;
            background-color: purple;
            overflow: hidden;
        }

        /* 核心轮播主体 */
        .focus ul {
            /* display: none; */
            width: 600%;
            position: absolute;
            top: 0;
            left: 0;
        }

        .focus ul li {
            float: left;
        }

        .focus ul li a img {
            width: 720px;
            height: 455px;
            vertical-align: middle;
        }

        /* 左右按钮 */
        .arrow-l,
        .arrow-r {
            display: none;
            position: absolute;
            margin-top: -20px;
            top: 50%;
            width: 24px;
            height: 40px;
            background-color: rgba(0, 0, 0, .3);
            text-align: center;
            line-height: 40px;
            color: #fff;
            font-size: 18px;
            z-index: 2;
        }

        .arrow-r:hover,
        .arrow-l:hover {
            color: red;
        }

        .arrow-r {
            right: 0;
        }

        /* 小圆圆 */
        .circle {
            position: absolute;
            bottom: 10px;
            left: 50px;
        }

        .circle li {
            float: left;
            width: 8px;
            height: 8px;
            border-radius: 50%;
            border: 2px solid rgba(255, 255, 255, 0.5);
            margin: 0 3px;
            cursor: pointer;
        }

        /* 选中 */
        .current {
            background-color: white;
        }
    </style>
</head>

<body>
    <div class="focus">
        <!-- 左侧按钮 -->
        <a href="javascript:;" class="arrow-l">&lt;</a>
        <!-- 右侧按钮 -->
        <a href="javascript:;" class="arrow-r"> &gt;</a>
        <!-- 核心滚动区域 -->
        <ul>
            <li>
                <a href="#">
                    <img src="./img/focus.jpg" alt="">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="./img/focus1.jpg" alt="">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="./img/focus2.jpg" alt="">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="./img/focus3.jpg" alt="">
                </a>
            </li>
        </ul>
        <!-- 小圆圆 -->
        <ol class="circle">

        </ol>
    </div>
    <script>
        window.addEventListener('load', function () {
            // 1.获取元素
            var arrow_l = document.querySelector('.arrow-l');
            var arrow_r = document.querySelector('.arrow-r');
            var focus = document.querySelector('.focus');

            // 2.按钮切换显示与隐藏
            focus.addEventListener('mouseenter', function () {
                arrow_l.style.display = 'block';
                arrow_r.style.display = 'block';
            })
            focus.addEventListener('mouseleave', function () {
                arrow_l.style.display = 'none';
                arrow_r.style.display = 'none';
            })

            // 3. 动态生成小圆圈 有几张图片 ,就生成几个小圆圈
            var ul = focus.querySelector('ul');
            var ol = focus.querySelector('ol')
            for (var i = 0; i < ul.children.length; i++) {
                // 创建一个小li
                var li = document.createElement('li');
                // 记录当前小圆圈的索引号 通过自定义属性来做 
                li.setAttribute('data-index',i)
                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('data-index');
                    var focusWidth = focus.offsetWidth;
                    console.log(focusWidth);
                    console.log(index);
                    animate(ul,-index*focusWidth)
                })
            }
            // 把ol里面的第一个小li设置类名为 current
            ol.children[0].className = 'current'
        })
    </script>
</body>

</html>
function animate(obj, target, callback) {
    // console.log(callback);
    // 当我们不断点击按钮,这个元素的速度会越来越快,因为开启了太多定时器
    clearInterval(obj.timer)
    obj.timer = setInterval(() => { //给不同的元素指定了不同的定时器
        //步长值写到定时器的里面
        // 把步长值改为整数 ,不要出现小数的问题
        // 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();
        } else {
            // 把每次加 1 这个步长值改为一个慢慢变小的值 步长公式:(目标值 - 现在的位置) / 10
            obj.style.left = step + obj.offsetLeft  + 'px';
            // console.log(obj.style.left);
            // console.log(step);
            console.log(obj.offsetLeft);

        }

    }, 15);
}

大神们图片没有的话可以先用在线自动生成的 https://picsum.photos/720/455?random=1

上一篇:python数据结构与算法——栈、队列与双端队列


下一篇:技术 | python中的range( )函数详解