2011-09-23 89 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