определить направление мыши - PullRequest
6 голосов
/ 09 декабря 2011

Я пытаюсь с помощью этого кода определить направление движения мыши вверх или вниз:

<html>  
    <head></head>
    <body>
        <div style="width: 500px; height: 500px; background: red;"></div>
    </body>
</html>

var mY = 0;
$('body').mousemove(function(e) {
    mY = e.pageY;
    if (e.pageY < mY) {
        console.log('From Bottom');
        return;

    } else {
        console.log('From Top');
    }

});

Однако этот код не работает, если я ожидаю. Журнал консоли всегда показывает "сверху"

Есть идеи?

демо

Ответы [ 6 ]

10 голосов
/ 09 декабря 2011
var mY = 0;
$('body').mousemove(function(e) {

    // moving upward
    if (e.pageY < mY) {
        console.log('From Bottom');

    // moving downward
    } else {
        console.log('From Top');
    }

    // set new mY after doing test above
    mY = e.pageY;

});
4 голосов
/ 09 декабря 2011

Вы устанавливаете my = e.pageY перед его сравнением, что означает, что сравнение всегда будет равным (и, следовательно, ложным).

Попробуйте это так

var mY = 0;
$('body').mousemove(function(e) {

    if (e.pageY < mY) {
        console.log('From Bottom');

    } else {
        console.log('From Top');
    }
    mY = e.pageY;

});
1 голос
/ 09 декабря 2011

e.pageY всегда равно mY, поскольку вы устанавливаете mY в e.pageY непосредственно перед оператором if.

0 голосов
/ 06 марта 2015

Самый простой способ сделать это.Таким образом, вы можете обнаружить изменения направления:

var tempMouseY=0;
$('body')
.mousemove(function(e) {
    moveY = -(tempMouseY-e.pageY);
    tempMouseY = e.pageY;
    if (moveY<0) {
        console.log('From Bottom');
    } else {
        console.log('From Top');
    }

 });
0 голосов
/ 11 февраля 2014

если вы используете if / else, он всегда будет выводить 'Going Down', даже если e.pageY == mY.

Вместо этого используйте 2 оператора if!

var mY = 0;
$('body').mousemove(function(e) {

// moving upward
if (e.pageY < mY) {
    console.log('From Bottom');

// moving downward
}
if (e.pageY > mY) {
    console.log('From Top');
}

// set new mY after doing test above
mY = e.pageY;

});

простоскопировал код из macek и заменил 'else' на 'if (...)' кстати

0 голосов
/ 09 декабря 2011

Вам нужно было установить значение mY после определения направления (ранее вы устанавливали его ранее - таким образом, всегда получал бы конкретный результат)

Код:

//Values starts at middle of page
var mY = $('window').height()/2;

//Compares position to mY and Outputs result to console
$('body').mousemove(function(e) {
    if (e.pageY < mY) {
        console.log('Going Up');   
    } 
    else {
        console.log('Going Down');
    }
    mY = e.pageY;
});

Рабочий пример

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