Image slider in MSIE (overflow: hidden bug)

Status
Niet open voor verdere reacties.

Lapixx

Gebruiker
Lid geworden
2 mei 2008
Berichten
132
Hoi,

Ik ben bezig met het maken van een slider die een aantal images bevat, en steeds 3 laat zien. Na 4 sec. scrollen de afbeeldingen naar links en verschijnen 3 andere in de DIV.

Na de animatie worden de eerste afbeeldingen mbv appendChild() weer achteraan geplaatst. Dit werkt allemaal goed, maar het div waar de afbeeldingen in staan hebben het CSS eigenschap overflow:hidden, zodat alleen de 3 eerste afbeeldingen zichtbaar zijn. Zoals de titel al doet vermoeden is MSIE het hier niet mee eens wat en toont de website alsof overflow:visible is genoemd.

Hieronder de 3 bestanden die betrekking hebben op het deel van de pagina:

HTML:
HTML:
<div id="slideview">
<div id="slidestroke">
<img src="foto1.jpg" height="200" width="300"><img src="foto2.jpg" height="200" width="300"><img src="foto3.jpg" height="200" width="300"><img src="foto4.jpg" height="200" width="300">
</div>
</div>

JS:
PHP:
slide_x=0;
slide_n=1;
slide_w=300;
function slide(){
	slide_x-=2;
	document.getElementById("slidestroke").style.left=slide_x+"px";
	if(slide_x>-slide_n*slide_w){
		window.setTimeout(slide,10);
	}
	else{
		swap(slide_n);
		window.setTimeout(slide,5000);
	}
}
function swap(n){
	while(n>0){
		e=document.getElementById("slidestroke");
		slide_x+=slide_w;
		e.style.left=slide_x+"px";
		e.appendChild(e.getElementsByTagName('img')[0]);
		n--;
	}
}
window.onload=window.setTimeout(slide,5000);

CSS:
Code:
#slideview{
width: 900px;
height: 200px;
overflow: hidden;
border: 3px solid #FFFFFF;
padding: 0px;
}
#slidestroke{
position: relative;
left: 0px;
width: 9000px;
text-align: left;
padding: 0px;
height: 100%;
}

Als iemand me verder kan helpen, alvast bedankt :)
 
raar... Hier in mijn IE7 standalone (ie8 werkt hier niet meer voor onbekende reden?) werkt het gewoon. Geen overflow fouten.

Maak er anders eens van:
PHP:
overflow-x: hidden;
van.


:thumb:
 
Overflow: hidden werkt normaal gesproken ook, maar in deze situatie dus niet... Merk op dat de elementen binnen de DIV met de eigenschap de positie als RELATIVE hebben toegewezen om ze te laten bewegen.

Ik heb overigens alleeni n MSIE 7 kunnen testen...

Hoe dan ook, misschien is er een andere oplossing om hetzelfde resultaat (afbeeldingen die elkaar scrollend opvolgen) te krijgen?
 
marquee! xD


Arright, even serieus. Ik heb m dus ook getest in ie7, maar hier werkt het wel, wat nogal vreemd is. Mischien kan iemand met IE7 even kijken, want dan weten we gelijk welke IE verkeerd doet. Heb een testje hier: http://vegras-studios.com/X/helpmij/lappix_slider.html [haha, met naam-spelfout, my bad ^^"]



:thumb:
 
Laatst bewerkt:
IE6 en IE8 werkt het gewoon. Ik kan niet meer testen in IE7. Maak anders eens een screenshot van je probleem.

lol.. marquee... goede ouwe tijd :D
 
Ja, ik probeer inderdaad dat effect na te bootsen. De marquee tag is in principe gewoon een webstandaard, maar er zijn nogal wat mensen die menen dat je het beter niet kan gebruiken, maar ik kan nergens concrete tegenargumenten vinden.

Hoe dan ook, wat ik nu heb zou dus gewoon moeten werken.

@Vegras: Ik zal morgen even in IE7 proberen. Als het gewoon werkt is er misschien iets anders op de pagina dat het probleem veroorzaakt, in dat geval moet ik even kijken wat voor eigenschappen op de parent elementen van toepassing zijn.

In ieder geval alvast bedankt voor jullie hulp, ik zal morgen dus testen in IE7.
 
Probeer anders eens je cache van ie7 te legen, mischien staat er nog een oude versie in zonder overflow-hidden (wild lucky guess)

