Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как удалить preventDefault(); (https://javascript.ru/forum/misc/21607-kak-udalit-preventdefault-%3B.html)

nematod 17.09.2011 11:56

Как удалить preventDefault();
 
Замораживаю 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

Цитата:

Сообщение от nematod
Но проблема в том, что IE не понимает этот код((

потому что для IE нужно window

А для совсем старых версий браузеров можно еще добавить:
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

Цитата:

Сообщение от Magneto (Сообщение 127012)
Cледующий пост будет:

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

:yes:


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