/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Mouseover virker ikke ens i forskellige br~
Fra : Malene Maare


Dato : 15-10-07 10:47

Hej,

Er der nogen af jer skrappe hoveder, der kan hjælpe mig med dette
problem:
Jeg har fået Dreamweaver til at lave mouseover fkt. på mine
thumbs.

I Firefox (1.5.0.12) virker det efter hensigten. I Explorer
(6.0.2900 xx) er det naboen der skifter billede og i Opera (9.02)
er der ingen mouseover??

Hvad har jeg gjort forkert?

Se her på http://www.strandhytter.dk/foto3.html

Venlig hilsen
Malene

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Birger (15-10-2007)
Kommentar
Fra : Birger


Dato : 15-10-07 12:58

"Malene Maare" <doriskarloffNOSPAM@gmail.com> skrev i en meddelelse
news:47133707$0$90267$14726298@news.sunsite.dk...
> Hej,
>
> Er der nogen af jer skrappe hoveder, der kan hjælpe mig med dette
> problem:
> Jeg har fået Dreamweaver til at lave mouseover fkt. på mine
> thumbs.
>
> I Firefox (1.5.0.12) virker det efter hensigten. I Explorer
> (6.0.2900 xx) er det naboen der skifter billede og i Opera (9.02)
> er der ingen mouseover??
>
> Hvad har jeg gjort forkert?
>
> Se her på http://www.strandhytter.dk/foto3.html
>
> Venlig hilsen
> Malene
>
> --
> Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
> - Pædagogiske tutorials på dansk
> - Kom godt i gang med koderne
> KLIK HER! => http://www.html.dk/tutorials


I IE7 er det også det forkerte der skifter.

Din kode er ikke specielt overskuelig.
Det sparer ganske vist lidt plads, at skrive alting ud i een smøre, men...
I dine <img..> skal name skal hedde id - det er formentlig derfor det ikke
virker i nogle browsere. name anvendes kun i <form>, og jeg er ikke sikker
på at det er lovligt bare at nummerere elementer.
Det ligner også en frygtelig masse indviklet programmering for at udføre en
meget simpel operation.

onmouseover ="this.src='img/s_X_over.jpg'"
onmouseout ="this.src='img/s_X_out.jpg'"

på img taget, vel at mærke, hvor X er billed nummeret, skulle kunne gøre
det, hvis jeg ellers har tydet tingene rigtigt
eller hvis <a> dækker over billedet, sætte dens:

onmouseover(eller out) = "document.getElementById(
'X').src='img/s_X_over(eller out).jpg'";

Filnavnet kan evt. udskiftes med en indexering i det array du preloader
billederne i - hvis du slev kan finde ud af indekset, for jeg kan ikke...
onmouseover(eller out) = "document.getElementById(
'X').src=document.MM_p[Y].src";
hvor Y er indekset af det billede du vil have vist.

Du har den her til at hente billederne :
function MM_preloadImages() { //v3.0
var d=document;
if ( d.images){
if ( !d.MM_p) d.MM_p = new Array();
var i, j=d.MM_p.length, a=MM_preloadImages.arguments;
for(i=0; i<a.length; i++)
if ( a[i].indexOf("#") != 0){
d.MM_p[j]=new Image;
d.MM_p[j++].src=a[i];
}
}
}
og den kaldes med out og over billeder rodet sammen.
Hvorfor ikke to billeder i hvert element, eller et array til out og et til
over?
I tilgift starter din nummerering af billederne med 1, mens indekseringen i
arrayet starter med 0.
Arrayet document.MM_p anvendes desuden aldrig til noget, så du kan lige så
godt bare oprette et Image, som ikke har nogen reference andre steder.
Billedet vil svjv stadig blive hentet til cache.
Jeg ved ikke om javascript har en garbagecollector som f.eks Java og nogle
af de andre sprog - hvis det har, vil document.MM_p alligevel blive fjernet,
fordi den ikke bruges.
Linien
if ( !d.MM_p) d.MM_p = new Array();
opretter et nyt array, hvis der ikke allerede findes en variabel i document
der hedder MM_p.
Og det er da fikst nok. Bortset fra, hvis der allerede findes en - som måske
oven i købet ikke er et array? Så går der koks i din funktion. Og selv om
det er et array, bliver dine billeder blot tilføjet til det eksisterende
array, og ødelægger måske eksisterende data.
Det vil måske være smartere, helt enkelt at oprette d.MM_p = new Array()
under alle omstændigheder.
eller helt fikst, at lade være med at pille ved den, hvis den eksisterer :
if ( !d.MM_p) {
d.MM_p = new Array();
... resten af din oprettelse af arrayet...
}
eller måske er det endnu smartere, bare at oprette den som en global
javascript variabel, uden at rode document ind i tingene...

