login  Naam:   Wachtwoord: 
Registreer je!
 Forum

onscroll werkt niet?

Offline anton - 04/03/2009 16:40 (laatste wijziging 04/03/2009 20:52)
Avatar van antonLid hallo,
ik van FDproductions ben momenteel bezig aan een site die voornamelijk foto's bevat.
Nu , ik ben volop bezig met mezelf javascript bij te leren. Maar natuurlijk gaat nog niet alles zo gemakkelijk.
Nu heb ik een functie gemaakt die moet doen:
Als de gebruiker scrollt(mousewheel) moet hij de volgende src uit een array halen. Hetzelfde als de gebruiker op het pijltje van volgende klikt.
Als de gebruiker op het pijltje van volgende klikt , doet de functie het wel maar bij het mousewheel scrollen niet.
Dit is mijn functie(enkel het deel voor het scrollen):
  1. if(document.body.onscroll){
  2. for(i=0;i < row.length;i++){
  3. var x = document.getElementById('1').src
  4. x = row[i];
  5. if(i > 2){
  6. i = 0;
  7. }
  8. }
  9. }

De array:
  1. var row = new Array()
  2. row[0] = "Images/1998/199811 Keuken1.jpg";
  3. row[1] = "Images/1998/199811 Living1.jpg";
  4. row[2] = "Images/1998/199811 Living2.jpg";

En de img die van src moet veranderen:
  1. <img src="Images/1998/199811 Keuken1.jpg" height="400" width="590" id="1"/>

Alvast bedankt

MVG
Anton Vandeghinste

13 antwoorden

Gesponsorde links
Offline Wim - 04/03/2009 17:10 (laatste wijziging 04/03/2009 17:13)
Avatar van Wim Crew algemeen ik ken weinig(niets) van javascript, maar is het niet gewoon zo:
  1. document.getElementById('1').src = row;


Trouwens, variabelen defineren we buiten een lus! Het is niet nodig om deze telkens opnieuw te defineren.
Offline Rik - 04/03/2009 17:39
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
document.body.onscroll geeft geen boolean terug, maar het wordt geactiveerd bij het scroll event.

Je moet dus zo doen:
  1. document.body.onscroll = function () {
  2. // ... hier je code ...
  3. }
Offline anton - 04/03/2009 20:10 (laatste wijziging 04/03/2009 20:44)
Avatar van anton Lid hmm...er is nog iets dat niet klopt...
ALs ik nu scroll , zet hij wel de volgende foto op het scherm , maar als ik dan nog eens scroll zet hij de derde er niet meer op..??
Offline BramBo - 05/03/2009 15:06 (laatste wijziging 05/03/2009 15:06)
Avatar van BramBo JS gevorderde Beter is het om attachEvent & addEventListener. Maar Document.body.onScroll al in de meeste gevallen wel werken geloof ik.

Anyways je haalt het src attribute op en later set je de x wat een referentie bewaart naar de waarde van .src en dus niet direct het object wijzigt, dus doe 't alsvolgt:

  1. var current_index = 0;
  2. var row = new Array()
  3. row[0] = "Images/1998/199811 Keuken1.jpg";
  4. row[1] = "Images/1998/199811 Living1.jpg";
  5. row[2] = "Images/1998/199811 Living2.jpg";
  6.  
  7. document.body.onscroll = function (e) {
  8. document.getElementById('1').src = row[current_index++];
  9. if(current_index>row.length) current_index=0;
  10. }
Offline anton - 05/03/2009 19:42
Avatar van anton Lid Heel erg bedankt voor je reactie BramBo!
Het werkt nu , er is nog maar een probleempje...
Heel soms als ik scrol , en ik scroll verder door de fotos(3 maar) dan komt er av en toe eens een lege plek met een kruisje in de linker bovenhoek , en als ik dan doorscroll en de volgende keer bij die foto kom , dan kan de site hem wel tonen...enig idee hoe dit komt?

MVG
Anton Vandeghinste
Offline Wim - 05/03/2009 19:51
Avatar van Wim Crew algemeen Probeer dit eens op lijn 9:
  1. if(current_index>(row.length - 1)) current_index=0;


.Length geeft het aantal elementen terug. row bevat 3 elementen (0 t.e.m. 2), en het script zal dus af en toe row[3] proberen te benaderen, welke niet bestaat.
Offline anton - 05/03/2009 20:06
Avatar van anton Lid Heel erg bedankt voor jullie hulp allemaal!!
Ik heb van elke reactie wel wat bijgeleerd!
Nu is er nog een ding...ik heb geprobeerd om dezelfde functie te gebruiken voor de knoppen maar dat werkt niet...
code:
  1. document.getElementById('2').onclick = function (e) {
  2. document.getElementById('1').src = row[current_index++];
  3. if(current_index>(row.length - 1)){
  4. current_index=0;
  5. }
  6. }

en hetzelfde voor de andere knop maar dan enkel met het id 3...maar waarom werkt dit nu weer niet??
Sorry als ik wat lastige vragen stel hoor.. 

MVG
Offline Rik - 05/03/2009 20:48
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Doet het gewoon niets of geeft het fouten?

Ik zie op het oog even geen fouten in ieder geval. Misschien moet je je hele code eens op plaatscode.be zetten voor het overzicht.  
Offline anton - 05/03/2009 21:40 (laatste wijziging 05/03/2009 21:45)
Avatar van anton Lid ok , het is maar een kleine pagina hoor ...maa ik ben gewoon niet goed in javascript;)

EDIT:
Hier is de link:http://www.plaatscode.be/107666/
Offline Rik - 06/03/2009 15:01
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Probeer hem zo eens:
http://www.plaatscode.be/108271/
Offline anton - 06/03/2009 19:56
Avatar van anton Lid ok dat werk helemaal niet
hij geeft de alert wel , maar nu doet hij helemaal niets meer , niet bij scrollen niet bij buttons...

MVG
Anton
Offline Jas_per_post - 14/03/2009 17:01 (laatste wijziging 14/03/2009 18:07)
Avatar van Jas_per_post JS interesse <<< edit: ik zat oudere posts te lezen, scroll naar beneden voor een beter antwoord >>>

Er is maar heel weinig dat klopt aan je code.

- 't is event = function() {...} (of een van de andere mogelijkheden, niet if (event) {...}
- document.body.onscroll wordt alleen ondersteunt door IE6+ en Opera 7+, zo'n beetje alles en iedereen ondersteunt window.onscroll
- je stopt de huidige src van het plaatje in de variabele x en vervolgens stop je een andere waarde (uit de array) in x, maar de src van het plaatje pas je nooit aan
- je if (i>2) is altijd false, maar als je een vierde element zou toevoegen aan de array waardoor het wel true kan worden, dan zorgt dit if statement ervoor dat je oneindig lang door je for blijft loopen
- zou alles binnen je for zo zijn als het moet, dan zou het script nog steeds niet doen wat je wilt, want dan zou zou het als er gescrollt wordt, dan zou het plaatje veranderen in de eerste mogelijheid, meteen daarna naar de volgende mogelijkheid en dat net zo lang totdat de laatste uiteindelijk blijft staan. Dit is dan dus ook het enige plaatje dat de gebruiker te zien krijgt

Let er daarnaast op dat onscroll afgaat als de positie van het document verandert, niet als de scrollwheel wordt gebruikt. Dus het event gaat niet af als de pagina niet lang genoeg is om het hele scherm te vullen (wat de gebruiker ook doet) en het gaat wel af als de inhoud langer is dan op het scherm past en de gebruiker scrollt met de scrollwheel, de scrollbar of met de pijltjes.


<<< reactie op de nieuwe code dan maar >>>

Je code is eng. Begin met het weghalen van al de &nbsp;'s en ze te vervangen door een css attribuut (wellicht text-align) en ga dan door je css niet in style attributen te zetten maar bovenin in je style-tag (liever nog in een apart css-bestand, maar in de header is in principe ook goed) en het wordt al een vrij lief beestje.

Het zelfde moet je ook echt doen met je javacript. In een event (zoals onclick) kun je een opdracht of een aantal (gescheiden door puntkomma's) weergeven, maar als het meer dan twee of drie word opdrachten wordt, dan zet je het voor de overzichtelijkheid bovenin de pagina in je script tag als een functie, en roep je de functie simpelweg aan in je event-attribuut.

Het is ook erg nuttig om ids te hebben waaruit je kunt opmaken waar je het oer hebt, in plaats van '1', '2' en '3'. Verder moet << &lt;&lt; zijn en >> &gt;&gt; omdat < en > niet zomaar in html mogen voorkomen.

Dan hebben we een overzichtelijk stukje code en kunnen we gaan kijken wat er mis is. De buttons doen het prima (omdat er geen linebreaks mochten staan in je onclick-attribuut). Ik kom dan weer terug op wat ik meteen al zei (toen ik nog alleen het eerste stukje code had gegeven):

- document.body.onscroll wordt alleen ondersteunt door IE6+ en Opera 7+, zo'n beetje alles en iedereen ondersteunt window.onscroll

Let er daarnaast op dat onscroll afgaat als de positie van het document verandert, niet als de scrollwheel wordt gebruikt. Dus het event gaat niet af als de pagina niet lang genoeg is om het hele scherm te vullen (wat de gebruiker ook doet) en het gaat wel af als de inhoud langer is dan op het scherm past en de gebruiker scrollt met de scrollwheel, de scrollbar of met de pijltjes.

Na het veranderen van document.body.onscroll naar window.onscroll krijg ik dit, wat prima werkt (als je in je achterhoofd houdt wanneer onscroll afgaat). Er is hier natuurlijk nog een hoop aan te veranderen (je hebt nu drie functies, je hebt er echt niet meer dan 1 nodig, als je het scrolldivje om de buttons en foto heenplaatst heb je die lelijke left: 38 niet nodig, ...
Offline anton - 19/03/2009 19:27 (laatste wijziging 19/03/2009 19:35)
Avatar van anton Lid Heel erg bedankt voor je reactie!
Het is duidelijk uitgelegd ook!
Ik heb enkel nog 1 bemerking/vraag:
Weet je misschien hoe je weergeeft dat muiswiel gebruikt word...zodat het niet alleen doorgaat als de pagina lang genoeg is?

MVG
Anton Vandeghinste
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.203s