Schuifregelaar voor de kleurverzadiging van een afbeelding
Hieronder zie je een foto met een schuifregelaar. Als je die naar links beweegt wordt de kleurverzadiging minder, waardoor de foto meer op een zwart-wit foto gaat lijken. Als je de regelaar naar rechts beweegt, wordt de verzadiging hoger, waardoor de kleuren erg fel 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 de kleurverzadiging 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:saturate() aangepast. De beginwaarde
is 100. Bij saturate < 100 verdwijnt de kleur, in het voorbeeld minimaal 30. Bij saturate > 100 worden de
kleuren van de foto feller, in het voorbeeld maximaal 500.
De minimale waarde van saturate volgens de standaard is nul (zwart-wit foto). Er lijkt geen maximum te zijn.
N.B.: Als je een kleurenfoto wilt tonen als zwart-wit foto, kun je beter het filter grayscale() gebruiken, omdat dat filter ook rekening houdt met de helderheid en het contrast. - 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 verzadiging.
- Als de stand van de regelaar wordt veranderd, wordt de function funVerzadiging(this) aangeroepen via onchange.
Deze verandert de kleurverzadiging 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 de kleurverzadiging 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 funVerzadiging() gestart via onchange. Deze function
haalt de stand van de regelaar op en verandert de waarde van de CSS-eigenschap filter:saturate(). 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;
}
#verzadiging {
width:100%; height:6px;
margin:10px auto;
appearance:none;
border-radius:3px;
background:#09c;
outline:none;
cursor:pointer;
}
#verzadiging::-webkit-slider-thumb {
appearance:none;
width:12px; height:12px;
border-radius:50%;
cursor:pointer;
background:navy;
}
#verzadiging::-moz-range-thumb {
appearance:none;
width:12px; height:12px;
border-radius:50%;
border:0;
cursor:pointer;
background:navy;
}
</style>
<script>
function initSlider() {
document.getElementById('verzadiging').value = "100";
document.getElementById('foto').setAttribute("style",
"filter:saturate(100%);");
}
window.onload = initSlider;
function funVerzadiging(e) {
let xx = document.getElementById('foto');
let val = e.value;
xx.setAttribute("style", "filter:saturate("+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="Roos" title="Beweeg de schuifregelaar en zie
wat er gebeurt" width="250" height="187" id="foto">
<input type="range" id="verzadiging" min="30" max="500"
value="100" onchange="funVerzadiging(this)">
</div>
Downloaden:
Druk op de knop:
File: voorb748.zip, 843 bytes.
Opmerking:
Behalve de kleurverzadiging kunnen ook andere eigenschappen, zoals helderheid en
contrast, met deze techniek worden aangepast.