Avatar billede linuxklovnen Nybegynder
23. februar 2005 - 23:52 Der er 8 kommentarer og
1 løsning

onmousemove i mozilla

Jeg har flg. funktion i mit JS:
function move() {
    xvalue = event.clientX + 10;
    yvalue = event.clientY + 10;
    document.all.im.style.pixelLeft = xvalue;
    document.all.im.style.pixelTop = yvalue;
}

'im' er en div der ser således ud:
<div style="position: absolute; left: -100; top: -100;" id="im">
Her skal teksten være
</div>

Scriptet virker fint i IExplorer, hvilket mange af brugerne alligevel benytter, mens det bugger i Mozilla FireFox. Hvad gør jeg? Det skal siges at jeg HAR prøvet at lave det om til event.pageX og Y - uden positivt resultat.

Jeg er lidt dårlig til JS, men håber i vil hjælpe :)
Avatar billede skovenborg Nybegynder
24. februar 2005 - 00:52 #1
Ja, det er en af de store forskelle mellem IE og Firefox omkring event-handling. event-variablen indeholder i IE automatisk event-objektet, hvorimod Mozilla modtager den som argument.
Normalt plejer jeg at komme ud om problemmet på denne måde:
function move(e) {
    e = (typeof e == "undefined") ? event : e;
    elm = document.getElementById("im").style;
    elm.left = ((typeof e.pageX == "number") ? e.pageX : e.clientX)+10+"px";
    elm.top = ((typeof e.pageY == "number") ? e.pageY : e.clientY)+10+"px";
}
mener det er sådan man kan gøre. Når du kalder funktionen skal du lige tilføje parametret:
onmousemove="move(event);" (eller er det this.event - det kan jeg ikke huske)
eller hvis du bruger
window.onmousemove = move;
Her skulle den gerne selv sende event-objektet med som første argument.
Avatar billede linuxklovnen Nybegynder
24. februar 2005 - 10:28 #2
Mange tak for svaret. Nu virker det fint, selvom jeg ingenting fatter af din kode :) Der er heller ikke længe til jeg går i gang med JS
Avatar billede roenving Novice
24. februar 2005 - 17:26 #3
-- kan den ikke slankes meget, skovenborg ?-)

function move(e) {
    xvalue = (e?e.pageX:event.clientX) + 10 + "px";
    yvalue = (e?e.pageY:event.clientY) + 10 + "px";
    document.getElementById('im').style.left = xvalue;
    document.getElementById('im').style.top = yvalue;
}
Avatar billede roenving Novice
24. februar 2005 - 17:26 #4
-- den burde også virke med onmousemove = move; !-)
Avatar billede skovenborg Nybegynder
24. februar 2005 - 18:25 #5
Jo, tak for slankekuren da :-)

Jeg tillader mig lige at svare alligevel - og angående onmousemove (uden window), så synes jeg bare det ser pænere ud med window før. Ved ikke hvorfor, men sådan har jeg altid følt at det skulle se ud (selvom jeg omvendt ikke synes window.alert fx er særlig pænt.
Avatar billede olebole Juniormester
25. februar 2005 - 00:09 #6
<ole>

skovenborg >> Det er faktisk altid en god idé explicit at skrive 'window', når det står der implicit.

JS fiser nemlig først ud i det globale variabel-scope og leder efter f.eks. et 'løst' objekt, der hedder 'location'. Det eksisterer ikke, hvorefter bl.a. window-objektet ledes igennem for en evt. poperty, der hedder 'location'.
Når denne findes, kan window-objektets loaction-property - som i sig selv er et objekt - få sat sin href-property til en værdi:
    location.href = "http://www.google.dk";

- derfor hellere:
    window.location.href = "http://www.google.dk";

At vi så er nogle dovne sjuskehoveder, er en helt anden ting. Vi lægger ikke i det daglige mærke til den slags uhensigtsmæssigheder, fordi det som oftest er småting, vi sidder og laver. Kaster man sig ud i store JS-applikationer, opdager man dog, at det gælder om at økonomiserer på alle hylder

En anden jeg selv er ved at implementere i min egen kode er ('a' er et array):
  for (i=0, j=a.length; i<j; i++) {
      a[i] = "Har været her";
  }

- i stedet for:
  for (i=0 i<a.length; i++) {
      a[i] = "Har været her";
  }

Der er jo ingen somhelst grund til, at jeg slår længden af mit array op i hvert gennemløb af min løkke (den kunne jo mageligt være på tusind elementer). Det kan jeg nøjes med at gøre én gang - og derefter genbruge min reference til tallet.
Ikke den store gevindst alene ... men 'mange bække små' betyder noget, hvis man anlægger en stor kanal  ;o)

/mvh
</bole>
Avatar billede roenving Novice
25. februar 2005 - 12:13 #7
*lol*

-- og jeg er helt enig, og overvejede faktisk om jeg skulle sætte window. på eventen, men havde mere brug for overskueligheden i sætningen !-)
Avatar billede skovenborg Nybegynder
25. februar 2005 - 18:01 #8
Hehe, ja det må jeg også være enig i - har nu aldrig tænkt så meget over den med array'et, men det er jo helt rigtigt :-)
Avatar billede olebole Juniormester
25. februar 2005 - 23:38 #9
roenving >> Det er jo det evige (ud)dannelses-problem ... hvormegen viden skal 'eleven' belemres med i den aktuelle situation.
Hvormeget skal 4-årige Sascha have at vide om forhud, klitoris, livmodermund, klamydia og hvad der ellers hører til på den hylde, når hun gerne vil vide, hvorfra moster Brittas baby egentlig kom fra?
Ikke underligt, storken har fået sit lettere apparte bijob ... det skyldes ikke _kun_ forældrenes blufærdighed  ;o)

Netop p.gr.a. overskuelighed er det sjældent, jeg bruger mine 'nye' for-løkker i eksempler på E.

Et andet eksempel er brugen af * i SQL-kald. Når man skal vise nogle principper for SQL, er * jo genial som wildcard for de søgte felter ... men i virkelighedens verden bør den bruges så sparsomt, som overhovedet muligt.
Da skræmmende mange 'professionelle' kodere stort set har hele deres programmeringsviden fra tuts på WWW, er det ikke underligt, der kan findes så eksorbitant mange *'er i løsninger, der er solgt som værende professionelle.
Seneste eksempel, jeg selv har set, var en stor, dansk nyhedsportal, hvor den server, SQL'en lå på, meldte om en kontinuerlig belastning på 120% ...!

Der er lidt Catch22 over, hvormeget man skal oplyse, når man underviser (og besvarelse af spm. på E er jo en form for undervisning).

You're damned if you do ... 'n' you're damned if you don't  :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester