Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблема со скриптом в Firefox (https://javascript.ru/forum/events/6581-problema-so-skriptom-v-firefox.html)

ArmagedDance 07.12.2009 10:21

Проблема со скриптом в Firefox
 
Скрипт, заставляющий двигаться картинку за курсором мыши.
в Опере и в ИЕ работает нормально, в файрфоксе картинка не двигается. Почему?

Код:

xm=0
ym=0
OlsW=lighter.width/2
OlsH=lighter.height/2
function Moveimg(event){
x=xm
y=ym
lighter.style.left=x
lighter.style.top=y
setTimeout("Moveimg()",100)
}
function doMouse(event){
if(window.event)
xm=window.event.x-OlsW//начальная точка подвижного окна
ym=window.event.y-OlsH
if(e)
xm=window.e.clientX-OlsW
ym=window.e.clientY-OlsH

}
document.onmousemove=doMouse
Moveimg(event)

двигаемый рисунок - PNG файл c прозрачностью.

Kolyaj 07.12.2009 12:30

lighter.style.left=x + 'px';
lighter.style.top=y + 'px';

ArmagedDance 07.12.2009 13:42

Не работает.

Откуда px и py взяли?

ArmagedDance 07.12.2009 14:12

Кто еще какие варианты может предложить?

Kolyaj 07.12.2009 14:47

Цитата:

Сообщение от ArmagedDance
Откуда px и py взяли?

Это вы их откуда взяли?

ArmagedDance 07.12.2009 14:53

Ну, px - где эта переменная задается у меня в скрипте? что за параметр?

Kolyaj 07.12.2009 14:59

Это строка.

Gozar 07.12.2009 15:49

px - это единица измерения, нужна она для того, чтобы программа понимала, что вы задаете смещение в px (пикселах)
.left = x + 'px'; // означает  10px ... 113px и т.д., а не просто 10 ... 113 и т.д.

ArmagedDance 07.12.2009 16:52

Предложенная конструкция все равно не спасает скрипт в файрфокс.

Kolyaj 07.12.2009 17:16

Да у вас там, честно говоря, трэш, а не код, он и в остальных-то браузерах работать не должен.

subzey 07.12.2009 18:51

xm=0
ym=0
OlsW=lighter.width/2
OlsH=lighter.height/2

function Moveimg(event){ /* зачем тут параметр? */
	x=xm
	y=ym
	lighter.style.left=x /* значения в пикселах! */
	lighter.style.top=y /* значения в пикселах! */
	setTimeout("Moveimg()",100) /* запуск без параметра через .1 секунды */
}

function doMouse(event){
	if(window.event) /* если ... */
	xm=window.event.x-OlsW /* ... то */
	ym=window.event.y-OlsH /* выполнится в любом случае, вызвав ошибку в менее добрых, чем Опера браузерах */
	if(e) /* почти наверняка undefined! */
	xm=window.e.clientX-OlsW /* никогда не выполнится */
	ym=window.e.clientY-OlsH /* В этом месте поток аварийно рушится, но это неважно — все важное мы уже сделали */

}

document.onmousemove=doMouse

Moveimg(event) /* кто такой этот эвент? */

Не забывайте про фигурные скобочки! И почитайте самоучитель на этом сайте, он поможет Вам разобраться в яваскрипте, а не просто заниматься копипастом.

ArmagedDance 08.12.2009 07:48

Но работает же. :)

Gvozd 08.12.2009 08:18

Цитата:

Сообщение от ArmagedDance
Но работает же.

вы считаете это достойным оправданием, чтобы писать отвратительный код?

ArmagedDance 08.12.2009 08:49

я его не писал, нашел и адаптировал, то есть адаптирую, под свой сайт.
:)

Kolyaj 08.12.2009 09:17

Цитата:

Сообщение от ArmagedDance
Но работает же.

Но не везде же.

ArmagedDance 08.12.2009 13:12

Все еще не устранил глюк в FF.(((

ArmagedDance 08.12.2009 14:13

Довел скрипт до такого вида, не работает все равно.

xm = 0;
ym = 0;
OlsW = lighter.width/2;
OlsH = lighter.height/2;
function Moveimg(){
x = xm;
y = ym;
lighter.style.left = x;
lighter.style.top = y;
setTimeout("Moveimg()",100)
}
function doMouse(){
if(window.event)
{
xm = window.event.x-OlsW;
ym = window.event.y-OlsH;
}
if(window.event)
{
xm = window.event.clientX-OlsW;
ym = window.event.clientY-OlsH;
}
}
document.onmousemove = doMouse;
Moveimg();

Kolyaj 08.12.2009 14:26

ArmagedDance,
а вы скрипты методом научного тыка пишете? А то ведь там логика напрочь местами отсутствует.

ArmagedDance 08.12.2009 15:18

Цитата:

Сообщение от Kolyaj (Сообщение 37465)
ArmagedDance,
а вы скрипты методом научного тыка пишете? А то ведь там логика напрочь местами отсутствует.

Я только начинающий в этом деле :)
Если не лень, поясните, пожалуйста, где отсутствует логика.

Kolyaj 08.12.2009 15:32

Цитата:

Сообщение от ArmagedDance
if(window.event)
{
xm = window.event.x-OlsW;
ym = window.event.y-OlsH;
}
if(window.event)
{
xm = window.event.clientX-OlsW;
ym = window.event.clientY-OlsH;
}

Вот эти два условия, например.


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