2011-01-03 29 views
4

ich auf einem Drag ‚n‘ Drop bin das Experimentieren, das ist mein Code hier:Disable mousemove- auf Klick

$('.box-title').live('mousedown click', function(e) 
{ 
    var self = $(this); 
    var Box = self.parent('#box'); 

    if(e.type == 'mousedown') 
    { 
     $(window).mousemove(function(e) 
     { 
      Box.css({ cursor: 'move', top: e.pageY - 15, left: e.pageX - 125 }); 
     }); 
    } 
    else if(e.type == 'click') 
    { 
     Box.css({ cursor: 'default', top: e.pageY - 15, left: e.pageX - 125 }); 
    } 
}); 

Auf mousedown-, sollte sie die Schleppwirkung auslösen, indem Sie die Maus bewegen, danach, wenn ich Ich möchte die Box dort andocken/ablegen, wo ich sie haben möchte, ich klicke darauf, sie sollte die Bewegung deaktivieren, aber wenn ich darauf klicke, hört sie nicht auf sich zu bewegen - einfach weiter meiner Maus zu folgen. Wie können Sie das Ziehen stoppen?

Antwort

8

Sie müssen die mousemove Handler unbind die noch ist derzeit angebracht, zum Beispiel:

function setPos(e) { 
    //can be $('#box') in this case... 
    $(this).parent('#box').css({ cursor: 'move', top: e.pageY - 15, left: e.pageX - 125 }); 
}  
$('.box-title').live('mousedown click', function(e) { 
    if(e.type == 'mousedown') { 
     $(window).mousemove(setPos); 
    } 
    else if(e.type == 'click') { 
     $(window).unbind('mousemove', setPos); 
    } 
}); 

Oder in jQuery 1.4.3+ dass .live() Handler etwas sauberer sein können:

$('.box-title').live({ 
    mousedown: function() { 
    $(window).mousemove(setPos); 
    }, 
    click: function() { 
    $(window).unbind('mousemove', setPos); 
    } 
}); 

Als Nebenwirkung, es erscheint Sie mehrerehabenElemente auf der Seite ... stellen Sie sicher, Klassen in diesen Fällen zu verwenden, in diesem Code $(this).parent('#box') wäre stattdessen $(this).closest('.box').

+0

Kann nicht ohne Sie nichts tun. Vielen Dank. – MacMac

3

Versuchen Zugabe

$(window).unbind('mousemove')

in Ihrem Click-Ereignis.

1

Aber wirklich sollten Sie das Ereignis benennen, so dass Sie nur den entsprechenden Ereignis-Listener lösen.

Bind: $(window).bind('mousemove.dragging', function(){});

Unbind: $(window).unbind('mousemove.dragging', function(){});