Image Pre-Load ?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Anoniem: 283168

Topicstarter
Ik moet voor mijn stage opdracht een website in elkaar zetten voor een reclame buro, vandaar dat ik al behoorlijk wat vraagjes heb gesteld en dankzei jullie ben ik ook zover als ik nu ben. Zit nu met een nieuw probleem, namelijk het volgende. Als je naar de site gaat (http://www.infymmity.nl/) en met je muis over de links gaat dan verdwijnt hij eerst en dan komt de rollover pas tevoorschijn. Dit is (denk ik) hoogst waarschijnlijk omdat hij pas die image laad wanneer je erover heen gaat. Dit is natuurlijk gewoon spuug lelijk als je dit als bezoeker ziet. Ik vroeg mij af of er een simpele manier is om images te preloaden zodat wanneer de site laad en je over die images gaat je gelijk de rollover te zien krijgt in plaats van dat die hem eerst laad.
Dit is de code die ik nu gebruik, even controleren of dat wel helemaal klopt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
a.homeover
{
    display:block;
    width:118px;
    height:54px;
    text-decoration:none;
    background:url(images/home.png);
}

a.homeover:hover
{
    background:url(images/home_rollover.png);
}

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

maak van je image een sprite en wijzig de background-position onhover :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Anoniem: 283168

Topicstarter
Zou je dat in iets meer detail kunnen uitleggen? :D

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Wat crisp bedoelt is dat je beide afbeeldingen onder elkaar in 1 bestand zet (met behulp van paint.net ofzo), en bij een hover dan alleen de background-y positie aanpast. Op die manier heb je niet dat de hover afbeelding apart geladen moet worden, het staat immers allemaal in 1 bestand.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • SinergyX
  • Registratie: November 2001
  • Laatst online: 11:34

SinergyX

____(>^^(>0o)>____

Ik zie dat je afbeeldingen links zijn, zou je easy workaround kunnen doen als:

a { background: url(image_hover.gif); }
a:link { background: url(image_default.gif); }
a:hover,
a:focus { background: url(image_hover.gif); }

die manier pre-load hij hover, maar laat hij standaard je a.link image zien.

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


Acties:
  • 0 Henk 'm!

  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 18-06-2024

Big Womly

Live forever, or die trying

Misschien ben je hier iets mee?

JavaScript:
1
2
3
4
5
6
7
<SCRIPT LANGUAGE="JavaScript">
image1 = new Image();
image1.src = "image1.gif";

image2 = new Image();
image2.src = "image2.gif";
</script>


Het komt er dus eigenlijk op neer dat je een nieuw Image object aanmaakt en de source property insteld op de afbeelding die je al wil laden, maar nog niet wil weergeven, zodat de image al in je temp inet files staat. Bij een hover zal die dan direct uit de temp dir gehaald worden ipv hem op dat moment pas te gaan downloaden.

[ Voor 72% gewijzigd door Big Womly op 09-10-2009 13:25 ]

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
http://www.alistapart.com/articles/sprites is denk ik de mooiste uitleg van CSS Sprites.

Acties:
  • 0 Henk 'm!

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 12-05 11:12
mbsaerens schreef op vrijdag 09 oktober 2009 @ 13:18:
Misschien ben je hier iets mee?

JavaScript:
1
2
3
4
5
6
7
<SCRIPT LANGUAGE="JavaScript">
image1 = new Image();
image1.src = "image1.gif";

image2 = new Image();
image2.src = "image2.gif";
</script>


Het komt er dus eigenlijk op neer dat je een nieuw Image object aanmaakt en de source property insteld op de afbeelding die je al wil laden, maar nog niet wil weergeven, zodat de image al in je temp inet files staat. Bij een hover zal die dan direct uit de temp dir gehaald worden ipv hem op dat moment pas te gaan downloaden.
Maar met deze "ouderwetse" manier hebben bezoekers zonder JS geen hover-image. Met css-sprites werkt dat wel :)

Full-stack webdeveloper in Groningen


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

Welke idioot heeft die term sprite in de context van CSS eigenlijk verzonnen?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Neobahamuth
  • Registratie: April 2003
  • Niet online

Neobahamuth

Thoughtcrime is death.

Jaaaren geleden (lang voor al die CSS) deed ik het zo:
- zet de images die je wil pre-loaden ergens onderaan je pagina met telkens width=1 en height=1.

Zo zijn ze virtueel onzichtbaar en toch reeds geladen wanneer je een mouse-over/hover gaan doen.

BBQBBQ 2OpendeurdagLED Cat Feeder


Acties:
  • 0 Henk 'm!

  • macciez
  • Registratie: Maart 2008
  • Laatst online: 03-06 23:03
Ik geloof, dat de juiste oplossing al is gegeven. Sprites is daar de keurigste oplossing, imo.

Do what you love, do it often


Acties:
  • 0 Henk 'm!

  • SandaX
  • Registratie: November 2003
  • Nu online

SandaX

Nicht Ärgern nur wundern

Neobahamuth schreef op vrijdag 09 oktober 2009 @ 14:56:
Jaaaren geleden (lang voor al die CSS) deed ik het zo:
- zet de images die je wil pre-loaden ergens onderaan je pagina met telkens width=1 en height=1.

Zo zijn ze virtueel onzichtbaar en toch reeds geladen wanneer je een mouse-over/hover gaan doen.
Met css kan je er ook een class opzetten met visibility:none, heeft in principe hetzelfde effect maar dan zijn ze helemaal onzichtbaar. (niet helemaal netjes, maar het kan)

[ Voor 3% gewijzigd door SandaX op 09-10-2009 14:59 ]


Acties:
  • 0 Henk 'm!

  • cPT.cAPSLOCK
  • Registratie: September 2009
  • Laatst online: 08-12-2024
De oplossing die SandX noemt vind ik zelf ook het handigste:

.preloader {
visibility: none;
}

Dan ergens op je pagina dus <div class="preloader"> plaatjes die je wil preloaden hier </div> en klaar

Acties:
  • 0 Henk 'm!

  • Ram0n
  • Registratie: Maart 2002
  • Laatst online: 20-04 16:44

Ram0n

Bierbrouwende nerd

.oisyn schreef op vrijdag 09 oktober 2009 @ 14:51:
Welke idioot heeft die term sprite in de context van CSS eigenlijk verzonnen?
Waarom is dat gek? Een sprite is altijd al een plaatje geweest met daarin subplaatjes, zodat je maar een enkel bestand hoeft in te laden om meerdere dingen weer te geven. Dat was al zo bij de vroegste videogames en het is ook wat het doet in de CSS-context, dus waarom zou het niet kloppen?

Eigenaar/brouwer Milky Road Brewery


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ram0n schreef op vrijdag 09 oktober 2009 @ 15:41:
[...]

Waarom is dat gek? Een sprite is altijd al een plaatje geweest met daarin subplaatjes
En dáár gaat het dus fout. Die subplaatjes, dát zijn de sprites. Waar jij het over hebt zijn sprite maps, waar dus meerdere sprites in staan. De topicstarter gebruikt al sprites, alleen heeft ieder plaatje zijn eigen bestand. De suggestie om sprites te gebruiken slaat dus als een lul op een drumstel, want dat doet ie al. De bedoelde suggestie is om alle sprites bij elkaar in een enkele map te zetten, wat dan ineens de term "css sprites" meekrijgt 8)7

[ Voor 10% gewijzigd door .oisyn op 09-10-2009 15:49 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

.oisyn schreef op vrijdag 09 oktober 2009 @ 15:46:
[...]

En dáár gaat het dus fout. Die subplaatjes, dát zijn de sprites. Waar jij het over hebt zijn sprite maps, waar dus meerdere sprites in staan. De topicstarter gebruikt al sprites, alleen heeft ieder plaatje zijn eigen bestand. De suggestie om sprites te gebruiken slaat dus als een lul op een drumstel, want dat doet ie al. De bedoelde suggestie is om alle sprites bij elkaar in een enkele map te zetten, wat dan ineens de term "css sprites" meekrijgt 8)7
Welcome to the interwebs... waar hypes kreten bedenken of kreten hypes :+

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Ram0n
  • Registratie: Maart 2002
  • Laatst online: 20-04 16:44

Ram0n

Bierbrouwende nerd

Zeg dat dan direct, je reactie liet het zo lijken alsof je vond dat sprites hier helemáál niets mee te maken hebben. Maar je stoort je er dus aan dat de term net iets anders gebruikt wordt. Ja, het is technisch gezien verkeerd, maar iedereen snapt wat ermee bedoelt wordt. Het lijkt me handiger om volgende keer dan direct te zeggen wat het verschil is in plaats van zeggen "dat slaat nergens op" o.i.d.