I det store og hele er jeg mere forundret over at det virker i FF, end at
det ikke gør det i de andre...
Undskyld.

Birger



Martin (15-10-2007)
Kommentar
Fra : Martin


Dato : 15-10-07 17:27

Birger wrote:
> Du har den her til at hente billederne :
> function MM_preloadImages() { //v3.0
> var d=document;
> if ( d.images){
> if ( !d.MM_p) d.MM_p = new Array();
> var i, j=d.MM_p.length, a=MM_preloadImages.arguments;
> for(i=0; i<a.length; i++)
> if ( a[i].indexOf("#") != 0){
> d.MM_p[j]=new Image;
> d.MM_p[j++].src=a[i];
> }
> }
> }

Goe gamle MM - ja det er standard i dreamweaver, og nej jeg har heller
aldrig forstået det l***

For at preloade billeder kan dette sagtens være nok

<script type="text/javascript">
images = new Array();
images[0]='sti/til/billeder/billede1.gif';
images[1]='sti/til/billeder/billede2.gif';
images[2]='sti/til/billeder/billede3.gif';

function preload() {
var temp = document.createElement('div');
temp.style.display = 'none';
for(i=0;i<images.length;i++) {
temp.innerHTML = '<img src="'+images[i]+'" alt="" />';
}
}

<body onload="preload()">

Nu er billederne så blevet preloadet, med en "ikke vist" div, kunne også
laves uden div'en men bare lave en createelement direkte på img tagget,
men det gad jeg ikke lige :P

Malene Maare (15-10-2007)
Kommentar
Fra : Malene Maare


Dato : 15-10-07 20:46

Martin wrote in dk.edb.internet.webdesign.clientside:

> Goe gamle MM - ja det er standard i dreamweaver, og nej jeg har heller
> aldrig forstået det l***

Er det mig du mener? ;) MM
>
> For at preloade billeder kan dette sagtens være nok
>
> <script type="text/javascript">
> images = new Array();
> images[0]='sti/til/billeder/billede1.gif';
> images[1]='sti/til/billeder/billede2.gif';
> images[2]='sti/til/billeder/billede3.gif';
>
> function preload() {
> var temp = document.createElement('div');
> temp.style.display = 'none';
> for(i=0;i<images.length;i++) {
> temp.innerHTML = '<img src="'+images[i]+'" alt="" />';
> }
> }
>
> <body onload="preload()">
>
> Nu er billederne så blevet preloadet, med en "ikke vist" div, kunne også
> laves uden div'en men bare lave en createelement direkte på img tagget,
> men det gad jeg ikke lige :P

Ok, tak for inputtet. Desværre laver jeg slet ikke javascript selv. Jeg
prøvede det du skrev, med mine fil-navne/stier men da jeg ikke ved en brik
om, hvad jeg laver, ved jeg heller ikke, hvordan jeg får vist, hvad jeg
har preloadet, desværre. Men tak for input, det kan være der er andre der
kan bruge det.

Jeg prøvede selv fra bunden af i Dreamweaver, og har åbenbart fået f*****
noget op undervejs i koden - men nu virkede det - osse stadig med "gode
gamle MM" ;)
Har dog ikke tjekket i Opera endnu.


Vh Malene Maare



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Malene Maare (15-10-2007)
Kommentar
Fra : Malene Maare


Dato : 15-10-07 20:56

Birger wrote in dk.edb.internet.webdesign.clientside:
>
> Din kode er ikke specielt overskuelig.

Nej jeg ved det godt, det er noget rod!

> Det sparer ganske vist lidt plads, at skrive alting ud i een smøre, men...
> I dine <img..> skal name skal hedde id -

det ændrede ikke noget at skifte til "id". Der var bare kommet rod i den og det
hjalp, da jeg startede forfra.

