javascript - 自己用jq写的图片轮播有个小bug自己没思路改了,大神看下给点思路

 空白画叶子 发布于 2022-11-09 08:45

这个问题感觉描述不出来啊,就是在倒数第二张图片时双击按钮后,图片切换时会有卡一下,不仔细看看不出来,分析原因是我代码里面写的当达到临界值时left值归0导致的,但是这个又必须得写,所以没有思路了,请大神帮看下吧点击查看代码效果

## 标题文字 ##


    
    Title
   

    


[/code]
1 个回答
  • 双击……因为你后面只缓冲了一张图片,双击要切换两张,所以就有可能出问题

    有两个办法

    一个是禁止双击,在动画中判断一个动画没结束的时候禁止执行下一次动画。相应的你所有点击操作都要去进行检查,如果动画没执行成功就不能去改变序号。

    第二个办法就是加两个图片缓冲,动画顺序执行,执行完之后再设置 left 到第1张或第2张图(你现在好像是执行前改的 left)

    处理了一下向右的情况

    只处理了向右,没处理向左,向左只是要改下计算

    $(".right").click(function() {
        v++;
        console.log(v);
        // if (v > 6) {
        //     $(".inner").css({
        //         left: "0px"
        //     });
        //     v = 1;
        // }
        animate(v * -750);
    });
    var WIDTH = 750;
    var COUNT = 6;
    var TOTAL = 750 * 6;
    var TIME = 500;
    
    function animate(offset) {
        // 只考虑了右移出界的情况,左移出界类似
    
        var inner = $(".inner");
        var left = inner.position().left;
    
        // 如果偏移未到底,正常执行动画
        if (offset >= -TOTAL) {
            inner.stop().animate({
                left: offset + "px"
            }, TIME);
            return;
        }
    
        // 下面是偏到底并过头的情况
    
        // 先算出来到底剩余多少量
        var rest = left + TOTAL;
        // 以及到底之后还需要偏移多少量
        var more = -offset - TOTAL;
    
        // 根据上面的比较把 TIME 分成两个部分
        var t1 = ~~(TIME * rest / (rest + more));
        var t2 = TIME - t1;
        console.log(rest, more, t1, t2);
    
        // 执行第一个动画,把剩余未移动完的部分移动完
        inner.stop().animate({
            left: -TOTAL + "px"
        }, t1, function() {
            // 第一个动画完成之后会调用这个回调
            // 这个时候先重置 inner 位置
            v = 1;
            inner.css("left", "0px")
                // 再执行另一个动画完成剩下需要偏移的部分
                .animate({
                    left: -more + "px"
                }, t2);
        });
    }
    2022-11-12 01:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有