2011-12-29 43 views
4

後,如果我離開這個滑塊,它開始滑動像瘋了似的在網站上一段時間。如何測試這個錯誤?打開bellated.com/vyrai(測試頁面)。你可以看到大張照片。離開它一分鐘。或兩個瀏覽其他browsre標籤,當你回到這個網站,你會看到滑塊的錯誤。任何想法如何解決這一問題?的Javascript滑塊滑動想瘋了一段時間

我使用這個腳本:

 <script type="text/javascript"> 
      $(document).ready(function() { 

     var currentPosition = 0; 
     var slideWidth = 673; 
     var slides = $('.slide'); 
     var numberOfSlides = slides.length; 
     var slideShowInterval; 
     var speed = 6000; 

     //Assign a timer, so it will run periodically 
     slideShowInterval = setInterval(changePosition, speed); 

     slides.wrapAll('<div id="slidesHolder"></div>') 

     slides.css({ 'float' : 'left' }); 

     //set #slidesHolder width equal to the total width of all the slides 
     $('#slidesHolder').css('width', slideWidth * numberOfSlides); 


     manageNav(currentPosition); 

     //tell the buttons what to do when clicked 
     $('.nav').bind('click', function() { 

      //determine new position 
      currentPosition = ($(this).attr('id')=='rightNav') 
      ? currentPosition+1 : currentPosition-1; 

      //hide/show controls 
      manageNav(currentPosition); 
      clearInterval(slideShowInterval); 
      slideShowInterval = setInterval(changePosition, speed); 
      moveSlide(); 
     }); 

     function manageNav(position) { 
      //hide left arrow if position is first slide 
      if(position==0){ $('#leftNav').hide() } 
      else { $('#leftNav').show() } 
      //hide right arrow is slide position is last slide 
      if(position==numberOfSlides-1){ $('#rightNav').hide() } 
      else { $('#rightNav').show() } 
     } 


     //changePosition: this is called when the slide is moved by the timer and NOT when the next or previous buttons are clicked 
     function changePosition() { 
      if(currentPosition == numberOfSlides - 1) { 
       currentPosition = 0; 
       manageNav(currentPosition); 
      } else { 
       currentPosition++; 
       manageNav(currentPosition); 
      } 
      moveSlide(); 
     } 


     //moveSlide: this function moves the slide 
     function moveSlide() { 
       $('#slidesHolder').animate({'marginLeft' : slideWidth*(-currentPosition)}); 
     } 

    }); 
</script> 

HTML實現樣本:

<div id="slideshow"> <div id="slideshowWindow"> 
    <div class="slide"><div class="slideText"> <h2 class="slideTitle">Pas mus kainos visada lanks&#269;ios!</h2> <p class="slideDes">"Tik pas mus &#303;sigykite savo nauj&#261;j&#261; vandens filtravimo sistem&#261; palankiausiomis kainomis".</p> <p class="slideLink"><a href="http://jayreillyportraits.com"></a></p> </div><!--/slideText--> </div><!--/slide--> 
    <div class="slide"><div class="slideText"> <h2 class="slideTitle">Naujas prekybos salonas</h2> <p class="slideDes">"Aplankykite mus naujai atsidariusiame prekybos salone &#352;ilal&#279;je S. Dariaus ir S. Gir&#279;no g. 24".</p> <p class="slideLink"><a href="http://jayreillyportraits.com"></a></p> </div><!--/slideText--> </div><!--/slide--> 
    <div class="slide"><div class="slideText"> <h2 class="slideTitle">Ie&#353;kote galimybi&#371; partneriaujant?</h2> <p class="slideDes">"Susisiekite su mumis ir mes aptarsime abiem pus&#279;ms palankias s&#261;lygas!".</p> <p class="slideLink"><a href="http://jayreillyportraits.com"></a></p> </div><!--/slideText--> </div><!--/slide--> 
    <div class="slide"><div class="slideText"> <h2 class="slideTitle">Turite klausim&#371;?</h2> <p class="slideDes">"Susisiekite su mumis ir m&#363;s&#371; specialistai pasistengs atsakyti &#303; kiekvien&#261; j&#363;s&#371; u&#382;klaus&#261;.".</p> <p class="slideLink"><a href="http://jayreillyportraits.com"></a></p> </div><!--/slideText--> </div><!--/slide--> 
    </div></div> 
+0

其工作正常...你能更具體的什麼是瘋狂的。 – 2011-12-29 08:38:05

+0

@RaghavBhushan你必須遵循他的指示並切換到另一個標籤,留下他的標籤在後臺運行。而且,您將不得不使用Firefox或基於WebKit的瀏覽器才能發生此行爲。 – Interrobang 2011-12-29 08:39:30

+0

他沒有聽衆失去wondow關注怎麼可能會改變標籤影響吧.. – 2011-12-29 08:42:18

回答

2

這個問題有多種原因都在一個完美風暴一起工作:

  • 您正在排隊在完全基於計時器的情況下創建新幻燈片時,您應該將它們排隊在前一張幻燈片的回調中imation,
  • 您正在使用支持requestAnimationFrame的瀏覽器,並且
  • 您正在使用jQuery 1.6.2,它包含對requestAnimationFrame的支持。

當您移動從滑塊在運行選項卡而去,與requestAnimationFrame支持瀏覽器將停止所有在該選項卡中運行的動畫。但是,定時器將繼續運行!當你回到頁面時,所有排隊的動畫會立即觸發,這會給你帶來失控的效果。

爲了解決這個問題,最簡單的解決辦法是升級到jQuery的1.7.1,因爲他們已經退出了支持requestAnimationFrame()由於不一致瀏覽器的支持。但是,他們最終會把它帶回來,所以你應該確實修復你的代碼。

要修復您的代碼,您應該只在上一張幻燈片的.animate()回調中排隊新的幻燈片動畫。這將確保您即使在動畫未運行時也不會盲目排隊。

讓我知道,如果你需要進一步澄清。 TL;博士:更改此:

<script src="js/jquery-1.6.1.min.js" type="text/javascript"></script> 

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script> 

要這樣:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> 

在這個問題上的錯誤的jQuery有更多的信息:http://bugs.jquery.com/ticket/9381

+0

謝謝,它的工作! – user1016695 2011-12-29 08:49:08