> det er formentlig derfor det ikke
> virker i nogle browsere. name anvendes kun i <form>, og jeg er ikke sikker
> på at det er lovligt bare at nummerere elementer.
> Det ligner også en frygtelig masse indviklet programmering for at udføre en
> meget simpel operation.
>
> onmouseover ="this.src='img/s_X_over.jpg'"
> onmouseout ="this.src='img/s_X_out.jpg'"
>
> på img taget, vel at mærke, hvor X er billed nummeret, skulle kunne gøre
> det, hvis jeg ellers har tydet tingene rigtigt
> eller hvis <a> dækker over billedet, sætte dens:
>
> onmouseover(eller out) = "document.getElementById(
> 'X').src='img/s_X_over(eller out).jpg'";
>
> Filnavnet kan evt. udskiftes med en indexering i det array du preloader
> billederne i - hvis du slev kan finde ud af indekset, for jeg kan ikke...
> onmouseover(eller out) = "document.getElementById(
> 'X').src=document.MM_p[Y].src";
> hvor Y er indekset af det billede du vil have vist.
>
> Du har den her til at hente billederne :
> function MM_preloadImages() { //v3.0
> var d=document;
> if ( d.images){
> if ( !d.MM_p) d.MM_p = new Array();
> var i, j=d.MM_p.length, a=MM_preloadImages.arguments;
> for(i=0; i<a.length; i++)
> if ( a[i].indexOf("#") != 0){
> d.MM_p[j]=new Image;
> d.MM_p[j++].src=a[i];
> }
> }
> }
> og den kaldes med out og over billeder rodet sammen.
> Hvorfor ikke to billeder i hvert element, eller et array til out og et til
> over?
> I tilgift starter din nummerering af billederne med 1, mens indekseringen i
> arrayet starter med 0.
> Arrayet document.MM_p anvendes desuden aldrig til noget, så du kan lige så
> godt bare oprette et Image, som ikke har nogen reference andre steder.
> Billedet vil svjv stadig blive hentet til cache.
> Jeg ved ikke om javascript har en garbagecollector som f.eks Java og nogle
> af de andre sprog - hvis det har, vil document.MM_p alligevel blive fjernet,
> fordi den ikke bruges.
> Linien
> if ( !d.MM_p) d.MM_p = new Array();
> opretter et nyt array, hvis der ikke allerede findes en variabel i document
> der hedder MM_p.
> Og det er da fikst nok. Bortset fra, hvis der allerede findes en - som måske
> oven i købet ikke er et array? Så går der koks i din funktion. Og selv om
> det er et array, bliver dine billeder blot tilføjet til det eksisterende
> array, og ødelægger måske eksisterende data.
> Det vil måske være smartere, helt enkelt at oprette d.MM_p = new Array()
> under alle omstændigheder.
> eller helt fikst, at lade være med at pille ved den, hvis den eksisterer :
> if ( !d.MM_p) {
> d.MM_p = new Array();
> ... resten af din oprettelse af arrayet...
> }

tak for din engagerede gennemgang. desværre er det perler for svin, da jeg er
pænt blank mht. Javascript og hvad der egentlig foregår (når jeg copy-paster)
Ja, sådan er det, jeg er mere til det grafiske...

> eller måske er det endnu smartere, bare at oprette den som en global
> javascript variabel, uden at rode document ind i tingene...

Pas!
>
> I det store og hele er jeg mere forundret over at det virker i FF, end at
> det ikke gør det i de andre...

Ja, det er så det provokerende, som er med til at besværliggøre arbejdet :)

> Undskyld.
>
> Birger
>
det er mig der undskylder ved at være helt blank, men jeg håber andre kunne
bruge dine svar. Jeg ved godt det er /clientside jeg er på, men jeg tænkte nogen
måske kunne sige "Fjern den der" ;)

Vh Malene



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jørgen Farum Jensen (15-10-2007)
Kommentar
Fra : Jørgen Farum Jensen


Dato : 15-10-07 22:51

Malene Maare skrev:

> tak for din engagerede gennemgang. desværre er det perler for svin, da jeg er
> pænt blank mht. Javascript og hvad der egentlig foregår (når jeg copy-paster)
> Ja, sådan er det, jeg er mere til det grafiske...
>

Du bekræfter sådan set bare, at for at
bruge Dreamweaver skal man have forstand
på både HTML, CSS og JavaScript.

Hvis du vil kave en grafisk JavaScript
rollover, lav den da selv: Opskriften
finder du her og
http://webdesign101.dk/rollover/
og følgende.



--

Med venlig hilsen
Jørgen Farum Jensen
Håndbog i webdesign: http://webdesign101.dk/wwwbog/udgave2/
Webdesign med stylesheets: http://webdesign101.dk/cssbog/
..

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409076
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste