Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Проблема с обработкой событий мыши firefox (https://javascript.ru/forum/dom-window/29733-problema-s-obrabotkojj-sobytijj-myshi-firefox.html)

АлексТраст 09.07.2012 15:35

Проблема с обработкой событий мыши firefox
 
Всем привет, возникла проблема с мышой в лисе.
В хроме, эксплорере нормально работает функция (при перемещении по элементу с нажатой клавишей меняет свою позицию вложенный элемент) А, в лисе не работает по той причине, что нет разницы нажата левая клавиша или никакой не нажато.
function movecursor(obj,ev)
{
if (!ev.which && ev.button) {
if (ev.button & 1) ev.which = 1
else if (ev.button & 4) ev.which = 2
else if (ev.button & 2) ev.which = 3
}

e =window.event;
if (e) ; else e=ev;
if(e.pageX)
{
tmpX = e.pageX + window.pageXOffset;
} else if(e.clientX) {
tmpX = e.clientX + document.body.scrollLeft;
} else {
return false
}

cursor=$(obj).children('.clcursor');
x=0;
objj=obj.parentNode;
while(objj)
{
x += objj.offsetLeft;
objj = objj.offsetParent;
}
b=cursor.position().left-tmpX+x;
a=0;
if ((cursor.position().left-b+cursor.width())>$(obj).width())
{
a=$(obj).width()-cursor.position().left-cursor.width()+b;
}

if(ev.which==1)
{
cursor.css('left',cursor.position().left-b+a); }
}

Спасибо за ответы заранее.

Deff 09.07.2012 15:56

var Flag=false;
$("Cелектор").mouseup(function(){
        Flag=false;
    }).mousedown(function(){
        Flag=true;
    });


Проверяете флаг в Вашей функции на true

vadim5june 09.07.2012 15:57

может нужно так написать
if (ev.button == 1) ev.which = 1

Deff 09.07.2012 16:06

vadim5june, Если не на jQuery
Имхо тут должно быть условие для

e =селектор.onmousedown&&window.event;

АлексТраст 09.07.2012 16:20

Deff,
Примерно так пробовал, работает плохо - косяк за счет наведения на остальные вложенные объекты ( в том числе на курсор) + можно нажать клавишу на элементе, а отпустить на другом.
vadim5june,
Это спецом для IE написано побитовая операция, в мозилле не используется. Можно написать, конечно и так, только не поможет.

Проблем с получением объекта event не наблюдается, наблюдается отсутствие разницы между нажатием левой клавиши и просто отсутствием нажатия мыша.

Deff 09.07.2012 16:23

Цитата:

Сообщение от АлексТраст
Примерно так пробовал, работает плохо - косяк за счет наведения на остальные вложенные объекты ( в том числе на курсор) + можно нажать клавишу на элементе, а отпустить на другом.

Выберите в качестве селектора (или создайте достаточное обрамление вокруг поля действия
На крайняк - $("body").mouseup(function(){ //Хотя body имхо излишне - нун сокращать по минимуму

АлексТраст 09.07.2012 16:32

Deff,
Эти события не различают клавиш.


В принципе мне не важно, использовать jq или нет, главное решение задачи.

vadim5june 09.07.2012 16:42

Цитата:

Сообщение от АлексТраст (Сообщение 187484)
Примерно так пробовал, работает плохо - косяк за счет наведения на остальные вложенные объекты ( в том числе на курсор) + можно нажать клавишу на элементе, а отпустить на другом.

mouseup нужно вешать на window(document.body) тогда проблем не будет


Часовой пояс GMT +3, время: 21:04.