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

dmitriymar 08.08.2011 18:10

devote,
я не отрицаю что если добавить window.onmousewheel = mufuncwheel; он будет работать везде. но document.attachEvent-это подключение событий по модели ие ,но вот в ие нет события DOMMouseScroll,есть событие onmousewheel. лучше валидный код изначально писать чем натыкать всё подряд....

AndrejsG 08.08.2011 18:27

Если вас не затруднит, можете подвести итог и написать как это выглядеть должно. Я был бы очень признатален.

devote 08.08.2011 18:32

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

  // собственно само событие, для ИЕ берем из window
  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 своего дива
  }

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

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

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

AndrejsG 08.08.2011 18:34

А в функцию в качестве переменной "е" что нужно задавать?

devote 08.08.2011 18:39

ничего, туда DOM свое событие засунет... все что тебе нужно это обрабатывать твой див там где я описал... остального ничего не надо... самому вызывать эту функцию не надо.

dmitriymar 08.08.2011 18:46

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

AndrejsG 09.08.2011 11:05

На сколько я понимаю я могу сделать так, когда заканчивается финкция где создается див, я проверяю

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

это в свою очередб вызывает функцию mufuncwheel в которой я выставляю

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


почему то у меня не работает mufuncwheel сделал там алерт, ничего не вышло.

devote 09.08.2011 11:18

еп.

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

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

  if ( e.wheelDelta ) {
    wheelDelta = e.wheelDelta / 120;
  } else if ( e.detail ) {
    wheelDelta = -e.detail / 3;
  }

  var elem = document.getElementById('my_div');

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

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

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

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


<html>
<body>
  <div id="my_div" style="width: 200px; height: 200px; overflow: auto;">многа контента, тут очень много что даже появился скролл</div>
</body>
</html>

AndrejsG 09.08.2011 18:59

Большое спасибо всё работает ) только последний вопрос, а при вызове mufuncwheel я могу в неё передать переменную (ид дива к которому применять прокрутку)?

devote 09.08.2011 19:43

Цитата:

Сообщение от AndrejsG
а при вызове mufuncwheel я могу в неё передать переменную (ид дива к которому применять прокрутку)?

нет, передать в нее нельзя, но можешь в ней юзать внешнюю переменную созданную за пределами функции но не за пределами родителя.


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