[JS] image swap functie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik ben bezig een kleine image swap functie te maken zodra je met je muis over een image heen gaat.

Nou zit mijn functie al bijna in elkaar maar kan een probleem maar niet takelen.

mijn functie:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function prepareMenu() {
if (!document.getElementById) return false;
if (!document.getElementById("menu")) return false;
var menu = document.getElementById("menu");
var images = menu.getElementsByTagName("img");
    for (var i=0; i< images.length; i++) {
        var menuitem = images[i].getAttribute("rel");
            if (menuitem == "menuitem") {
                images[i].onmouseover = function() {
                images[i].src = "images/test.jpg";      
                }
            }
    }
}


op de regel:
[
JavaScript:
1
images[i].src = "images/test.jpg";      


Krijg ik constant de melding: Fout: images[i] is undefined. Terwijl als ik deze met een alert in de regel ervoor laat tonen, deze er wel is. Ik kan bijvoorbeeld ook wel met een alert de huidige src tonen.

Waar komt dit door en wat doe ik fout?

Acties:
  • 0 Henk 'm!

  • Fuzzillogic
  • Registratie: November 2001
  • Laatst online: 01-07 22:34
In je onmousover-functie kom je in de context van de image-object zelf terecht. Dus dan zul je this.src="images/test.jpg"; moeten gebruiken. En 10 tegen 1 dat dat helemaal geen jpeg hoort te zijn, maar een fraaie PNG ;)

Maar waarom gebruik je niet gewoon CSS met :hover?

Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46

KompjoeFriek

Statsidioot

Lijkt mij een scope probleem

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function prepareMenu() { // begin scope van prepareMenu
if (!document.getElementById) return false;
if (!document.getElementById("menu")) return false;
var menu = document.getElementById("menu");
var images = menu.getElementsByTagName("img");
    for (var i=0; i< images.length; i++) {
        var menuitem = images[i].getAttribute("rel");
            if (menuitem == "menuitem") {
                images[i].onmouseover = function() { // begin scope function()
                images[i].src = "images/test.jpg";        
                }
               // einde scope function()
            }
    }
}
// einde scope prepareMenu
De variabele images is niet beschikbaar in de scope van de nieuwe function

edit:
en meteen een mooie oplossing van de meneer boven me :)

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
KompjoeFriek schreef op zaterdag 14 maart 2009 @ 21:42:
Lijkt mij een scope probleem

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function prepareMenu() { // begin scope van prepareMenu
if (!document.getElementById) return false;
if (!document.getElementById("menu")) return false;
var menu = document.getElementById("menu");
var images = menu.getElementsByTagName("img");
    for (var i=0; i< images.length; i++) {
        var menuitem = images[i].getAttribute("rel");
            if (menuitem == "menuitem") {
                images[i].onmouseover = function() { // begin scope function()
                images[i].src = "images/test.jpg";        
                }
               // einde scope function()
            }
    }
}
// einde scope prepareMenu
De variabele images is niet beschikbaar in de scope van de nieuwe function

edit:
en meteen een mooie oplossing van de meneer boven me :)
ARR crap je hebt gelijk.. zit je lekker een tijd over heen te staren |:(

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Fuzzillogic schreef op zaterdag 14 maart 2009 @ 21:42:
In je onmousover-functie kom je in de context van de image-object zelf terecht. Dus dan zul je this.src="images/test.jpg"; moeten gebruiken. En 10 tegen 1 dat dat helemaal geen jpeg hoort te zijn, maar een fraaie PNG ;)

Maar waarom gebruik je niet gewoon CSS met :hover?
Dat is ook nog een optie. Alleen dan heb ik 7 classes voor 7 menu items omdat de plaaties een andere naam hebben...

Acties:
  • 0 Henk 'm!

  • Fuzzillogic
  • Registratie: November 2001
  • Laatst online: 01-07 22:34
ViNyL schreef op zaterdag 14 maart 2009 @ 21:46:
[...]


Dat is ook nog een optie. Alleen dan heb ik 7 classes voor 7 menu items omdat de plaaties een andere naam hebben...
Ja en? Nu heb je javascript. Dat vind ik persoonlijk ranziger.

En CSS2 is je vriend:

Cascading Stylesheet:
1
2
3
ul#menu li:first-child { background-image: URL(...); }
ul#menu li:first-child + li { background-image: URL(...); }
ul#menu li:first-child + li + li { background-image: URL(...); }


Geen letter HTML meer nodig.

[ Voor 10% gewijzigd door Fuzzillogic op 14-03-2009 21:55 ]


Acties:
  • 0 Henk 'm!

  • Tofu
  • Registratie: Maart 2003
  • Laatst online: 05-10-2024
ViNyL schreef op zaterdag 14 maart 2009 @ 21:46:
[...]
Dat is ook nog een optie. Alleen dan heb ik 7 classes voor 7 menu items omdat de plaaties een andere naam hebben...
die nog steeds sneller zijn dan javascript
Pagina: 1