Schuifregelaar voor het contrast van een afbeelding
Hieronder zie je een foto met een schuifregelaar. Als je die naar links beweegt wordt het contrast minder, waardoor de foto grijzer wordt. Als je de regelaar naar rechts beweegt, wordt het contrast van de foto hoger, waardoor de kleuren erg hard worden. Je gaat terug naar de beginsituatie door op de knop "Reset" te klikken.
Op deze pagina wordt uitgelegd hoe je zoiets maakt. De code kun je downloaden om zelf te gebruiken, echter zonder de foto.
- Er worden twee items besproken:
- De werking van het script.
- Toepassen in je eigen site.
- De code bestaat uit HTML, CSS en JavaScript. In het voorbeeld staat alles in het document, maar gelinkte bestanden kunnen natuurlijk ook.
- Het veranderen van het contrast van de foto wordt behandeld. Voor het veranderen van de opmaak van de schuifregelaar wordt verwezen naar het item Schuifregelaar voor de helderheid van een afbeelding.
- Inspiratie voor dit item is ontstaan door een toepassing op internet, waar het effect op het hele document werkt. Op deze
site werkt het alleen op een enkele foto.
- De werking van het script
- Als je de schuifregelaar verzet wordt door JavaScript de CSS-eigenschap filter:contrast() aangepast. De beginwaarde
is 100. Bij contrast < 100 wordt de foto grijzer, in het voorbeeld minimaal 30. Bij contrast > 100
worden de kleuren van de foto harder, in het voorbeeld maximaal 500.
De minimale waarde van contrast volgens de standaard is nul (zwart). Er lijkt geen maximum te zijn. - Door op Reset te klikken ga je terug naar de beginsituatie.
- De schuifregelaar is een standaard HTML-element, waarvan de opmaak door CSS is veranderd.
- HTML
- De HTML van het voorbeeld bestaat uit een <button>-tag voor de Reset-knop en een <div>-tag die de foto en de schuifregelaar bij elkaar houdt. Deze heeft de klasse wrapper en wordt ook gebruikt om de foto en de regelaar in de regel te centreren.
- Een klik op de knop activeert de function initSlider() via onclick.
- De foto is een gewone<img>-tag. Voor de communicatie met JavaScript heeft deze de id foto.
- De schuifregelaar is gemaakt met <input type="range">. De standaard-opmaak is geheel overschreven met CSS-eigenschappen. Voor de communicatie met JavaScript heeft deze de id contrast.
- Als de stand van de regelaar wordt veranderd, wordt de function funContrast(this) aangeroepen via onchange.
Deze verandert het contrast van de foto. Via de parameter this wordt aangegeven dat de waarde uit de schuifregelaar
zelf moet worden gehaald.
- CSS
- De knop is opgemaakt met een style-attribuut in de HTML-tag.
- De wrapper houdt de foto en de schuifregelaar bij elkaar en positioneert het geheel in het midden van de regel. De breedte is gelijk aan de breedte van de foto: 250px. De hoogte is zodanig gekozen dat de foto en de regelaar er boven elkaar goed in passen.
- De balk en de knop van de schuifregelaar worden apart opgemaakt. Zie het item
Schuifregelaar voor de helderheid van een afbeelding.
- JavaScript
- Als de pagina is geladen wordt de function initSlider() gestart via window.onload. Deze function zet het contrast van de foto op 100% en de schuifregelaar op 100. Deze function wordt ook aangeroepen als er op Reset wordt geklikt.
- Als de knop van de regelaar wordt verschoven wordt de function funContrast() gestart via onchange. Deze function
haalt de stand van de regelaar op en verandert de waarde van de CSS-eigenschap filter:contrast(). Dit gaat met een
omweg: in plaats van de CSS direct te veranderen, wordt het inline style attribuut van de img-tag veranderd.
- Toepassen in je eigen site
- Download de .zip-file en pak hem uit. Bouw de code op zoals hier onder is aangegeven.
- Regel een geschikte foto. Pas in de <img>-tag de attributen width en height aan. Doe dat ook in de CSS van wrapper.
- Verander eventueel de kleuren naar je eigen smaak. Pas eventueel de hoogte van de schuifbalk (met of zonder afrondingsstraal) aan, pas de diameter van de schuifknoppen aan.
- Verander desgewenst de positie van de Reset-knop, of laat hem helemaal weg.
N.B.: Weglaten van de knop heeft geen verandering van het JavaScript tot gevolg. - Verander desgewenst de positie van wrapper.
- De opmaak van de schuifknop, in de pseudo-klassen -webkit-slider-thumb en -moz-range-thumb, staat in twee aparte blokken. Die kunnen niet worden samengevoegd.
Gebruik:
- De code staat gedeeltelijk in de <HEAD> en gedeeltelijk in de <BODY>.
De code van het voorbeeld ziet er als volgt uit:
(Zet dit in de <HEAD>).
<style>
.wrapper {
width:250px; height:217px;
margin:0 auto;
box-sizing:border-box;
}
#contrast {
width:100%; height:6px;
margin:10px auto;
appearance:none;
border-radius:3px;
background:#09c;
outline:none;
cursor:pointer;
}
#contrast::-webkit-slider-thumb {
appearance:none;
width:12px; height:12px;
border-radius:50%;
cursor:pointer;
background:navy;
}
#contrast::-moz-range-thumb {
appearance:none;
width:12px; height:12px;
border-radius:50%;
border:0;
cursor:pointer;
background:navy;
}
</style>
<script>
function initSlider() {
document.getElementById('contrast').value = "100";
document.getElementById('foto').setAttribute("style", "filter:contrast(100%);");
}
window.onload = initSlider;
function funContrast(e) {
let xx = document.getElementById('foto');
let val = e.value;
xx.setAttribute("style", "filter:contrast("+val+"%);");
}
</script>
(Zet dit in de <BODY> op de plaats waar het effect moet verschijnen.)
<button style="float:right;margin-right:10px;color:navy;
font-weight:bold;font-size:110%"
onclick="initSlider()">Reset</button>
<div class="wrapper">
<img src="foto.jpg" alt="Paddenstoel" title="Beweeg de schuifregelaar
en zie wat er gebeurt" width="250" height="187" id="foto">
<input type="range" id="contrast" min="30" max="500"
value="100" onchange="funContrast(this)">
</div>
Downloaden:
Druk op de knop:
File: voorb747.zip, #844 bytes.
Opmerking:
Behalve het contrast kunnen ook andere eigenschappen, zoals helderheid en
verzadiging, met deze techniek worden aangepast.