移动端轮播图

<script>
    window.onload = function () {
        var wrap = document.querySelector('.wrap'); // 最外层的盒子
        var clientW = wrap.clientWidth; // 一张图片的宽度

        var list = wrap.querySelector('.list'); // list
        list.innerHTML += list.innerHTML; // 所有的子元素复制一份,做无缝轮播

        var span = wrap.querySelectorAll('.page span'); // 分页按钮
        var len = span.length * 2; // 图的个数,包含复制的图
        list.style.width = clientW * len + 'px'; // 给ul设置宽度

        var disX = 0; // 按下时,手指到可视区左边的距离
        var listLeft = 0; // 按下时,list的left值


        // 手指按下
        // 1、取得手指到可视区左边的距离,取得list的left值
        // 2、判断当前按下的是第几张图,如果第一张图,拉到下标为3的这张图。如果为最后一张,拉到下标为2的这张图
        list.addEventListener('touchstart', function (ev) {
            list.style.transition = 'none'; // 按下时,清除运动
            var e = ev.changedTouches[0]; // 手指的事件对象
            disX = e.pageX;
            listLeft = list.offsetLeft;

            var count = listLeft / clientW; // 返回的是0或者一个负数
            if (count === 0) {
                // 在第一张图按下
                count = span.length;
                list.style.left = -count * clientW + 'px';
                listLeft = list.offsetLeft;
            }
            if (-count === len - 1) {
                // 在最后一张图按下 瞬间回到第二张图
                count = span.length - 1;
                list.style.left = -count * clientW + 'px';
                listLeft = list.offsetLeft;
            }
        });

        // 手指移动
        list.addEventListener('touchmove', function (ev) {
            var e = ev.changedTouches[0]; // 手指的事件对象
            list.style.left = e.pageX - disX + listLeft + 'px';
        });

        // 手指抬起
        list.addEventListener('touchend', function () {
            var num = Math.round(list.offsetLeft / clientW); // 如果移动的超过一半,就到下一张,否则还在当前张
            // console.log(num);
            list.style.transition = 'all 0.4s';
            list.style.left = num * clientW + 'px';

            for (var i = 0; i < span.length; i++) {
                span[i].className = '';
            }
            span[-num % span.length].className = 'active';
        });
    }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值