[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выход курсора за пределы страницы
quickxyan
нужно, чтобы при выходе курсора мышки за предел страницы вверх случалось событие. первая идея такая


<body onmouseout = "alert('aaa')" style = "height: 100%">
hello world;
</body>


впринципе работает, только есть минус - работает когда курсор выходит и вверх, и вниз, и вправо, и влево.

можно ли как-то придумать, чтобы реагировало только на выход вверх?



Спустя 24 минуты, 24 секунды (1.11.2011 - 04:12) sebastjan написал(а):
наверно надо сделать полоску тонкую в шапке, если ведёшь курсор на верх попасть так точно на неё трудно, по любому проскочишь, вот тут и выводи событие.
Полоску сделай под цвет фона шапки.
Но по лбому если из за верхней границы броузера поведёшь ,опять срабтает.
А вообще - что за хитрость то?
Короче тоненькие полоски,невидемые пользователю а видные мышке по краям от них и плясать.

Спустя 3 минуты, 57 секунд (1.11.2011 - 04:16) sebastjan написал(а):
Можно конечно изватится с функцией, отслеживающей кардинаты, типа если кардинаты увеличиваются по оси такой и превышают такое то значение - тогда реагировать.
Но мутрно.

Спустя 6 минут, 52 секунды (1.11.2011 - 04:23) sebastjan написал(а):
И ещё я так подумал про первый вариант с тоненькими полосками по краям.
По сути при запуске страницы ,курсор по любому находится на странице,- когда курсор ушол -всё нормально и когда курсор опять приходит на страницу чтоб небыло фигни с срабатыванием, надо всёж написать функцию которая бы считывала заход приход.
Если мышка вышла за поле, в функции ставить значение что мышка вышла и блокировать срабатывание функции отвечающей за сообщение.
Короче через раз срабатывать функции.
Ушол -показали сообщение
Пришол ничего не показали.
Ушол опять показали.
Наверное так. dry.gif

Спустя 14 минут, 34 секунды (1.11.2011 - 04:37) sebastjan написал(а):
Прикольно сейчас проверил с тонкой полоской по верху, работает но не без косяка, если быстро мыкой проводить н успевает засечь событие броузер, наверное и от мышки тоже зависит.
Думаю надёжней с функцией по отлову кординат делать.
Тогда уж точно, если вышла мыша за предел такой то -- вывод события.Не надо будет проверять на вхождение в броузер.

Спустя 3 минуты, 43 секунды (1.11.2011 - 04:41) quickxyan написал(а):
Ух, накрутил %) ну я про координаты тоже подумывал, но надеялся, что авось есть проще способ smile.gif ну все-таки наверное прийдеться хитрить как-то.

можно впринципе сделать так:

если курсор мышки по оси у попадает на 0px, то врубить алерт. то есть если курсор окажеться на нулевом пикселе, то вряд ли просто так)

а там уже попробовать писать например масив с 10 последними точками курсора и там смотреть, если точки были больше 0, то выводить алерт, а если их не было, то ничего не делать.

в любом случае спасибо за советы! буду завтра что-то мудрить smile.gif

Спустя 7 минут, 48 секунд (1.11.2011 - 04:49) sebastjan написал(а):
А кто так сможет изловчиться чтоб попасть именно в нулевой пиксель. blink.gif
Можешь смело в условии задать,
если мыша по кординатам Y меньше 1 или 3 =вывод сообщения.
Если не меньше то и не вывод.
Всё одно никто не будет ловить эти пиксели, ведёт себе мышу и ведёт.
Но по сути - если юзер снял фокус с окна броузера, значит ему что то другое надо, мало тех кто кидает мышу и падает на клавиатуру - получаеться это для них сообщение.
Типа сфокусируйте мышку на окне.
А зачем?
Это всё больше в играх используют.
И ещё заметь что всякие алерты замораживают любое днйствие со страницей.
Это раздражает.
Может слой лучше показать. и в нужном для тебя месте.
Не так дёргает нервную систему. smile.gif

Спустя 7 минут, 31 секунда (1.11.2011 - 04:56) quickxyan написал(а):
sebastjan
ну алерт это только для наглядности.

да впринципе можно сделать например от 1 до 3 и сделать массив на 10 чисел. ну и когда юзер будет в поле алерта, то там уже свериться сверху он идет или снизу.

Спустя 5 часов, 16 минут, 18 секунд (1.11.2011 - 10:12) redreem написал(а):
да просто "слушать мышку постоянно" и в интервале вызывать нужную функцию. например так (могут быть ошибочки, но суть ясна):
msList = {
mXY:{x:0,y:0},
getMouseXY:function(e) {
var x=0,y=0;
if (!e) e=window.event;
if (e.pageX || e.pageY) {
x = e.pageX;y = e.pageY;
} else {
if (e.clientX || e.clientY) {
x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) - doc.documentElement.clientLeft;y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop) - doc.documentElement.clientTop;
}
}

return {"x":x, "y":y};
},
init:function() {
body.onmousemove=function(e) {
msList.mXY=octoV3.getMouseXY(e);

//пример вызова
if (msList.mXY.y<10) {
//вызываем нужную функцию
}

return true;
};
}
}


msList.init();

Спустя 1 день, 12 часов, 29 минут, 7 секунд (2.11.2011 - 22:42) quickxyan написал(а):
redreem
забыл поблагодарить smile.gif спасибо за помощь. правда я что-то не вкурил немного по коду

Спустя 1 час, 34 минуты, 8 секунд (3.11.2011 - 00:16) quickxyan написал(а):
кстати проблему решил все таки по своему.

кому интересно вот код. в опере работает на ура.


function func(){
if(event.y < 10)
alert('Курсор вышел за верхнюю границу!!!');
}

<body onmouseout = "func()" style = "height: 100%">
hello world!!!
</
body>


Спустя 7 минут, 37 секунд (3.11.2011 - 00:23) Игорь_Vasinsky написал(а):
quickxyan
так можно было 1px полосу наверху сделать и на ней алерт wink.gif

Спустя 9 минут, 45 секунд (3.11.2011 - 00:33) Winston написал(а):
Цитата (Игорь_Vasinsky @ 2.11.2011 - 23:23)
так можно было 1px полосу наверху сделать и на ней алерт

При быстром перемещении мышки ничего не получится.

Спустя 1 минута, 1 секунда (3.11.2011 - 00:34) Игорь_Vasinsky написал(а):
значит надо мышу програмно тормозить как к верху поползёт biggrin.gif

Спустя 2 минуты, 26 секунд (3.11.2011 - 00:37) quickxyan написал(а):
Игорь_Vasinsky
smile.gif хорошая идея

Спустя 5 минут, 24 секунды (3.11.2011 - 00:42) Игорь_Vasinsky написал(а):
не.. проверил.. на дёрганых (для слишком резких) - не успевает.

Спустя 9 минут, 14 секунд (3.11.2011 - 00:51) sebastjan написал(а):
Ну вот не поленился и проверил всё на разных броузерах.
Пашет
С определением броузера можно наверное ещё короче но лень.
Свернутый текст

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>
Maus</title>
<style>
html,body{margin: 0px;padding: 0px;height: 100%;width: 100ex;}</style>
</head>
<script>
function
mousePageY(e)//function opredeljaet brouzer i kardinati mishki
{
var y;
if (!e) e = window.event;//opredeljaem brouyer
if (e.pageY)
{ y = e.pageY; }
else if (e.clientY)
{
y = e.clientY +
(
document.documentElement.scrollTop || document.body.scrollTop) -
document.documentElement.clientTop;
}
return {"y":y};
/////////////////////////
}
// samo ispolzovanie funkcii
document.onmousemove = function(e){
var mCur = mousePageY(e); //privjazivaem kordinati polucennie iz predidushei function
if(mCur.y<3)//sravnivaem -esli menshe 3px s verhu -vivodim soobshenie
{
alert('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
}
}

</script>
<body>

</body>
</html>






Спустя 3 минуты, 21 секунда sebastjan написал(а):
Не радуйся твой в лисе небудет работать и ИЕ6 тоже.
А мой будет везде работать :P



Спустя 4 минуты, 46 секунд sebastjan написал(а):
Игорь_Vasinsky
Скорость скорее от мыши зафисит -сколько фпс даёт.
Поэтому лучше примерно от 3-до 10 пикселей смело поставить.
А вот нефиг юзерам мышкой лазить по чердаку странице. :D



Спустя 8 минут, 58 секунд sebastjan написал(а):
ТОлько вот грабли - хоть значение для сравнения стоит (если меньше 5) то один чёрт при возвращении в окно сверху появляеться событие.




Спустя 11 минут, 11 секунд sebastjan написал(а):
Ну так правильно срабатывает событие потому что при возвращении курсор попадает опять в зоду своих (меньше 5) .
Надо колдовать глубже с ява скрипт чтоб при возвращении в функции проверялось --было ли событие до этого.
Если было - то ничего не выводить.



Спустя 14 минут sebastjan написал(а):
Пиши функцию - где будет устанавливаться флаг , если было событие не выводить никаких значений и ставить в переменную значение какое нибудь, для следущего сравнения.
Как с проверкой в форме на регистрацию в РНР. :)


 ! 

М
Зачем столько постов подряд? :blink:
Winston


_____________
печатаю со скоростью 320 минут в знак...

плюсуем карму не стесняемся
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.