继续功能,直到释放鼠标为止
Continue function until mouse is released
我希望能够在鼠标放下时连续运行以下函数。目前,该功能每点击一次就会超过一次。我希望能够在鼠标按下时继续运行该功能,并在鼠标释放时停止。
$('#md').mousedown(function(e){
var pCords = e.pageY +e.pageY;
var max = $(document).height()+$(document).width();
var dg = 2*( pCords / max );
$('#div').css({ 'transform':'rotate('+dg+'deg) '});
});
此问题已在:jQuery continuous mousedown 中解决
它将包括设置一个可以在第一个mousedown事件发生时设置为true的标志,并在mouseup事件发生时调用一个只有在标志设置回false时才结束的函数。
处理事件处理程序执行之间的时间延迟的简单方法:
var timerId = 0;
$('#md').mousedown(function(e){
timerId = setInterval(function() {
var pCords = e.pageY +e.pageY;
var max = $(document).height()+$(document).width();
var dg = 2*( pCords / max );
$('#div').css({ 'transform':'rotate('+dg+'deg) '});
}, 20); // specify the required time delay here
});
$('#md').mouseup(function(e){
clearInterval(timerId);
});
您可以使用一个简单的信号量来完成。这里有一个例子:
var lock = true;
$('#md').mousedown(function() {
lock = false;
setTimeout(function() {
while(!lock) {
// Do your stuff here
}
}, 0);
});
$(document).mouseup(function() {
lock = true;
});
我希望这能奏效。setTimeout函数分离函数的执行并创建一个异步进程,这使代码不受阻塞。
我相信还有更复杂的方法来解决这个问题。只是我还没喝咖啡
这样?制作一个全局布尔变量来跟踪鼠标是否向上,然后在鼠标向下时循环函数。
var ismouseup = false;
$(document).ready(function(){
$('#md').mousedown(function(e){
ismouseup = false;
while(!ismouseup)
{
//do your thing
}
});
$('#md').mouseup(function(e){
ismouseup = true;
}
});
--edit:当mouseup时,将ismouseup设置为true。很抱歉
您可以使用setTimeout。当鼠标放下时,这将每1秒运行一次
$('#md').on({
mousedown: function () {
$(this).data('clicked', true);
var process = function() {
if ($(this).data('clicked')) {
// Do your stuff
setTimeout(process, 100);
}
};
process();
},
mouseup: function () {
$(this).data('clicked', false);
}
});
作为一个选项,您可以在mousedown
中设置mousemove
的处理程序,并在mouseup
中删除,如代码中所示
function movehandler(e) {
var pCords = e.pageY + e.pageY;
var max = $('#md').height();
var dg = 20 * (pCords / max);
$('#md').css({
'transform': 'rotate(' + dg + 'deg) '
});
}
$('#md').mousedown(function (e) {
$('body').on('mousemove', movehandler);
});
$('#md').mouseup(function (e) {
$('body').off('mousemove');
});
$('body').mouseleave(function (e) {
$('body').off('mousemove');
});
Jsfffle示例写得不理想,但你可以得到的想法
编辑:请注意,$('body').on('mousemove',
可能不够,这取决于您的标记。
相关文章:
- 在拖动过程中释放鼠标时忽略 JavaScript mouseUp 事件
- 继续功能,直到释放鼠标为止
- jQuery UI可排序,释放鼠标按钮事件
- 如果释放鼠标时内部元素未悬停,则防止触发“单击”的正确方法
- 单击时更改鼠标指针,释放时返回
- 重置输入类型=释放鼠标时的范围
- 在鼠标释放时打开引导模式,jQuery Selectable
- jQuery .click() - 需要确定鼠标被按下的位置,而不是释放的位置
- 流星“变化”值在释放鼠标时出现,而不是在拖动输入滑块时出现
- 画布 KineticJS - 当我在形状上方释放鼠标时出错
- 当用户将鼠标拖到浏览器窗口外并将其释放到浏览器窗口外时,如何获得通知
- D3鼠标释放事件
- 鼠标释放时抓取元素的位置jQuery可拖动
- 如何在鼠标释放时在Openlayers中完成徒手绘制
- Dart HTML-在不释放鼠标按钮的情况下更改输入范围
- 鼠标左键函数只在LMB释放时执行
- 鼠标事件"mousemove"在按下和释放鼠标按钮时触发
- JQuery改变css切换回鼠标释放
- 使它在悬停时可见,并在鼠标移出后保持悬停效果,但在其他元素悬停时释放
- 烬cli应用程序与引导下拉菜单立即关闭鼠标释放