Получение положения курсора и размеров окна
Добрый вечер.
У меня такой вопросик. Сам я программирую на ActionScript 3, немного сродни Js, но все равно не могу найти ошибку. В общем с горем пополам выдавил из себя скрипт. Он Возвращает положения курсора и размеры окна браузера. Все это потом использует Flash. То что я накалякал: <script type="text/javascript"> window.onload=function(){ getClientWidth(); getClientHeight(); } window.onmousemove = mousemoved; function mousemoved() { getCurrXMousePos(); getCurrYMousePos(); } function getCurrXMousePos(){ var posx = 0; if (!e) e = window.event; if (e.pageX) { posx = e.pageX; } else if (e.clientX) { posx = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft; } return posx; } function getCurrYMousePos(){ var posy=0; if (!e) e = window.event; if (e.pageY) { posy = e.pageY; } else if (e.clientY) { posy = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop; } return posy; } function getClientWidth(){ return window.document.compatMode=='CSS1Compat' && !window.opera? document.documentElement.clientWidth:document.body.clientWidth; } function getClientHeight(){ return window.document.compatMode=='CSS1Compat' && !window.opera? document.documentElement.clientHeight:document.body.clientHeight; } </script> далее если кому интересно просто сохраняю эти данные во флеше: // linking with JavaScript ExternalInterface.addCallback("getCurrXMousePos", setCurrXMousePos); ExternalInterface.addCallback("getCurrYMousePos", setCurrYMousePosPos); ExternalInterface.addCallback("getClientWidth", setClientWidth); ExternalInterface.addCallback("getClientHeight", setClientHeight); //updating Current X and Y positions of cursor function setCurrXMousePos (value:Number):void { CurrXMousePos = value; } function setCurrYMousePosPos (value:Number):void { CurrYMousePos = value; } function setClientWidth (value:Number):void { stW_half = value / 2; } function setClientHeight(value:Number):void { stH = value; } Со стороны флеша обибок быть не должно, но в текстовом поле во встроенной флешке: out_txt.text = "Cursor X pos: "+setCurrXMousePos; out_txt.text += ", Cursor Y pos: "+setCurrYMousePos; Постоянно координаты по 0. Где у меня ошибка, подскажите пожалуйста. Если что - с меня материальное вознаграждение на пиво по вебмани. |
|
Хорошо, я изменил скрипт и постарался протестировать его.
<script type="text/javascript"> window.onload=function(){ getClientWidth(); getClientHeight(); //alert("Doc loaded") } window.onmousemove = mousemoved; function mousemoved(e) { getCurrXMousePos(e); getCurrYMousePos(e); alert("Mouse moved") } function getCurrXMousePos(){ var posx = 0; if (!e) e = window.event; if (e.pageX) { posx = e.pageX; } else if (e.clientX) { posx = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft; } return posx; alert('posx'); } function getCurrYMousePos(){ var posy=0; if (!e) e = window.event; if (e.pageY) { posy = e.pageY; } else if (e.clientY) { posy = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop; } return posy; alert('posy'); } function getClientWidth(){ return window.document.compatMode=='CSS1Compat' && !window.opera? document.documentElement.clientWidth:document.body.clientWidth; alert('getClientWidth'); } function getClientHeight(){ return window.document.compatMode=='CSS1Compat' && !window.opera? document.documentElement.clientHeight:document.body.clientHeight; alert('getClientHeight'); } </script> если раскомментировать то работает только alert("Doc loaded"). То есть документ грузится, но перемещения мыши не отслеживаются. |
window.onload тебе тут нафиг не нужен, алерты после ретурна никогда не сработают. Во влеше дождись когда будет готов к работе яваскрит, иногда флешь загружается быстрее чем яваскрипт готов к работе.
function fixEvent( e ) { e = e || window.event; if ( e.pageX == null && e.clientX != null ) { var html = document.documentElement, body = document.body; e.pageX = e.clientX + ( html && html.scrollLeft || body && body.scrollLeft || 0 ) - ( html.clientLeft || 0 ); e.pageY = e.clientY + ( html && html.scrollTop || body && body.scrollTop || 0 ) - ( html.clientTop || 0 ); } if ( !e.which && e.button ) { e.which = e.button & 1 ? 1 : ( e.button & 2 ? 3 : ( e.button & 4 ? 2 : 0 ) ); } return e; } var posx = 0, posy = 0; window.onmousemove = function( e ) { e = fixEvent( e ); posx = e.pageX; posy = e.pageY; } function getCurrXMousePos() { return posx; } function getCurrYMousePos() { rutern posy; } function getClientWidth() { return window.document.compatMode == 'CSS1Compat' && !window.opera ? document.documentElement.clientWidth : document.body.clientWidth; } function getClientHeight() { return window.document.compatMode == 'CSS1Compat' && !window.opera ? document.documentElement.clientHeight : document.body.clientHeight; } |
спасибо огромное, devote !
Ваш скрипт работает! Окончательный вариант точно такой, как вы написали! |
Часовой пояс GMT +3, время: 06:18. |