Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Указать обьект для прокрутки (https://javascript.ru/forum/dom-window/20492-ukazat-obekt-dlya-prokrutki.html)

AndrejsG 08.08.2011 12:37

Указать обьект для прокрутки
 
Можно ли каким нибудь образом указать который элемент страницы должен прокручиваться.

Например: окно броузера, в окне есть прокрутка, т.к. там всякие элементы. И есть див, у которого тоже есть прокрутка. Есть возможность указать как нибудь, что при прокрутке колёсика мыши, должно прокручиваться не содержимое броузера, а содержимое дива? Вcя фишка в том, что на див не нужно кликать, он появился например при помощи скрипта, и на нем автоматический фокус.

devote 08.08.2011 16:14

перехватывай событие.

function mufuncwheel( e ) {
   // тут обрабатывай событие прокрутки колеса мыши.

  e = e || window.event;

  if (e.stopPropagation) e.stopPropagation();
  else e.cancelBubble = true;
  if (e.preventDefault) e.preventDefault();
  else e.returnValue = false;
}

if ( document.addEventListener ) {
  document.addEventListener( 'DOMMouseScroll', mufuncwheel, false );
} else {
  document.attachEvent( 'onDOMMouseScroll', mufuncwheel );
}

AndrejsG 08.08.2011 17:01

Цитата:

Сообщение от devote (Сообщение 118909)
перехватывай событие.

function mufuncwheel( e ) {
   // тут обрабатывай событие прокрутки колеса мыши.

  e = e || window.event;
  if (!e) {
    e = window.event;
  }
  if (e.stopPropagation) e.stopPropagation();
  else e.cancelBubble = true;
  if (e.preventDefault) e.preventDefault();
  else e.returnValue = false;
}

if ( document.addEventListener ) {
  document.addEventListener( 'DOMMouseScroll', mufuncwheel, false );
} else {
  document.attachEvent( 'onDOMMouseScroll', mufuncwheel );
}

А можете немного прокомментировать свой ответ :)

devote 08.08.2011 17:08

// Функция для обработки колеса мыши на документе
function mufuncwheel( e ) {
   // тут обрабатывай событие прокрутки колеса мыши.

  // собственно само событие, для ИЕ берем из window
  e = e || window.event;

  // Предотвращаем дальнейшее всплытие события
  if (e.stopPropagation) e.stopPropagation();
  else e.cancelBubble = true;

  // Отменяем действие по умолчанию для события
  if (e.preventDefault) e.preventDefault();
  else e.returnValue = false;
}

// Вешаем событие на документ
if ( document.addEventListener ) {
  document.addEventListener( 'DOMMouseScroll', mufuncwheel, false );
} else {
  document.attachEvent( 'onDOMMouseScroll', mufuncwheel );
}

dmitriymar 08.08.2011 17:10

а как же событие onmousewheel для ие?

devote 08.08.2011 17:19

Цитата:

Сообщение от dmitriymar
а как же событие onmousewheel для ие?

:)
window.onmousewheel = mufuncwheel;

AndrejsG 08.08.2011 17:24

))) Спасибо, правда нужно разобраться, не совсем доганяю как это мне поможет.

devote 08.08.2011 17:32

ну дальше все проще после строки e = e || window.event;

вставляй напирмер код:
if ( e.wheelDelta ) {
  wheelDelta = e.wheelDelta / 120;
} else if ( e.detail ) {
  wheelDelta = -e.detail / 3;
}

if ( wheelDelta < 0 ) {
  // мышь крутанули вниз
  // тут можешь прибавлять значение scrollTop своего дива
} else if ( wheelDelta > 0 ) {
  // мышь крутанули вверх
  // тут можешь уменьшать значение scrollTop своего дива
}

dmitriymar 08.08.2011 17:42

Цитата:

Сообщение от devote
document.attachEvent( 'onDOMMouseScroll', mufuncwheel );

вот эта строчка для подключения события onmousewheel в ие ,но и9 поддерживает как addEventListener так и attachEvent. ...так что подключение в 9 не сработает через ветвление у тебя.первым поставь attachEvent вторым addEventListener

devote 08.08.2011 17:49

dmitriymar,не рассказывай мне сказки... сам везде так делаю как я описал выше и пашет даже в ИЕ5. ;)


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