Eigenaar/brouwer Milky Road Brewery


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

En op die manier een discussie uit de weg te gaan op vrijdagmiddag? Guess again :Y)

Maar even serieus, nee, zo zit het niet. Sprites had je altijd al in HTML, gewoon met IMG tags. Ik stoor me aan het feit dat ze het sinds ze de positionering middels CSS "ontdekt" hebben het pas echt sprites noemen.

[ Voor 56% gewijzigd door .oisyn op 09-10-2009 20:50 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

.oisyn schreef op vrijdag 09 oktober 2009 @ 14:51:
Welke idioot heeft die term sprite in de context van CSS eigenlijk verzonnen?
Volgens mij ben ik daar deels verantwoordelijk voor :+

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Als je meerdere images in 1 image prakt dan heb je 1 sprite met meerdere sprites die je laat zien/vebergen mbhv. CSS. Ik zie je probleem niet helemaal, ik kan me er niet druk om maken :)

@crisp: oohhh...boefje ;)

Acties:
  • 0 Henk 'm!

  • Ram0n
  • Registratie: Maart 2002
  • Laatst online: 20-04 16:44

Ram0n

Bierbrouwende nerd

.oisyn schreef op vrijdag 09 oktober 2009 @ 20:44:
En op die manier een discussie uit de weg te gaan op vrijdagmiddag? Guess again :Y)

Maar even serieus, nee, zo zit het niet. Sprites had je altijd al in HTML, gewoon met IMG tags. Ik stoor me aan het feit dat ze het sinds ze de positionering middels CSS "ontdekt" hebben het pas echt sprites noemen.
Fair enough, ik begrijp het :)

Eigenaar/brouwer Milky Road Brewery


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

Cartman! schreef op vrijdag 09 oktober 2009 @ 20:59:
Als je meerdere images in 1 image prakt dan heb je 1 sprite
dat is dus niet een sprite, dat is een sprite map. That's the whole point. Als je dat ding een sprite gaat noemen dan veroorzaak je alleen maar verwarring (behalve in de web community dan, want die hebben dat allemaal maar gewoon overgenomen ;))

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Grote Schurk
  • Registratie: Januari 2007
  • Laatst online: 02-06 16:19
Idd gewoon sprites gebruiken, waarom?

Voordelen:
- Je hoeft maar één afbeelding te laden, dat maakt het laden dus sneller omdat je dan maar één http request hebt (zie dat als access time bij een hdd)
- Je hoeft maar één afbeelding te onderhouden
- Vooral bij gif (maar ook andere extensies) heb je het voordeel dat die ene afbeelding veel kleiner in bestandsgrootte is dan meerdere afbeeldingen bij elkaar
- Geen pre-load problemen in Internet Explorer
- Geen troep in je html (zoals JS of onnodige html op visibility: none;)

Dat laatste punt is natuurlijk erg fijn voor front-enders die na jou bezig zijn met de html: "WTF is dit, wat doet het??". Natuurlijk kan je er een comment bij zetten, maar het blijven naar mijn mening vieze praktijken.

