jquery css方法在经常调用时放置错误的值

jquery css方法在经常调用时放置错误的值,jquery,carousel,Jquery,Carousel,我正在尝试创建自己的jquery图像旋转木马,以便让自己更加熟悉它 你可以找到这个例子 旋转木马的工作原理是向右滑动,将最后一个放在第一个之前,然后向后滑动以隐藏最后一个 问题是,如果有人垃圾邮件发送下一个/上一个按钮,整个旋转木马就会向右移动。例如,如果每秒使用一次上一个/下一个按钮,或者我将其设置为由jquery以快速间隔(500)单击,则不会发生某些事情 守则的有关部分包括: function initUl(){ var li_width = $('.upper li').oute

我正在尝试创建自己的jquery图像旋转木马,以便让自己更加熟悉它

你可以找到这个例子

旋转木马的工作原理是向右滑动,将最后一个
  • 放在第一个
  • 之前,然后向后滑动以隐藏最后一个
  • 问题是,如果有人垃圾邮件发送下一个/上一个按钮,整个旋转木马就会向右移动。例如,如果每秒使用一次上一个/下一个按钮,或者我将其设置为由jquery以快速间隔(500)单击,则不会发生某些事情

    守则的有关部分包括:

    function initUl(){
        var li_width = $('.upper li').outerWidth();
        var upper_width=$('.upper').outerWidth();
        var lower_width=$('.lower').outerWidth();
        var upper_pos = $('.upper').position();
        var lower_pos = $('.lower').position();
    
        lastBeforeFirst();
    
        $('.upper').css({'left': upper_pos.left + (-1*li_width)});
        $('.lower').css({'left': lower_pos.left + (-1*li_width)});
        $('.upper').css({'width': upper_width + li_width});
        $('.lower').css({'width': lower_width + li_width});
       }
    
    function moveBothRight(){
        var speed = 200;
        var li_width = $('.upper li').outerWidth();
        var upper_pos = $('.upper').position();
        var lower_pos = $('.lower').position();
    
        $('.upper').animate({'left' :upper_pos.left + li_width}, speed,fixUpperPosR);
        $('.lower').animate({'left' :lower_pos.left + li_width}, speed,fixLowerPosR);   
       }
    
       function fixUpperPosR(){
        var li_width = $('.upper li').outerWidth();
        var upper_pos = $('.upper').position();
    
        $('.upper').css({'left': upper_pos.left - li_width});
        }
    
        function fixLowerPosR(){
        lastBeforeFirst();
        var li_width = $('.upper li').outerWidth();
        var lower_pos = $('.lower').position();
    
        $('.lower').css({'left': lower_pos.left - li_width});
         }
         function lastBeforeFirst(){
    
    var first = $('.upper ul li:first');
    var last = $('.upper ul li:last');
    
    $(first).before($(last));
    
    first = $('.lower ul li:first');
    last = $('.lower ul li:last');
    $(first).before($(last));
         }
    
    这段代码负责将所有内容向右移动,并在下一次单击时调用它左侧的唯一区别是

    $('.lower').css({'left': lower_pos.left + li_width});
    
    第一个在最后一个之前();召唤


    这是一个浏览器的东西(它不能很快更新css),因此我应该限制一个人可以按按钮的频率,或者我遗漏了什么?

    问题是因为动画是异步运行的

    每当单击按钮时,您需要查看当前动画并跳到结束

    例如:

    $('.upper').stop(true, true).animate(...); 
    

    这将导致当前动画立即完成,并根据需要更新css。

    您能提供JSFIDLE吗?你在
    .animate()
    之前试过调用
    .stop()
    吗?没有,现在效果很好:谢谢