Pull to refresh

Comments 40

Как раз нужен скрипт для обработки скрола. Спасибо, полезная статья.
if (false == !!event) ...
... event.detail/-3 ...

Фак май мозг.
Можно было для верности ещё написать так: if (/^false$/i.test((!!event).toString()))…
wtf? Для верности можно написать
.... function(event) {
var event = event || window.event;
}........
это был типа сарказм, а правильно вот так (без var):

function(event) {
  event = event || window.event;
}

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

Дело в том что в своем проекте также некоторое время назад возникла необходимость отлавливать событие колеса для кастомного скролла дивов. Гуглил по этому поводу. Нагуглил тогда вот эту статью:
markup-javascript.com/2009/05/24/krossbrauzernyj-mousewheel-obrabotka-sobytiya-skrolinga/

Судя по всему, автор нагуглил ее же, но неизвестно почему ссылку не привел.
Если есть инвайты — могу выслать почту этого товарища. Хорошего JS-разработчика, а в данный момент и Drupal'иста
Гм, вот вы, автор, поставили меня перед моральной дилеммой. За первую часть статьи, которая, безусловно, очень полезная и уникальная даже, вам надо поставить + и в карму и самой статье. За вторую же — минус, потому что это, извините, все же ИТ ресурс, а не сайт рецептов и мне, в меру сил и возможностей, хочется как то его (ресурс) таким и оставить. И вот что же делать :)
Поставьте сначала плюс, а потом минус :)
Обычно это произойдёт так:
— Сначала плюс — за статью
— Потом минус — в карму
Вы точно этого хотите?)
Я имел ввиду плюс в карму и сразу минус в карму. Дилемма решена и все довольны :)
Лучше наоборот — сперва минус в карму, потом плюс; так автор получит в результате +1 в карму, несмотря на минусование.
Я тут вижу 2 рецепта: один скрола, другой супа :)
нельзя такое читать в рабочее время :)
я про суп
Суп — круто, надо бы сварить. А фигня эта со скроллом есть в любом уважающем себя фреймворке. Зачем лисапед?
Только что проверил в файерфоксе. Магическое число 3 — не такое уж и магическое. В виндоус 7 это системная настройка количества прокручиваемых строк на минимальный поворот колёсика мыши.
Верно, и при другом числе в настройках получается странность или ошибка. Например, прибавление 0.33 вместо 1. Лучше бы автор основной рецепт доводил до конца — прибавление всегда по 1, тем более, что другие до него это уже делали. Ещё в Опере 9 знак вращения — противоположный был до какой-то версии.
А у меня вообще два скролла на мышке. Один крутит как обычный, а второй в два раза быстрее. Так что «1 всегда» — это тоже не лучший вариант. Для конкретно этого примера с выбором цвета ещё может быть и пригодный, но если требуется скроллить контент на странице — то не вариант.
Спасибо за статью. Как раз в проекте собираемся делать прокрутку списка маусвилом — очень вовремя :)
Хабр не только торт, но иногда еще и суп.
На самом деле, прежде чем использовать в своих целях событие прокрутки мыши, надо подумать, можно ли это делать или нет. Можно это делать только в одном случае — если страница (приложение) целиком помещается на экране и по прямому назначению колесо мыши не используется. Иначе все это будет только раздражать пользователя, мешать прокрутке, и т.д.

Делать искуственные скроллбары — в общем, без важной и весомой причины (дурь в голове дизайнера — это не важная причина) плохо.

Стоит также намекнуть, что в данном месте страницы можно использовать колесо мыши сменой внешнего вида курсора.
А мне больше суп с галушками и грибами нравится. Ну и, конечно же, борщ! Но только с фасолью.
if (window.addEventListener) window.addEventListener("DOMMouseScroll", mouse_wheel, false);
window.onmousewheel = document.onmousewheel = mouse_wheel;

Первая строчка поймает событие в Firefox и веб-китовских браузерах (Chrome, Safari), вторая нужна для ловли в Опере и IE.

Опера и новые ие понимают addEventListener, но не понимают DOMMouseScroll. Для них сработает 2 строчка. Для остальных обе. Функция будет вызвана 2 раза. или даже 3 в самом плохом случае(отдельно Level 2 для window и потом level 0 для window и document).

Блин, рано отправилось. Какой-то убийственный код. Почему не event = event || window.event? или if (!event) event = window.event?
в случае чего психопата он накормит супом :)
var direction = ((event.wheelDelta)? event.wheelDelta/120: event.detail/-3) || false;


Плохая идея жёстко прописывать 120 в коде, т.к. пользователь может поменять в системе параметры колёсика мыши и оно будет скроллить на другое значение. Лучше ориентироваться только на знак.
var direction = event.wheelDelta && event.wheelDelta > 0 || event.detail && event.detail < 0 || false;
Обновил топик, выложил ссылку на исправленный и дополненный пример. Ещё раз спасибо.
Поддержу HeadFore, забиваться, что у вас будет всегда 3 иди 120 — это в корне неправильно. Чтобы убедиться в этом — возьмите MagicMouse или тачпад — и поскрольте им. Значения, принимаемые event.detail будут самыми разнообразными.
При инертном скроллинге и переходе на другой объект надо бы отключать скроллинг.
А, во-вторых, я не знаю как у вас, а у нас в Москве морозы ударили. -10
У нас в Сибири по прежнему тепло. -17С
Кто решал вопрос со скролом в мобильных браузерах? чтобы при протаскивании по области работало как событие скрол по области?
Only those users with full accounts are able to leave comments. Log in, please.