Как я могу определить расстояние, на которое прошла мышь пользователя? - PullRequest
12 голосов
/ 31 декабря 2011

Я пытаюсь определить расстояние, на которое переместилась мышь, в пикселях. Я сейчас использую:

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

Однако я не чувствую, что это правильный способ сделать это, или это так? Это не похоже на то, чтобы соответствовать мне.

Вот демонстрация того, как это работает прямо сейчас: http://jsfiddle.net/Em4Xu/1/

Дополнительные детали:

Я на самом деле разрабатываю плагин drag & drop, и я хочу создать функцию под названием distance, как у draggable, где вам нужно потянуть мышь на определенное количество пикселей, прежде чем она перетаскивается. Я не уверен на 100%, как это сделать, поэтому сначала мне нужно получить пиксели, которые мышь переместила из позиций startTop и startLeft.

У кого-нибудь есть предложения?

Ответы [ 3 ]

11 голосов
/ 31 декабря 2011

Вот версия, которая измеряет расстояние, которое проходит мышь:

var totalDistance = 0;
var lastSeenAt = {x: null, y: null};

$(document).mousemove(function(event) {
    if(lastSeenAt.x) {
        totalDistance += Math.sqrt(Math.pow(lastSeenAt.y - event.clientY, 2) + Math.pow(lastSeenAt.x - event.clientX, 2));
        
    $('span').text('So far your mouse ran this many pixels:   ' + Math.round(totalDistance));
    
    }
    lastSeenAt.x = event.clientX;
    lastSeenAt.y = event.clientY;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span></span>
8 голосов
/ 31 декабря 2011

Вы неправильно поняли свою математику. Вот улучшенная версия: http://jsfiddle.net/stulentsev/Em4Xu/26/

$(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);
});
6 голосов
/ 31 декабря 2011

Придумал что-то похожее на Серхио, но это вычислит расстояние от точки, в которой была удержана мышь, и, как сказал друг, расстояние между двумя точками,

d = ((x1-x2) ^ 2 + (y1-y2) ^ 2) ^ (1/2)

var totalMovement = 0;
var lastX = -1;
var lastY = -1;
var startX = -1;
var startY = -1;

$(document).mousemove(function(event) {

    if (startX == -1) {
        return;
    }
    if (startY == -1) {
        return;   
    }

    totalMovement += Math.sqrt(Math.pow(lastY - event.clientY, 2) + Math.pow(lastX - event.clientX, 2));

    $('span').text('From your starting point (' + startX + 'x' + startY + ') you moved:   ' + totalMovement);

    lastX = event.clientX;
    lastY = event.clientY;

});


$(document).mousedown(function(event) {

 startX = event.clientX;
 startY = event.clientY;
 lastX = event.clientX;
 lastY = event.clientY;

});


$(document).mouseup(function(event) {

 startX = -1;
 startY = -1;
 totalMovement = 0;
 lastX = 0;
 lastY = 0;

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...