Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Посчитать скролл (https://javascript.ru/forum/events/30792-poschitat-skroll.html)

_Ivan 16.08.2012 10:54

Посчитать скролл
 
<p>&nbsp;</p>...<p>&nbsp;</p><!-- отступы -->
<div id='id'>0</div>
<p>&nbsp;</p>...<p>&nbsp;</p><!-- еще отступы -->


var html=document.documentElement,body=document.body;

function addEvent(el,type,fun){
		if(el.addEventListener){el.addEventListener(type,fun,false);}
		else if(el.attachEvent){el.attachEvent('on'+type,fun);}
}

function getScrollTop(){
  var a;
  if(window.pageXOffset!=undefined){a=pageYOffset;}
	else a=(html.scrollTop||body&&body.scrollTop||0)-html.clientTop;
	document.getElementById('id').innerHTML=a;
}

addEvent(window, 'DOMMouseScroll', getScrollTop);/* Gecko */
addEvent(window, 'mousewheel',getScrollTop);/* Opera */
addEvent(document, 'mousewheel', getScrollTop);/* IE */


При всплывании события скролла ф-я getScrollTop() выдает старые значения, а мне надо новые. Как заставить getScrollTop() выполняться после самого обработчика DOMMouseScroll? Спасибо

Deff 16.08.2012 11:54

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr">
<head>

</head>
<body style="height:7800px;">




<p>&nbsp;</p>...<p>&nbsp;</p><!-- отступы -->
<div id='id' style="border:red solid 1px;min-width:42px;position:fixed;top:30%">0</div>
<p>&nbsp;</p>...<p>&nbsp;</p><!-- еще отступы -->



<script type="text/javascript">
var html=document.documentElement,body=document.body;

function addEvent(el,type,fun){
		if(el.addEventListener){el.addEventListener(type,fun,false);}
		else if(el.attachEvent){el.attachEvent('on'+type,fun);}
}

function getScrollTop(){
  var a;
  if(window.pageXOffset!=undefined){a=pageYOffset;}
	else a=(html.scrollTop||body&&body.scrollTop||0)-html.clientTop;
	document.getElementById('id').innerHTML=a;
}

addEvent(window, 'DOMMouseScroll',function (){setTimeout('getScrollTop()',12)});/* Gecko */
addEvent(window, 'mousewheel',function (){setTimeout('getScrollTop()',12)});/* Opera */
addEvent(document, 'mousewheel',function (){setTimeout('getScrollTop()',12)});/* IE */
</script>





</body>
</html>

_Ivan 16.08.2012 12:25

Deff, спасибо.
Совсем запутался с очередностью обработчиков всплывания, я думал, что getScrollTop() имеет приоритет перед DOMMouseScroll, последняя выполняется после того, как отработает первая, а от введения задержки у меня совсем разум помутнел. Надо разбираться.


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