Показать сообщение отдельно
  #2 (permalink)  
Старый 18.09.2011, 23: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>
Ответить с цитированием