Jquery mousedown + mousemove

如何在鼠标停止并移动时触发JQuery中创建事件? 每次mousedown + mousemove只触发一次?

更新:

因此,看起来如果您的鼠标不再位于绑定onmouseup的元素上,它将不会看到鼠标注册事件。 有意义的是,当你停下来思考它时,但当mousedown事件发生在元素上时,我们期望,作为UI用户,它知道它何时被释放(即使它不在元素上)。

因此,为了解决这个问题,我们实际上在文档级别上检测了mouseup。

var clicking = false; $('.selector').mousedown(function(){ clicking = true; $('.clickstatus').text('mousedown'); }); $(document).mouseup(function(){ clicking = false; $('.clickstatus').text('mouseup'); $('.movestatus').text('click released, no more move event'); }) $('.selector').mousemove(function(){ if(clicking == false) return; // Mouse click + moving logic here $('.movestatus').text('mouse moving'); }); 

我在jsbin上尝试了这个,它似乎工作。 在这里查看: http : //jsbin.com/icuso 。 要编辑它(请参阅JS和HTML),只需在URL的末尾标记“编辑”。 http://jsbin.com/icuso/edit

使用以下代码

 $(element).mousemove(function(e){ if(e.which==1) { #do job } }); 

更新:
对于某些浏览器,您可能希望使用此:

 $(element).mousemove(function(e){ if(e.buttons==1) { #do job } }); 

我为音频音量控制器做了以下操作:

 $('#control-vol').bind('mousedown', function(e){ $('#control-vol').bind('mousemove', function(e){ var volumen = e.pageX - this.offsetLeft; $('#barra-vol').width(volumen + 'px'); $('audio')[7].volume = volumen/50; }); $('#control-vol').bind('mouseup',function(){ $('#control-vol').unbind('mousemove') }); }); 

对于其他任何人来到这个线程,寻找使用动态加载内容的jQuery mouseupmousemovemousedown的通用帮助,我发现(至少在Chrome中) Matt的post的这个修改function:

 var clicking = false; $('.selector').live("mousedown",function(){ clicking = true; $('.clickstatus').text('mousedown'); }); $(document).live("mouseup",function(){ clicking = false; $('.clickstatus').text('mouseup'); $('.movestatus').text('click released, no more move event'); }) $('.selector').mousemove(function(){ if(clicking == false) return; // Mouse click + moving logic here $('.movestatus').text('mouse moving'); }); 

http://api.jquery.com/live/ jQuery $.live()绑定到所有现在和将来的元素,所以如果你需要添加一个mousemovemousedown到一个动态创建的元素,这应该工作(再次,在chrome中至少)。

这可能有助于这种情况……处理w / iframe时存在一些困难。 我目前正在开发一个需要在iframe中调整元素大小的项目。

假设您有一个id为’iframe’的iframe。 我只在FF测试过这个,但是它有效:

 var $iframe = $('#iframe'); $iframe.load(function() { var $body = $iframe.contents().find('HTML'); /* ...bind your events here to $body.. */ $body.mousedown(function(){...}); $mody.mouseup(function(){...}); } 

我尝试将所有内容绑定到文档,或者在这种情况下,绑定到iframe的文档,然后当事件发生时,我调用一个函数来确定目标究竟是什么。 请记住,jQuery有一个非常酷的function,你可以将事件目标包装在jQuery函数中:

 $(selector).click(function(e) { var id = $(e.target).attr('id'); }); 

希望这可以帮助! 我希望它能在其他浏览器中运行,否则我会在几天内感到沮丧:o

 document.onmousedown = function(e) { e = e || window.event; var button = (type e.which != "undefined") ? e.which : e.button; if (button == 1) { alert("Left mouse button down"); } }; 

javascript事件e.which?

 $("element").mousedown(function () { $(this).mousemove(function () { console.log("OK Moved!"); }); }).mouseup(function () { $(this).unbind('mousemove'); }).mouseout(function () { $(this).unbind('mousemove'); }); 

答案可以在另一个SO主题中找到:
Firefox将div视为图像

您需要从事件处理程序返回false以防止默认操作

一旦我在我的事件处理程序中返回false,它就像一个魅力。

 $(document).on('mousedown', function() { $(document).bind('mousemove', function() { $('#id-name').dosomething(); }); }); $(document).on('mouseup', function() { $(document).unbind('mousemove'); }); 
 e.preventDefault(); 

e是传递给函数的事件处理程序

我们使用$ .bind()这样:

 $('#div').bind('mousemove mousedown', function(){}); 

这意味着要么mousemove或mousedown触发,该函数将执行。 所以在函数中,我们仍然能够通过使用event.which来检查左按钮是否按下,因此代码应该如下所示:

 $('#div').bind('mousemove mousedown', function(e){ if(e.which == 1){ //let the fun begin } }); 

也许:

 $('input').mousedown(function{ $('input').mousemove({ etc }); }); 

但由于某种原因,我认为你已经尝试过..