Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пытаюсь получить координаты мыши таймером, А браузер ругается 
V
    Опции темы
InfMag
Дата 24.12.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 2
Всего: 4



Что тут может быть не так?
Код

var mouseX = 0;
var mouseY = 0;
var mouseXs = 0;
var mouseYs = 0;

function update_mouse_coordinates()
{
    mouseX = event.clientX;
    mouseY = event.clientY;
    mouseXs = mouseX + document.body.scrollLeft;
    mouseYs = mouseY + document.body.scrollTop;
    setTimeout("update_mouse_coordinates()", 1);
}

update_mouse_coordinates();

Все ведь правильно, а IE пишет ошибку и координаты не отдает.
PM   Вверх
ksnk
Дата 24.12.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Дык! Объекта event'то нету. он возникает только для "событий". Если хочется получить координаты мышки - в любой момент - нужно честно ставить обработчик события onmousemove и честно читать координаты из его  event'а...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
InfMag
Дата 24.12.2007, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 2
Всего: 4



ksnk, понял, изменил, заработало, но только на осле.
Код

<html>
<head>
<title>test...</title>
<script type="text/javascript" language="javascript">
var mouseX = 0;
var mouseY = 0;
var mouseXs = 0;
var mouseYs = 0;

function update_mouse_coordinates()
{
    mouseX = event.clientX;
    mouseY = event.clientY;
    mouseXs = mouseX + document.body.scrollLeft;
    mouseYs = mouseY + document.body.scrollTop;
}
</script>
</head>
<body onmousemove="javascript:update_mouse_coordinates();">
<script type="text/javascript" language="javascript">
function t()
{
   document.write(mouseXs+" "+mouseYs+"<br>");
   setTimeout("t()", 1000);
}
t();
</script>
</body>
</html>

В IE все в порядке, координаты отдаются, а вот FireFox отдает мне 0 на Х и на У... В чем проблема?
PM   Вверх
Ghirik
Дата 24.12.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



FF не понимает document.body, кроссбраузерно можно юзать:

Код

document.documentElement.scrollLeft
document.documentElement.scrollTop


но при этом следует указать доктип, например так:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> 


И присвоение нового положения элементу следует делать так:
element.offsetTop = mouseYs + "px";

Добавлено через 3 минуты и 2 секунды
Ещё, обычно нет необходимости считывать координаты по таймеру, достаточно обрабатывать событие mousemove, но я, конечно, не знаю вашу задачу...


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
ksnk
Дата 24.12.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Вообще-то да, однако, нужно еще и  изменить код примерно так:
Код

var mouseX = 0;
var mouseY = 0;
var mouseXs = 0;
var mouseYs = 0;

function update_mouse_coordinates(e)
{
    e=e||window.event;
    mouseX = e.clientX;
    mouseY = e.clientY;
    mouseXs = mouseX + document.documentElement.scrollLeft;
    mouseYs = mouseY + document.documentElement.scrollTop;
}
function load(){
  document.body.onmousemove=update_mouse_coordinates;
}
</script>
</head>
<body onload="load()">
...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
SelenIT
Дата 24.12.2007, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(Ghirik @  24.12.2007,  20:01 Найти цитируемый пост)
FF не понимает document.body

Не надо клеветать на мою любимую лису smile. В Quirks mode более-менее кроссбраузерно работает как раз document.body. Чуть более полная картина здесь.

Цитата(Ghirik @  24.12.2007,  20:01 Найти цитируемый пост)
обычно нет необходимости считывать координаты по таймеру, достаточно обрабатывать событие mousemove

А вот тут полностью согласен.

InfMag, и еще, в дополнение к правильному коду ksnkа: чего Вы ждете от document.write() после загрузки страницы?  smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Ghirik
Дата 24.12.2007, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



Да ладно... smile Кому что нравится, если я пишу код в FrontPage, то понятно IE самый лучший. А вообще, у меня они по очереди попадают в немилость, smile  IE бывает таким г...м!..

А для чего делают такую проверку?
Код

if (document.documentElement && document.documentElement.scrollTop)


вроде ведь достаточно проверить одно....


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
SelenIT
Дата 24.12.2007, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Было бы достаточно проверить второе, если бы не ненулевая (на момент написания той статьи) вероятность нарваться на IE5 или что-нибудь подобное, в принципе не знакомое с documentElement. Сейчас эта вероятность куда меньше, но имхо если оставить одну проверку - надо бы обернуть ее в try ... catch (на всякий пожарный)...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
InfMag
Дата 25.12.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 2
Всего: 4



А как можно получить данные сроллинга еще без строгого доктайпа? А то если я ставлю доктайп весь сайт перекособошивает в хлам.
PM   Вверх
Ghirik
Дата 25.12.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



Тогда нужно для уаждого браузера свой подход иметь, вот здесь была функция но сервер пока закрыт, зайдите позже. Вообще, здесь на форуме наверняка есть, поищите....


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
SelenIT
Дата 25.12.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(InfMag @  25.12.2007,  15:23 Найти цитируемый пост)
как можно получить данные сроллинга еще без строгого доктайпа?

И чего это я такой добрый - мою ссылку демонстративно проигнорировали, а я все равно ее цитирую...  smile
Код

var x,y;
if (self.pageYOffset) // all except Explorer
{
    x = self.pageXOffset;
    y = self.pageYOffset;
}
else if (document.documentElement && document.documentElement.scrollTop)
    // Explorer 6 Strict
{
    x = document.documentElement.scrollLeft;
    y = document.documentElement.scrollTop;
}
else if (document.body) // all other Explorers
{
    x = document.body.scrollLeft;
    y = document.body.scrollTop;
}



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
InfMag
Дата 25.12.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 2
Всего: 4



SelenIT, большое спасибо! smile Именно то, что мне нужно! +1
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.