hoe maak je een spolier button

Status
Niet open voor verdere reacties.

ido435

Gebruiker
Lid geworden
10 nov 2010
Berichten
674
hallo

ik ben op zoek naar een spolier button als je daarop drukt komt er een venster tevoorschijn en daar staat een tekst in als je drukt op sluiten dat de tekst weer weg gaat maar dat alle maal in het zelfde venster

alvast bedankt
groet ido
 
Hoi ido,
Je bedoelt een spoiler button, die kan je als volgt maken:


  1. Je maakt eerst een <div> aan die je een absolute positie geeft. Daarmee kan deze <div> dwars over de rest van de pagina heen komen, en een soort venster lijken.
  2. Hier gaat de uitgebreide tekst in, en je noemt 'm bijvoorbeeld: <div id="popupVenster">
  3. Binnen deze <div> zet je, bv. bovenaan rechts, een knop "Sluit".
  4. Daar maak je een onclick aan vast die een javascript-functie aanroept, bv.: onclick="closePopup()".
  5. Dan plaats je de <div id="popupVenster"> met css buiten beeld, door: #popupVenster {left: -9999px;}
  6. Dan maak je op de pagina ergens je knop "Meer ...".
  7. Ook daar maak je een onclick aan vast die een javascript-functie aanroept, nu bv.: onclick="showPopup()".

Blijft over: het opgeven van de twee functies:
[JS]<script type="text/javascript">
function showPopup() {
document.getElementById('popupVenster').style.left="200px"; // dwz de echte positie v/d popup
}
function closePopup() {
document.getElementById('popupVenster').style.left="-9999px"; // dwz terug naar buiten beeld
}
</script>[/JS]

Met vriendelijke groet,
CSShunter
 
Tja, van de die jQuery UI krijg ik altijd tranen in mijn ogen. ;)

Kan natuurlijk ook, en heeft wat extra mogelijkheden voor de bezoeker (wegslepen van het ding e.d.); maar dan heb je wel de hele bibliotheek nodig:
Code:
jquery-1.8.2.js van  9.440 regels en  77kB
jquery-ui.js    van 14.857 regels en 108kB
jquery-ui.css   van    473 regels en   6kB

Het aanpassen van de vormgeving aan je eigen opmaak van de pagina moet dan nog steeds gebeuren, net zoals in mijn beschrijving.
Die heeft alleen maar bovenstaande 8 regeltjes javascript nodig in plaats van de 24.300 regels jQuery-javascript.
:D :D :D

Met vriendelijke groet,
CSShunter
 
Laatst bewerkt:
HTML:
<style>

#container{
border: 1px solid black;
margin: auto;
width: 200px;
}

#spoilerblock{
display: none;
}
</style>

<script type="text/javascript">
function toggleSpoiler(){
    if(document.getElementById("spoilerblock").style.display == "block"){
        document.getElementById("spoilerblock").style.display="none";
    }else{
        document.getElementById("spoilerblock").style.display="block";
    }
}

</script>
<body>
<div id="container">
<a href="#" onClick="toggleSpoiler()">klik voor Spoiler</a>
<p id="spoilerblock">
Hier staat je spoiler tekst.
</p>
</div>
 
Hoi ido,

Waar je naar zoekt heet een 'Modal Window'. Hier staat een prachtige handleiding om er eentje te maken.
In het kort kom je uit op iets zoals dit:

HTML:
<style type="text/css">
#overlay {
     visibility: hidden;
     position: absolute;
     left: 0px;
     top: 0px;
     width:100%;
     height:100%;
     text-align:center;
     z-index: 1000;
}

#overlay div {
     width:300px;
     margin: 100px auto;
     background-color: #fff;
     border:1px solid #000;
     padding:15px;
     text-align:center;
}
</style>

<script type="text/javascript">
function overlay() {
	el = document.getElementById("overlay");
	el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";
}
</script>

<button onclick="overlay()">Klik hier</button>
<div id="overlay">
     <div>
          <p>Dit zie je als je de modal window open hebt</p>
		  <button onclick="overlay()">Sluiten</button>
     </div>
</div>
 
Hoi ido e.a.,
Waar ik me een beetje over verbaas, is dat niemand hierboven ingaat op eerder aangedragen suggesties:
  • Cyberjunkie in nr. #3 gaat niet in op mijn suggesties van nr. #2, maar komt met iets anders.
  • tiran818 in nr. #5 komt met code, en geeft geen verband aan met nr. #2 of nr. #3.
  • CaptainBri komt ook met code, en geeft geen verband aan met nr. #2, nr. 3 of nr. #5.
Moet ik daaruit begrijpen dat iedereen de voorafgaande tips niet goed vindt? :rolleyes:

Als ik moet stemmen, ga ik voor de oplossing van CaptainBri; ik zal zo vertellen waarom.
Maar met alle codes kan ik niet achterblijven. ;)

