Monday, February 22nd, 2010 04:55 pm

Отдельной рубрики про верстальщиков у меня нет, и вообще я не настоящий сварщик, поэтому пусть будет в задачках для сисадминов.

Сегодня один товарищ в одном совершенно непрофильном сообществе задал интересный вопрос: как сделать, чтобы колёсико мышки осуществляло  на широком сайте _горизонтальный_ скроллинг?

Я немножко погуглил и сделал так. Может, это как-то проще делается?

На фотографии можно внимания не обращать, я взял первые попавшиеся.

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

Monday, February 22nd, 2010 04:07 pm (UTC)
Не знаю, о чём вы думаете, но... /глядя на фотографии/ ...ехать надо!

А чем непрост этот вариант?
Monday, February 22nd, 2010 04:09 pm (UTC)
две немаленькие библиотеки для одного-единственного действия. перебор, по-моему.

а фотографии - это 31 декабря, трудолюбивые ирландцы спешат на работу.
Monday, February 22nd, 2010 04:17 pm (UTC)
Ну, собственно, без JS тут не обойтись. А использовать ли jQuery или onmousewheel — дело привычки.
Monday, February 22nd, 2010 04:18 pm (UTC)
ну что js, это понятно. но как именно?
Monday, February 22nd, 2010 04:20 pm (UTC)
две немаленькие библиотеки для одного-единственного действия. перебор, по-моему.
Но зачем бибилиотеки-то?! То, что ты сделал с помощью этих библиотек пишется не в одну, но в три строчки, без библиотек вообще.
Monday, February 22nd, 2010 04:21 pm (UTC)
глючит при быстром скроллинге - дергается в обратную сторону
Monday, February 22nd, 2010 04:21 pm (UTC)
Понять что ты написал с помощью библиотеки. Не бибилотека тебе придумала onmousewheel и прочее. Всё, что ты использовал — это $ вместо getElementByName и обобщённый от браузера установщик обработки сообщений (а там всего 2 варианта — IE и стандарт, различаются одним if'ом).
Monday, February 22nd, 2010 04:22 pm (UTC)
вот я и спрашиваю: как?
Monday, February 22nd, 2010 04:23 pm (UTC)
у меня не дергается. наверное, я недостаточно быстро кручу колесо
Monday, February 22nd, 2010 04:29 pm (UTC)
Ну, почитай про DOM уже наконец :)
Примерно так (давно не брал в руки шашек, могу наврать в тонких деталях):

var b = document.getElementByName('body');
if(b.attachEvent) { // Bloody IE
 b.attachEvent(
   'onmousewheel'
   function(ev, data) {
    b.scrollLeft -= data * 30;
    ev.preventDefault();
   }
 );
);
} else if(b.addEventListener) { // Saint w3c
 b.addEventListener(
   'mousewheel', 
   function(ev, data) {
    this.scrollLeft -= data * 30;
    ev.preventDefault();
   },
   false
 );
} else { // Something strange and old
 b.onmousewheel = function(ev, data) {
  b.scrollLeft -= data * 30;
  ev.preventDefault();
 };
}


Во всех случаях кроме W3C приходится делать замыкание, так как this ни в IE ни в Legacy правиьно в обработчикх сообщений не работает.
Monday, February 22nd, 2010 04:30 pm (UTC)
Возражение что это не 3 строчки не принимается, так как у меня форматирование красивее чем у тебя :)
Monday, February 22nd, 2010 04:31 pm (UTC)
я на тачпаде, он быстрее и больше событий дает, чем колесико со щелчком. плюс, он сразу по двум осям работает, может в этом дело.
ощущение противное, на реальном сайте раздражало бы.
Monday, February 22nd, 2010 04:33 pm (UTC)
А, я таки нарвал с data в mousewheel-евенте, там таки хитрее. Но не сильно:

http://adomas.org/javascript-mouse-wheel/

Вот тут всё написано.
Monday, February 22nd, 2010 04:34 pm (UTC)
спасибо. я просто не знал, по каким ключевым словам правильно искать, я же не настоящий сварщик :)
Monday, February 22nd, 2010 04:36 pm (UTC)
на первом попавшемся другом сайте работает нормально http://www.thehorizontalway.com/
Monday, February 22nd, 2010 04:36 pm (UTC)
у меня под рукой нет тачпада, дома попробую
Monday, February 22nd, 2010 04:38 pm (UTC)
Это ссылка из заголовка использованной тобой библиотеки :)
Я полез код читать и увидел сразу. И, да, оказывается тонкостей между бразерами таки больше (в данном конкретном случае) чем я думал. Про разную обраюботку сообщений я помнил, а вот про разную реализацию этого самого маусвила — нет.