javascript - 自己用jq写的图片轮播有个小bug自己没思路改了,大神看下给点思路
高洛峰
高洛峰 2017-04-11 12:53:34
[JavaScript讨论组]

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

## 标题文字 ##


    
    Title
   

    


[/code]
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(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);
    });
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号