Dit is de uitwerking van de stappen 1 t/m 8 uit nr. #2:
HTML:
<div id="more"><button onclick="showPopup()">Meer...</button>
	<div id="popupVenster">
		<div id="close"><button onclick="closePopup()">Sluit</button></div>
		<h2>Dit is de titel van de popup</h2>
		<p>Dit is de tekst van de popup.<br />
		At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium 
		voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati 
		cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, 
		id est laborum et dolorum fuga.</p>
	</div>
</div>
Met als css:
Code:
#more {
	position: relative;
	}
#popupVenster{
     position: absolute;
     left: -9999px;
     top: 0;
     width: 500px;
     background: #FFFDF5;
     border: 1px solid #8080FF;
     border-radius: 6px;
     padding:15px;
}
#close{
	text-align: right;
	}
h2 {
	margin: -1em 0 0 0;
	padding: 0;
	font-size: 1.2em;
	}
Dat ziet er dan zo uit: spoiler-csshunter.htm

Nu de verschillen en overeenkomsten. :)
Bij de code van tiran818 en van CaptainBri heb ik wat rest van de pagina neergezet, zodat je meer het totaal kunt bekijken.

Dat ziet er dan zo uit: spoiler-tiran.htm, en zo: spoiler-captainbri.htm

1. De tiran-oplossing
Als je op de link klikt (link of button maakt hier niets uit), zie je meteen wat er gebeurt: de hele rest van de pagina schuift op. Oorzaak: de popup heeft een relatieve positie t.o.v. de rest van de pagina.
Ook staat de popup standaard uit met {display:none} (en wordt aangezet met {display:block}). Dat betekent dat sommige speciale (tekst- of voorlees-) browsers, die geen javascript hebben, doen alsof de hele popup niet bestaat - en deze is dan op geen enkele manier te zien/horen. Er is ook het risico dat Google niet de woorden uit de popup wil zien, zodat deze niet meedoen als trefwoorden c.q. voor de rating.
M'n conclusie: zou ik niet gebruiken.

2. De CaptainBri-oplossing
Deze is in wezen gelijk aan mijn variant, alleen in een iets andere uitvoering. De popup heeft een absolute positie, en komt over alles heen zoals het een popup betaamt. Het aan/uit wordt gedaan met de visibility in plaats van opschuiving naar buiten beeld: dat kan ook. Het javascript is wat anders gemaakt, maar komt op hetzelfde neer (voor de pedagogiek had ik er twee functies van gemaakt). En de positie is niet op gelijke hoogte en naast de button, maar is midden op de pagina gezet: dat kan ook. Verder zit er een klein html-foutje in: een button mag niet los in de <body> staan, maar moet altijd in een <div> of een <p> enz. zitten.
  • Voor de huidige toepassing is de "binnen-div" overbodig: de opmaak daarvan kan ook rechtstreeks via de <div id="overlay"> plaatsvinden, dat geeft een identiek resultaat (zie: spoiler-captainbri2.htm).
  • Als je de rest onder de pupop wilt verduisteren met een semi-transparante overlay (zolang als de popup aan staat), dan is een extra div weer wel nodig: om 100% bij 100% van het window af te dekken (zie de link van CaptainBri).
M'n conclusie: prachtig!

3. De CSShunter-oplossing
Dus analoog aan die van CaptainBri.
Een verschil met beide anderen is dat ik het javascript helemaal onderaan, vlak voor de </body></html> heb gezet volgens de vuistregel "CSS in the head, Javascript at the bottom" (zie: Best Practices for Speeding Up Your Web Site).

Manco van alle drie
Allemaal hebben ze echter nog hetzelfde nadeel voor de toegankelijkheid: als javascript uit staat (of als een browser geen javascript heeft), dan verschijnen wel de buttons, maar het klikken er op werkt niet. Niets te zien van de popup!
Dat valt te ondervangen door de pagina op te zetten via het principe van "gelaagd bouwen", met zogenaamd unobtrusive (niet in de weg staand) javascript. Dit komt er kortweg op neer dat alle javascript-functies er met javascript zelf in worden gezet (en no-script onderdelen er met javascript uit worden gehaald, als ze niet nodig zijn).
Het javascript wordt dan wel wat ingewikkelder. ;)

Dan wordt het zoiets als deze: spoiler-csshunter2.htm
Zie broncode voor het gebruikte javascript.


  • Als javascript aan staat, verschijnt en verdwijnt de popup gewoon (geen verschil met andere versie).
  • Als javascript uit staat, zijn er geen buttons en is de popup-tekst altijd zichtbaar + link om de popup over te slaan bij het lezen (of laten voorlezen door een voorleesbrowser).
  • Als javascript uit staat en ook css is uitgeschakeld (of niet aanwezig is), dan is alle informatie nog steeds beschikbaar (met ook de link om de popup over te slaan).

popup-varianten-js-css.png


popup-voorlees-txtbrowser.png

Met vriendelijke groet,
CSShunter
__________
PS: Of het een spoiler of een modal window heet, wil ik afwezen; ik noem het een css-popup. :d
PS-2: Als je een aantal id's omzet in classes, en een nummering toevoegt (ook in de javascript-functie), dan kunnen er verschillende popup-venstertjes komen op dezelfde pagina, zonder dat alles herhaald hoeft te worden.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan