Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.08.2011, 00:54
Новичок на форуме
Отправить личное сообщение для torreto Посмотреть профиль Найти все сообщения от torreto
 
Регистрация: 12.08.2011
Сообщений: 3

Получение положения курсора и размеров окна
Добрый вечер.
У меня такой вопросик. Сам я программирую на 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.

Где у меня ошибка, подскажите пожалуйста.
Если что - с меня материальное вознаграждение на пиво по вебмани.

Последний раз редактировалось torreto, 12.08.2011 в 00:57.
Ответить с цитированием
  #2 (permalink)  
Старый 12.08.2011, 01:03
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

  1. вы в функции не принимаете e, этот код будет работать в ie & chrome
    function getCurrXMousePos*!*()*/!*{
    	if (!e) e = window.event;
           .....
    }
    

  2. функция не передает объект события. получается, о нем никто ничего не знает. хотя бы так поставьте
    window.onmousemove = function mousemoved(e) {
     getCurrXMousePos(e);
     getCurrYMousePos(e);
    }
    

  3. и самое важное. догадайтесь сами, почему функция возвращает 0.
    function getCurrXMousePos(){
    	var posx = 0;
             x = ......
             return posx;
    }
    
Ответить с цитированием
  #3 (permalink)  
Старый 12.08.2011, 01:47
Новичок на форуме
Отправить личное сообщение для torreto Посмотреть профиль Найти все сообщения от torreto
 
Регистрация: 12.08.2011
Сообщений: 3

Хорошо, я изменил скрипт и постарался протестировать его.
<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").
То есть документ грузится, но перемещения мыши не отслеживаются.
Ответить с цитированием
  #4 (permalink)  
Старый 12.08.2011, 05:29
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

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, 12.08.2011 в 05:36.
Ответить с цитированием
  #5 (permalink)  
Старый 17.08.2011, 17:01
Новичок на форуме
Отправить личное сообщение для torreto Посмотреть профиль Найти все сообщения от torreto
 
Регистрация: 12.08.2011
Сообщений: 3

спасибо огромное, devote !
Ваш скрипт работает!
Окончательный вариант точно такой, как вы написали!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение позиции в курсора в textArea? mister_maxim Internet Explorer 0 03.06.2011 09:50
Смена картинок в зависимости от положения курсора мыши antonio_vrn Events/DOM/Window 3 31.05.2011 22:07
Динамическое получение ширины и высоты окна браузера Esseron Элементы интерфейса 2 04.04.2011 16:00
Получение зн-я из одного открытого окна в другое без перезагрузки последнего Tihondrius Events/DOM/Window 1 14.03.2010 21:38
Подмена размеров окна браузера Александр Иванов Events/DOM/Window 5 09.02.2010 11:27