Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Получить скорость движения мыши

Автор вопроса: ShibinRaghОтветов: 2

Я не получил точного решения/расчета от stackoverflow, поэтому я создал вопрос

var timestamp = null;
var mY = 0;
$(document).mousemove(function(e) {
    var now = Date.now();
    currentmY = e.pageY;


    mY = e.pageY;
    timestamp = now;
});

Мне нужно получить значение скорости, когда мышь перемещает вертикальный угол.

https://jsfiddle.net/58tjr9o1/

  • Как насчет этого Durga 05.08.2017
  • Скорость движения мыши ShibinRagh 05.08.2017

javascripthtmljqueryperformancemousemove

Ответы

Ответ 1 · рейтинг 5 · Derlin

Скорость - это просто расстояние, деленное на время, затраченное на это:

speed = distance / time

Расстояние currentmY - mY, время now - timestamp. Итак, в итоге вы получаете:

var timestamp = 0;
var mY = 0;
$(document).mousemove(function(e) {
    var now = Date.now();
    currentmY = e.screenY;

    var dt = now - timestamp;
    var distance = Math.abs(currentmY - mY);
    var speed = Math.round(distance / dt * 1000);
    console.log(dt, distance, speed);
    document.getElementById("speed").innerHTML = speed;

    mY = currentmY;
    timestamp = now;
});

Обратите внимание на * 1000, так как временная метка указана в миллисекундах. Здесь скорость указана в пикселях в секунду.

См. эту обновленную скрипту.

Ответ 2 · рейтинг 1 · Muhammad Inaam Munir

Следующий код будет постоянно обновлять скорость вертикального движения мыши в диапазоне с id = "update-speed". Код не требует пояснений и прост для понимания, он просто сохраняет текущую позицию, предыдущую позицию, текущее время и предыдущее время, а затем вычисляет скорость, используя эту формулу (скорость = (pos2 - pos1) / (time2 - time1).

HTML

<span id="update-speed">Update speed</span>

JS

var prev_time = new Date();
var prev_pos_y = 0;

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

var now = new Date();
current_pos_y = e.pageY;

time_interval = now.getTime() - prev_time.getTime();

if(time_interval != 0)
    {
        speed = ( Math.abs(current_pos_y - prev_pos_y) / time_interval );
}
else
    speed = 0;

console.log(speed);

$('#update-speed').text(speed);


prev_time = now;
prev_pos_y = current_pos_y;


});

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы