2013-02-25 197 views
0

我有一些問題讓我的動漫作品,並在隨機時間停在我的iPad.animate失敗隨機

,所以我有這個網站

<body> 


<div class="touchslider-prev sliderButtons" style="display: block;">back</div> 
<div class="touchslider-next sliderButtons" style="display: block;">next</div> 

<section id="mainContent" style="width: 950px; overflow:hidden"> 

    <div id="pageHolder" style="float: left; left: 0; position: relative; width: 6000px;"> 


     <div class="pageSize activeSlide" id="page1" style="width: 950px; float: left; position: relative; height:500px; background-color:#F00"> 

      blah 

     </div> 


      <div class="pageSize " id="page" style="width: 950px; float: left; position: relative; height:500px; background-color:#FF0"> 

      blah 2 

     </div>   


    </div> 


</section> 

</body> 

和這個JavaScript


<script type="text/javascript"> 

function clickHandlerPrev(event) { 

    // If event isn't already marked as handled, handle it 
    if(event.handled !== true) { 

     // Kill event handler, preventing any more clicks 
     jQuery(window).off("swipeBackward", clickHandlerPrev); 
    jQuery(window).off("swipeForward", clickHandlerNext); 

     // Do your stuff here 
     pageSize = jQuery(".mainHeader").width(); 
     slide("back", pageSize); 

     // Mark event as handled 
     event.handled = true; 
    } 

    return false; 
} 

function clickHandlerNext(event) { 

    // If event isn't already marked as handled, handle it 

    if(event.handled !== true) { 

     // Kill event handler, preventing any more clicks 
     jQuery(window).off("swipeBackward", clickHandlerPrev); 
    jQuery(window).off("swipeForward", clickHandlerNext); 

     // Do your stuff here 
     pageSize = jQuery(".mainHeader").width(); 
     slide("forward", pageSize); 

     // Mark event as handled 
     event.handled = true; 
    } 
    return false; 
} 



function slide(data, pageSize) { 


    if (!pageSize) { 
    pageSize = 950; 
    } 

    var left = calcLeft(data, pageSize); 




     jQuery('#pageHolder').animate({ 
      left: left 

      }, 400, function() { 
      console.log("animation started"); 
      jQuery(window).on("swipeBackward", clickHandlerPrev); 
    jQuery(window).on("swipeForward", clickHandlerNext); 
      console.log("animation complete"); 

     }); 



} 

function calcLeft(action, pageSize){ 

    var left; 
    var currentPos = currentPosition(); 


    if (action == "back") { 
console.log(pageSize); 

     if (currentPos == "0") { 
      left = -pageSize * 1; 
     } else { 

      left = currentPos + pageSize ; 

     } 

    } else if (action == "forward") { 


     if (currentPos == -pageSize * 1) { 
      left = 0; 
     } else {   
      left = currentPos - pageSize ; 

     } 

    } 

    return left; 

} 

function currentPosition() { 

    var currentPosition = parseInt(jQuery("#pageHolder").css("left"), 10); 
    return currentPosition; 
} 






jQuery(document).ready(function() { 

jQuery(".touchslider-prev").click(function() { 

    jQuery(window).trigger('swipeForward'); 

}); 

jQuery(".touchslider-next").click(function() { 

    jQuery(window).trigger('swipeBackward'); 

}); 


jQuery(window).on('swipeForward', clickHandlerNext); 
jQuery(window).on('swipeBackward', clickHandlerPrev); 


console.log("here"); 
var maxTime = 1000, 
    // allow movement if < 1000 ms (1 sec) 
    maxDistance = 50, 
    // swipe movement of 50 pixels triggers the swipe 
    target = jQuery('.pageSize'), 
    startX = 0, 
    startTime = 0, 
    touch = "ontouchend" in document, 
    startEvent = (touch) ? 'touchstart' : 'mousedown', 
    moveEvent = (touch) ? 'touchmove' : 'mousemove', 
    endEvent = (touch) ? 'touchend' : 'mouseup'; 

target.bind(startEvent, function(e) { 
    // prevent image drag (Firefox) 
    // e.preventDefault(); 
    startTime = e.timeStamp; 
    startX = e.originalEvent.touches ? e.originalEvent.touches[0].pageX : e.pageX; 
}).bind(endEvent, function(e) { 
    startTime = 0; 
    startX = 0; 
}).bind(moveEvent, function(e) { 
    // e.preventDefault(); 
    var currentX = e.originalEvent.touches ? e.originalEvent.touches[0].pageX : e.pageX, 
     currentDistance = (startX === 0) ? 0 : Math.abs(currentX - startX), 
     // allow if movement < 1 sec 
     currentTime = e.timeStamp; 
    if (startTime !== 0 && currentTime - startTime < maxTime && currentDistance > maxDistance) { 
     if (currentX < startX) { 
      // swipe left code here 

      console.log("page forward trigger"); 
      jQuery(window).trigger('swipeForward'); 

     } 
     if (currentX > startX) { 
      // swipe right code here 
      console.log("page back trigger"); 
      //slide("back", pageSize); 
      jQuery(window).trigger('swipeBackward'); 
     } 
     startTime = 0; 
     startX = 0; 
    } 
}); 


}); 


</script> 

如果你打開這個說ipad的想法是你可以滑動主色面板。這將工作有時,有時不,我真的很努力地找出爲什麼

任何人都可以幫忙嗎?

幻燈片會定期停止,但如果用戶只是使用後/下一個按鈕,它總是有效,但幻燈片代碼似乎沒有問題,因爲它只是觸發事件?

我已經把這裏

http://demo.stg.brightonconsulting.net.au/templates/tests/ipadSlider/

+0

它可以在我的PC觸摸屏上正常工作,是不是取消了動畫,因爲頁面在滑動滑塊時正在滾動? – 2013-02-25 00:56:05

+0

是的,它可以在電腦上工作 - 而不是ipad - 這個想法是,刷卡觸發事件,然後運行幻燈片 - 我怎麼能解決這個問題? – Dan 2013-02-25 01:02:28

回答

0

喜歡你安裝事件處理程序都swipeForward和swipeBackward這似乎是我的代碼,但你只卸載時的一個大火。下一次,你再次安裝兩個事件處理程序,因此它們中的一些會堆積起來並被多次安裝,當一個安裝了多次的火災時,這肯定會混淆你的動畫。如果您要在發生火災時卸載,那麼您需要卸載這兩者,而不僅僅是解僱。與點擊處理程序相同的問題。

另外,在calcLeft()中,應該將變量left聲明爲局部變量。另外,當promise是一個整數時,jQuery.when(promise)是做什麼的?你應該通過延期對象jQuery.when()

+0

我已經改變了問題,上傳的代碼已經宣佈,我已經刪除了承諾。 – Dan 2013-02-25 01:41:00

+0

@丹 - 你解決了多個事件處理程序安裝問題嗎?這是我看到的主要問題。 – jfriend00 2013-02-25 01:42:12

+0

我也更新了它,所以有兩個處理程序。我推動了代碼。這是你的意思嗎? – Dan 2013-02-25 01:44:46