2

出于多种技术原因,我在 jQuery 上实现了我自己的“可拖动”功能,而不是使用 jQuery UI,并且我正在使用 mousedown 和 mousemove 事件来监听试图拖动元素的用户。

到目前为止效果很好,我只想每移动 5 px 触发 mousemove 事件,而不是逐个像素。我试过编码一个简单的:

$('#element').bind('mousemove', function(e) {
    if(e.pageX % 5 == 0) {
        // Do something
    }
});

但是,每 5 个像素的移动并不稳定,有时如果您将鼠标移动得太快,它会跳过几个步骤。我认为这是因为当鼠标移动得非常快时,jQuery 不会触发每个像素的事件。

你们知道如何每 5 个像素触发一次事件吗?

非常感谢,

安东尼奥

4

1 回答 1

3

您的代码没有考虑拖动开始的位置。 e.pageX只会给你页面坐标,而不是差异。您需要检查移动距离的变化。

这篇文章非常相关。

这是基本代码:

$(document).mousemove(function(event) {
    var startingTop = 10,
        startingLeft = 22,
        math = Math.round(Math.sqrt(Math.pow(startingTop - event.clientY, 2) + 
                                    Math.pow(startingLeft - event.clientX, 2))) + 'px';
    $('span').text('From your starting point(22x10) you moved:   ' + math);
});

编辑:现在我想我明白了 OP 在说什么。我用上面的代码想出了这个小提琴。它跟踪您当前相对于屏幕左上角的位置,并检查您的差异是否大于 5 个像素。

新脚本:

var oldMath = 0;
$(document).mousemove(function(event) {
    var startingTop = 10,
        startingLeft = 22,
        math = Math.round(Math.sqrt(Math.pow(startingTop - event.clientY, 2) +Math.pow(startingLeft - event.clientX, 2))) + 'px';
    $('#currentPos').text('you are at :' + math);

    if(Math.abs(parseInt(math) - oldMath) > 5){
        //you have moved 5 pixles, put your stuff in here
        $('#logPos').append('5');


        //keep track of your position to compare against next time
        oldMath = parseInt(math);
    }
});​
于 2012-10-09T01:19:58.173 回答