Waarom geen marquee? Nou, het werkt bv. niet zo mooi als jouw slider (srsly, nice). Je kan bv. geen stop-intervallen meegeven. Also:
Het MARQUEE element maakt geen deel uit van HTML 4.0. Als alternatief kan bijvoorbeeld gebruik gemaakt worden van een Java applet met vergelijkbare effecten.
(source: http://www.handleidinghtml.nl/html/elementen/marquee.html)
Wat ze bedoelen is dat als je je pagina wil valideren via de w3c regels, je dus boven html 4.0 (html 4.1, XHTML, etc) geen marquee tag dient te gebruiken.
De reden hiervoor is geloof ik overgens dat je een marquee tag niet kan 'besturen', bv. 'terug naar het begin' of 'stilzetten'. In goede, valide, pagina's dienen minder validen (blinden, slechtzienden, etc etc) hetzelfde te kunnen 'zien' als valide mensen (lol wut?). Bovendien ondersteunen mobiele apparaten (pda, gsm etc) dit soort tags meestal niet, meen ik.

Kortweg, net zoals de <blink> tag, wordt marquee gezien als verouderd, en niet 'cool'. (lees professioneel)




[edit] Nu is jou stukkie script ook niet 'bestuurbaar', maar, dit zou je kunnen maken. Niet dat ik het zou doen, maargoed. Too much sweat voor iets dat geen belangrijke context-waarde heeft (text, informatie bedoel ik daarmee). Het is meer een 'versiering' dan 'content' zegmaar, niet slecht bedoeld, maar het gaat even om het idee.



:thumb:


<blink><marquee>ha! blinkende marquee! xD</marquee></blink>
 
Laatst bewerkt:
Je kon volgens mij marquees met JS besturen.
Hoe dan ook, de marquee tag wordt wel door veel browsers nog ondersteund, MSIE, FF en Safari wel in ieder geval. Blink tag dan weer nauwelijks. Hoe dan ook, ik had me vergist met iets anders, marquees vallen inderdaad niet onder de HTML4 standaard.

Overigens voegt dit inderdaad geen belangrijke waarde toe, maar je moet er wel rekening mee houden dat de layout, stijl en nutteloze effectjes wel een website compleet maken :p

Hoe dan ook, ik ga straks even testen...
 
mooie script:thumb:
zou nog mooier zijn als hij goed werk in IE 7 he;)

Je moet nog een div om je 2 slides maken, en die position relative en overflow hidden geven, en de slidestroke moet je position absolute geven.:cool:

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
slide_x=0;
slide_n=1;
slide_w=300;
function slide(){
    slide_x-=2;
    document.getElementById("slidestroke").style.left=slide_x+"px";
    if(slide_x>-slide_n*slide_w){
        window.setTimeout(slide,10);
    }
    else{
        swap(slide_n);
        window.setTimeout(slide,3500);
    }
}
function swap(n){
    while(n>0){
        e=document.getElementById("slidestroke");
        slide_x+=slide_w;
        e.style.left=slide_x+"px";
        e.appendChild(e.getElementsByTagName('img')[0]);
        n--;
    }
}
window.onload=window.setTimeout(slide,3500);  </script>

<style type="text/css">
#slideview{
width: 100%;
height: 200px;
overflow: hidden;
border: 3px solid #FFFFFF;
padding: 0px;
}
#slideview img{

}
#slidestroke{
position: absolute;
left: 0px;
width: 9000px;
text-align: left;
padding: 0px;
height: 100%;
}
#slider{
overflow:hidden;
height:100%;
width:100%;
position:relative;
}

</style>
</head>

<body><div id="slider">
<div id="slideview">
<div id="slidestroke">
<img src="foto1.jpg" height="200" width="300"><img src="foto1.jpg" height="200" width="300"><img src="foto1.jpg" height="200" width="300"><img src="foto1.jpg" height="200" width="300"><img src="foto1.jpg" height="200" width="300"></div></div>
</div>
</body>
</html>
 
Bedankt voor je reactie, echter, dit werkt niet helemaal.

Het blok waarin de foto's moeten sliden vult de pagina nu helemaal, en is dus niet meer 900px breed (dit staat overigens ook nergens meer aangegeven, maar ik krijg het ook niet voor elkaar).

Daarbij werkt overflow: hidden nog steeds niet goed.

Hoe dan ook, misschien ligt het aan de stijlen van de parent elements van de slider... ik zal er nog eens beter naar kijken :/
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan