Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Заморозка скроллинга страницы (https://javascript.ru/forum/css-html-browser/21635-zamorozka-skrollinga-stranicy.html)

nematod 18.09.2011 17:05

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

melky 19.09.2011 00:19

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

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>

nematod 19.09.2011 10:56

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


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