Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.09.2011, 17:05
Аспирант
Отправить личное сообщение для nematod Посмотреть профиль Найти все сообщения от nematod
 
Регистрация: 09.02.2010
Сообщений: 87

Заморозка скроллинга страницы
Замораживаю 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;


Почему этот скрипт не работает в Opere?
Ответить с цитированием
  #2 (permalink)  
Старый 19.09.2011, 00:19
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

предлагаю свою версию заморозки скролла

var locked;

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


document.getElementsByTagName("button")[0].onclick = function() {

    var freezed = +this.getAttribute("freezed");



          window.addEventListener &&

               ['DOMMouseScroll', 'mousewheel', 'scroll'].forEach(function(a) {
                    window[ (freezed?"remove":"add")+'EventListener' ] (a, prevent, false);
               })
    
          || 

               (window.onmousewheel =
               document.onmousewheel =
               window.onscroll = (freezed?null:prevent));

           
     locked = window.innerWidth ? window.pageYOffset : document.documentElement && document.documentElement.clientWidth ? document.documentElement.scrollTop : document.body.clientWidth ? document.body.scrollTop : 0;

               
     this.setAttribute("freezed", ++freezed % 2);
}


пример :

проверил во всем... IE7+. работает вроде

<button freezed="0" style="position:fixed">freeze</button>





Aenean eu adipiscing neque. Nam non urna ipsum. Cras dapibus, urna vitae iaculis pellentesque, nisl tellus euismod lacus, quis fringilla massa felis id urna. Sed porta dui nec felis aliquet sagittis. Aliquam erat volutpat. Aliquam aliquam dolor eu quam molestie vehicula. Morbi facilisis eleifend felis vitae semper. In quis sapien magna, ut convallis purus. Donec iaculis tincidunt justo, eu eleifend tortor luctus tristique. Sed eget elit eget libero consequat dapibus quis a leo. Maecenas pretium suscipit turpis nec mollis. Nunc vulputate dui risus. Proin sed nunc lacinia metus feugiat semper. Suspendisse facilisis pharetra ultrices.

Donec congue, sem et dapibus posuere, lorem metus dapibus lacus, at consectetur ipsum nibh ut lectus. Praesent sed augue vitae lorem mollis dapibus. Curabitur auctor, risus volutpat porta rutrum, lacus odio mollis risus, eget molestie erat augue ut nulla. Phasellus tincidunt lacus vel orci aliquam scelerisque. Maecenas et orci lacus. Fusce in odio orci, at interdum neque. Curabitur sit amet sapien dolor, id pulvinar arcu. Integer vel mattis quam.

Pellentesque hendrerit, nulla a dictum pharetra, mauris augue ultricies magna, aliquet ornare mi ipsum in magna. Aenean at suscipit leo. Praesent pulvinar tempor vehicula. Nullam tempus risus at nisi dapibus ultrices. Nunc laoreet neque at neque interdum malesuada. Cras mauris justo, pretium eu interdum ac, aliquam id nunc. Aliquam dapibus laoreet purus eget euismod. Aliquam dui orci, molestie non pulvinar in, pulvinar id lectus. Praesent
<script>
var locked;

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


document.getElementsByTagName("button")[0].onclick = function() {

    var freezed = +this.getAttribute("freezed");



          window.addEventListener &&

               ['DOMMouseScroll', 'mousewheel', 'scroll'].forEach(function(a) {
                    window[ (freezed?"remove":"add")+'EventListener' ] (a, prevent, false);
               })
    
          || 

               (window.onmousewheel =
               document.onmousewheel =
               window.onscroll = (freezed?null:prevent));

           
     locked = window.innerWidth ? window.pageYOffset : document.documentElement && document.documentElement.clientWidth ? document.documentElement.scrollTop : document.body.clientWidth ? document.body.scrollTop : 0;

               
     this.setAttribute("freezed", ++freezed % 2);
}



</script>
Ответить с цитированием
  #3 (permalink)  
Старый 19.09.2011, 10:56
Аспирант
Отправить личное сообщение для nematod Посмотреть профиль Найти все сообщения от nematod
 
Регистрация: 09.02.2010
Сообщений: 87

Спасибо за помощь.
Очередной раз убеждаюсь, что это очень полезный форум.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет скроллинга страницы nematod Общие вопросы Javascript 14 16.09.2011 21:02
условие определенной страницы jQuery makingpretty jQuery 0 22.06.2011 11:17
Загрузить элементы документа с другой страницы alexrussia Events/DOM/Window 10 25.03.2011 10:17
Порядок загрузки страницы и javascript prog90 Events/DOM/Window 9 18.12.2010 21:42
Вычисление высоты страницы. keysi_ Events/DOM/Window 2 03.08.2010 18:03