Вход

Просмотр полной версии : Как удалить preventDefault();


nematod
17.09.2011, 11:56
Замораживаю scroll окна следующим скриптом:

var prevent = function(event) {
window.scrollTo(0, 0);
event ? event.preventDefault() : window.event.returnValue = false;
};

if(window.addEventListener) {
var array = ['DOMMouseScroll', 'mousewheel', 'scroll'],
i = array.length;

while(i--) {
window.addEventListener(array[i], prevent, false);
}
}
else window.onmousewheel = document.onmousewheel = window.onscroll = prevent;


Пытаюсь разморозить следующим:


if(window.addEventListener) {
var array = ['DOMMouseScroll', 'mousewheel', 'scroll'],
i = array.length;

while(i--) {
window.removeEventListener(array[i], prevent, false);
}
}
else window.onmousewheel = document.onmousewheel = window.onscroll = null;


Работае в IE без проблем, в Opere не хочет.
Подскажите как решить данную проблему?

nematod
18.09.2011, 16:41
Есить добрые люди на этом свете или нет?
Уже два дня колупаюсь, ничего не получается(((((

melky
18.09.2011, 18:02
если не получается заморозить скролл, пробуй по -другому. через CSS, к примеру

nematod
18.09.2011, 18:11
Дело в том, что замораживает он отлично, а вот разморозить его потом проблема.
Вот этот код Опера видит отлично, и замораживается и размораживается скролл:
document.onmousewheel = function(e){ e.preventDefault(); }
а этот размораживает:
document.onmousewheel = null;
Но проблема в том, что IE не понимает этот код((

P.S. "В javascripte же нет неришимых задач... ". Хочется в это верить))

Magneto
18.09.2011, 19:30
function prevent (e) {
e ? e.preventDefault() : window.event.returnValue = false;
}

// Запрещаем прокрутку страницы колесиком мышки
if (document.onmousewheel === undefined) {
document.addEventListener('DOMMouseScroll', prevent, false);
} else {
document.onmousewheel = prevent;
}

// Снимаем запрет
if (document.onmousewheel === undefined) {
document.removeEventListener('DOMMouseScroll', prevent, false);
} else {
document.onmousewheel = null;
}

monolithed
18.09.2011, 19:50
Но проблема в том, что IE не понимает этот код((
потому что для IE нужно window (http://www.quirksmode.org/dom/events/scroll.html)

А для совсем старых версий браузеров можно еще добавить:
var delta = 0;

// IE/Opera
if (event.wheelDelta) {
delta = event.wheelDelta/120;
if (window.opera) delta = -delta;
}
// FF
else if (event.detail) {
delta = -event.detail/3;
}

// в IE9+ добавили обработчик wheel
// и в обработчике проверять delta на значение больше нуля

nematod
18.09.2011, 20:01
Сделал вообще вот так:

//Запрещаю прокрутку
var prevent = function(event){ event ? event.preventDefault() : window.event.returnValue = false;};
window.onmousewheel = document.onmousewheel = window.onscroll = prevent;

//Снимаю запрет
window.onmousewheel = document.onmousewheel = window.onscroll = null;


Работает и в Опере и в IE. В других ещё не пробовал.

Magneto
18.09.2011, 20:25
Cледующий пост будет:

Ааа! Как удалить preventDefault()? Это не работает в Firefox.

nematod
18.09.2011, 21:22
Cледующий пост будет:

Ааа! Как удалить preventDefault()? Это не работает в Firefox.

:yes: