2011-09-23 95 views
0

我是js和jquery的新手。不能添加事件偵聽器,它只是在移動「removeEventListener」刪除後

我的代碼:

function dragEnd(){ 
    OnDrag = false; 
    wrapperHalfWidth = box.parent().width() * settings.animPartofScrennToSlide 
    if (Math.abs(dragLengthX) > wrapperHalfWidth){ 
     this.removeEventListener((useMobileDrag ? "touchstart" : "mousedown"), dragStart, false); 
     this.removeEventListener((useMobileDrag ? "touchmove" : "mousemove"), dragMove, false); 
     this.removeEventListener((useMobileDrag ? "touchend" : "mouseup"), dragEnd, false); 
     this.removeEventListener("touchcancel", dragCancel, false); 

     var Direction = dragLengthX > 0; 
     settings.prevNextClickCallback(outerSlCounter, Direction ? FORWARD : BACK); 

     setTimeout(function(){ 
      this.addEventListener((useMobileDrag ? "touchstart" : "mousedown"), dragStart, false); 
      this.addEventListener((useMobileDrag ? "touchmove" : "mousemove"), dragMove, false); 
      this.addEventListener((useMobileDrag ? "touchend" : "mouseup"), dragEnd, false); 
      this.addEventListener("touchcancel", dragCancel, false); 
     }, 500); 
     return SlideTo(outerSlCounter + (Direction ? -1 : 1)); 
    } 
    else{ 
     dragLengthX = 0; 
     box.css({ 
      '-webkit-transition-timing-function': settings.easingCss, 
      '-webkit-transition-duration': settings.animDragTime + 'ms', 
      '-webkit-transform': 'translate3d(' + dragLengthX + 'px, 0px, 0px)', 
      'transition-timing-function': settings.easingCss, 
      'transition-duration': settings.animDragTime + 'ms', 
      'transform': 'translate3d(' + dragLengthX + 'px, 0px, 0px)' 
     }); 
    } 
    isDragging = false; 
    originalX = 0; 
}; 


this.addEventListener((useMobileDrag ? "touchstart" : "mousedown"), dragStart, false); 
this.addEventListener((useMobileDrag ? "touchmove" : "mousemove"), dragMove, false); 
this.addEventListener((useMobileDrag ? "touchend" : "mouseup"), dragEnd, false); 
this.addEventListener("touchcancel", dragCancel, false); 

的borblem是如果(Math.abs(dragLengthX)> wrapperHalfWidth){...}部內。我需要刪除500ms的事件處理程序以防止其他函數(dragStart(event)和dragMove(event))啓動。

在桌面上它工作良好。它會在Slidind函數正常工作時刪除該事件。但在移動設備上,警報事件偵聽器不工作後

+1

在你的代碼沒有什麼建議你使用jQuery –

+0

已經固定的代碼 – SidorukSV

+0

http://pastebin.com/embed_js.php?i=EfuZANgX - 其他功能 – SidorukSV

回答

0

請勿使用帶有jQuery的addEventListenerremoveEventListener。改爲使用bind()/unbind()

if (Math.abs(dragLengthX) > wrapperHalfWidth) { 
    $(this) 
    .bind("touchstart mousedown", dragStart) 
    .bind("touchmove mousemove", dragMove) 
    .bind("touchend mouseup", dragEnd) 
    .unbind("touchcancel"); 

    var Direction = dragLengthX > 0; 
    settings.prevNextClickCallback(outerSlCounter, Direction ? FORWARD : BACK); 

    setTimeout(function() { 
    $(this) 
    .unbind("touchstart mousedown touchmove mousemove touchend mouseup") 
    .bind("touchcancel", dragCancel); 
    }, 500); 

    return SlideTo(outerSlCounter + (Direction ? -1 : 1)); 
} 

雖然我會覺得更優雅,如果你會使用一個標誌,它告訴事件處理程序是否應該做的,而不是不斷結合和undbinding他們任何東西,或不。

+0

這不適合我的工作,即使是在desctop。 – SidorukSV

+0

@SidorukS:你甚至*在你的應用中使用* jQuery嗎?另外「不起作用」是一個可憐的錯誤描述,請更精確。 – Tomalak

+0

我重寫了TwilightShow(http://plugins.jquery.com/project/TwilightShow)插件的某些部分,並添加了拖放功能。 http://pastebin.com/EfuZANgX-這部分鱈魚很大程度上在桌面瀏覽器(Chrome)上工作,但是當我嘗試在我的iPod Touch上第一次滑動後停止工作時。 – SidorukSV