Als je er enthousiast over bent kan je ook de rest van de site op deze manier doen. Dan kan je gebruik maken van horizontale en verticale sprites met het oog op repeat-x of repeat-y. Het maakt behoorlijk wat uit in de snelheid van het laden van een pagina.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
.oisyn schreef op zaterdag 10 oktober 2009 @ 14:30:
[...]

dat is dus niet een sprite, dat is een sprite map. That's the whole point. Als je dat ding een sprite gaat noemen dan veroorzaak je alleen maar verwarring (behalve in de web community dan, want die hebben dat allemaal maar gewoon overgenomen ;))
Je hebt me overtuigd :) Spritemap klinkt wel vetter nog... CSS Spritemaps/CSS Spritemappen, ik doe mee :>

Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
FritsYpeij schreef op zaterdag 10 oktober 2009 @ 14:57:
Idd gewoon sprites gebruiken, waarom?

Voordelen:
- Je hoeft maar één afbeelding te laden, dat maakt het laden dus sneller omdat je dan maar één http request hebt (zie dat als access time bij een hdd)
Hoeveel kost één HTTP-request eigenlijk? OK, het is *een voordeel*, maar om het meteen als eerste voordeel te poneren?

Nadelen
- Je hoeft maar één afbeelding te onderhouden + je CSS-*image-map* (als in: je moet het in één plaatje proppen)
- Je hangt veelal vast aan werken in pixels (backgrounds rekken niet mee met font-grootte-instellingen van de bezoeker)

offtopic:
En op die manier een discussie uit de weg te gaan op vrijdag maandagmiddag? Guess again :Y)

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 13:02
moozzuzz schreef op maandag 12 oktober 2009 @ 13:44:
[...]

Hoeveel kost één HTTP-request eigenlijk? OK, het is *een voordeel*, maar om het meteen als eerste voordeel te poneren?
als je een hoge latency hebt (500ms+) dan wordt het echt eenr amp als de site 20 images probeert in te laden en voor elke image een aparte request moet doen..
Dan kan je ze echt zien laden stuk voor stuk :)

Acties:
  • 0 Henk 'm!

  • Sebazztiaan
  • Registratie: Februari 2002
  • Laatst online: 11:26

Sebazztiaan

sebas!

geef die jongen nou gewoon zijn stukje code :)

kleine uitleg, de volgende 'afbeelding' zijn 2 afbeeldingen in 1 png. J = niet selected state en K = hover state. We gaan er van uit dat de afbeelding 50x50px is. Dus de afbeelding is 50 breed bij 100 hoog en in deze config:

J
K

HTML:
1
2
3
4
<ul>
  <li><a href='...' class='home'>HOME</a>
  ...
</ul>


en dan nu de css

Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
13
.home {
  background-image:url(sprite.jpg);
  background-position:0px 0px;
  height:50px;
  width:50px;
  display:block;
  text-indent:-9999px;
  overflow:hidden;
}

.home:hover {
  background-position:0px -50px;
}


De uitleg:

Hoogte en breedte 50px. Text-indent -9999px zorgt ervoor dat je link navigeerbaar is zonder CSS terwijl je hem niet ziet. De overflow:hidden zorgt ervoor dat je de lelijke selectielijntjes niet meer ziet.

Als je hovert, verplaats je de offset waar de bg-img begint 50px omhoog (dus 50px te hoog, waardoor je 2e deel (het K) stuk zichtbaar wordt.

Acties:
  • 0 Henk 'm!

  • Sebazztiaan
  • Registratie: Februari 2002
  • Laatst online: 11:26

Sebazztiaan

sebas!

cPT.cAPSLOCK schreef op vrijdag 09 oktober 2009 @ 15:02:
De oplossing die SandX noemt vind ik zelf ook het handigste:

.preloader {
visibility: none;
}

Dan ergens op je pagina dus <div class="preloader"> plaatjes die je wil preloaden hier </div> en klaar
Dit is dus semantisch ruk...
Pagina: 1