![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| kuksha |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
Здравствуйте.
Нужно определить событие прокрутки мыши над картинкой и направление прокрутки, в зависимости от которого выполнить какие-то действия, ну например перейти на один сайт или на другой. Нашёл приведённый ниже код. Работает. Но, это для всей страницы, а мне надо чтобы он только над картинкой работал.
Извините, получилось! <img id="kartinka" srv=kartinka.jpg onmouseover="prokrutka()"> Это сообщение отредактировал(а) kuksha - 1.12.2011, 00:18 |
|||
|
||||
| kuksha |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
нет, не получается у меня подавить прокрутку страницы после прокручивания колёсика над картинкой...
Нарыл такую функцию:
Написано, что её надо вызвать в конце обработчика прокрутки мыши командой
Не работает... При выходе из картинки при первом же повороте колеса мыши идёт отработка прокрутки колёсика над картинкой. Помогите пожалуйста. |
||||
|
|||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
kuksha, можете выложить весь код странички, на которой демонстрировалась бы проблема?
Добавлено через 6 минут и 30 секунд Вот отрыл свой старый пост, там показано, как отменяется событие прокрутки колеса. |
|||
|
||||
| kuksha |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
Вот тут:
http://info-7.ru/Astro/nebo_segodnya_geo.php?zero=1 Колёсико крутить над той картинкой, которая карта неба. Соответственно код в исходнике страницы... О, не заметил ссылку - спасибо, приеду домой посмотрю/попробую. Это сообщение отредактировал(а) kuksha - 2.12.2011, 18:34 |
|||
|
||||
| Amphiluke |
|
||||||||||||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Пока еще сильно в код не всматривался, но, вроде, очевидно же: вы прослушиваете событие вращения колеса не на уровне самой картинки, а аж на уровне объекта document.
Зачем? Обработчик нужно на картинку и вешать по логике. Что-то типа
Добавлено через 10 минут и 11 секунд Всмотрелся немного дальше в вашу страничку… Совершенно непонятно, с какой целью при каждом наведении указателя мыши на картинку добавляется еще и еще заново один и тот же обработчик события вращения колеса.
Достаточно сделать это один-единственный раз после загрузки страницы. |
||||||||||||
|
|||||||||||||
| kuksha |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
Amphiluke, я неплохо знаю перл и пхп, но с джава скриптами никогда не работал. Тыркаюсь сейчас как слепой котёнок
Сейчас буду разбираться... |
|||
|
||||
| kuksha |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
То есть в итоге так?
Паразитная прокрутка исчезла. Ура! Amphiluke, благодарю! Теперь буду искать как менять только одну картинку, без перезагрузки страницы... |
|||
|
||||
| kuksha |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
Сейчас добавил перерисовку изображения без обновления всей страницы и почти незаметный до этого глюк проявился во всей красе:
при прокручивании колёсика мыши для изменения масштаба карты, сначала отрабатывается прокрутка страницы, а уже потом происходит перерисовка изображения. То есть страница постоянно ездит вверх-вниз. Вот что в черновой версии сейчас: http://info-7.ru/Astro/nebo_segodnya_geo8.php?zero=1 Собственно код там же, сюда наверное нет смысла писать, поскольку кроме отрисовки картинки ничего не добавилось, а страница и раньше смещалась после прокрутки точно так же. Просто поскольку перерисовывалась вся страница, я на это не обращал внимания. Что я не так сделал? Amphiluke, к своему стыду я не понял вашего замечания "с какой целью при каждом наведении указателя мыши на картинку добавляется еще и еще заново один и тот же обработчик события вращения колеса". Может в этом дело? Как правильно? Кстати, при попытке увеличить карту при достигнутом максимальном увеличении 3, прокрутки не происходит, поскольку границы масштабирования жёстко заданы и я просто вылетаю из функции по return. То же самое при увеличении в 1 крат. Это сообщение отредактировал(а) kuksha - 5.12.2011, 11:21 |
|||
|
||||
| Amphiluke |
|
||||||||||||||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Замечание касается ненужного обработчика события onmouseover у картинки.
Этот код фактически означает следующее: «всякий раз, когда пользователь наводит указатель мыши на картинку, добавить еще один обработчик события вращения колеса». Именно этим занималась ваша функция prokrutka. Сейчас, похоже, вы это дело «исправили», сделав добавление слушателей по событию onload. Но атрибут onmouseover у вас так и остался. И сейчас стоит, генерируя ошибку JavaScript о неизвестном идентификаторе «prokrutka». Кстати.
Не нужно давать имя функции, которая используется как анонимная, т.е. как функциональный литерал. Хотя синтаксис JavaScript это и позволяет, фактически это имя «prokrutka» не будет доступно нигде за пределами самой функции. Так что предлагаю анонимную функцию всё-таки «разыменовать»
Теперь, наконец, по поводу прокрутки страницы при вращении колеса над картинкой. Мы с вами об этом уже говорили.
Т.е. это решается стандартно — отменой действия по умолчанию. В конце вашей функции (точнее, после кода с заменой картинки el.src = ...) вствьте следующий код:
|
||||||||||||||
|
|||||||||||||||
| kuksha |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
Amphiluke, Спасибо!
Сделал: http://info-7.ru/Astro/nebo_segodnya_geo8.php?zero=1 Стало гораздо приятнее Обнаружилась ещё вот такая неприятность: Если колесо крутить медленно, то всё нормально. Но, если крутануть сильнее, то данные пересчитываются на несколько шагов вперёд, не дожидаясь отрисовки очередного увеличенного/уменьшенного куска карты на каждом шаге. Как результат - расчитываются неверные координаты и пользователь оказывается там, куда совсем не хотел... Можно ли сделать такую заглушку, чтобы новая отработка не начиналась, пока не нарисуется очередная картинка? |
|||
|
||||
| Amphiluke |
|
||||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Конечно, можно. Навскидку, это можно реализовать достаточно просто. Когда вы меняете src картинки, можно установить какой-нибудь флаг (назовем его ready), состояние которого проверять всякий раз при заходе в обработчик события вращения колеса. Если флаг, допустим, false, то ждать, если true, можно вновь делать обычную обработку, менять вновь src. Сигнализировать окончание загрузки картинки можно установкой флага ready в значение true внутри обработчика события onload картинки.
Итого, может получиться примерно (!) следующее
Сам обработчик станет примерно таким:
Это сообщение отредактировал(а) Amphiluke - 6.12.2011, 22:07 |
||||
|
|||||
| kuksha |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
Amphiluke, спасибо огромнейшее - просто блеск как работает! Поставил на сайт.
Сайтик у меня хоть и маленький, но с удовольствием напишу строчку благодарности под звёздной картой на этой страничке: http://info-7.ru/Astro/nebo_segodnya_geo.php?zero=1 Только знать бы кому - не по псевдониму же благодарить Если конечно это нужно... |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Нет, спасибо. Не стóит. You are welcome, как говорится.
|
|||
|
||||
| kuksha |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
Понятно, но если что - только свистните...
Задумок ещё куча, так что я тут ещё не раз и не два появлюсь. Удачи! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |