Schuifregelaar voor het omkleuren van een afbeelding
Hieronder zie je een foto met een schuifregelaar. Als je die naar rechts beweegt veranderen de kleuren. Als de schuifknop helemaal rechts staat, is het weer de oorspronkelijke foto. 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 kleuren 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:hue-rotate() aangepast. De beginwaarde is 0, dat is de oorspronkelijke foto. hue-rotate kan niet < 0 zijn. In het voorbeeld is het ook minimaal 0. De maximale waarde van hue-rotate is 360°, dan is de cirkel rond en heb je de oorspronkeljke kleuren terug. Waarden > 360° zijn niet mogelijk.
- 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.
- Het filter hue-rotate() verdraait de kleurencirkel in het HSL-systeem, zie het item Kleurcodes voor tekst, links en achtergrond.
- 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 kleur.
- Als de stand van de regelaar wordt veranderd, wordt de function funKleur(this) aangeroepen via onchange.
Deze verandert de kleuren 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 hue-rotate van de foto en de schuifregelaar op 0. Deze function wordt ook aangeroepen als er op Reset wordt geklikt.
- Als de knop van de regelaar wordt verschoven wordt de function funKleur() gestart via onchange. Deze function
haalt de stand van de regelaar op en verandert de waarde van de CSS-eigenschap filter:hue-rotate(). 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.
- Tenslotte...
- N.B.: Het filter hue-rotate() werkt anders dan de colorize-functie die je bij sommige foto-bewerkingspaketten aantreft. Die colorize-functies zetten een kleurenfoto om in een zwart-witfoto, en vervangen vervolgens de grijstinten door een kleur van met het grijs overeenkomnde intensiteit.
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;
}
#kleur {
width:100%; height:6px;
margin:10px auto;
appearance:none;
border-radius:3px;
background:#09c;
outline:none;
cursor:pointer;
}
#kleur::-webkit-slider-thumb {
appearance:none;
width:12px; height:12px;
border-radius:50%;
cursor:pointer;
background:navy;
}
#kleur::-moz-range-thumb {
appearance:none;
width:12px; height:12px;
border-radius:50%;
border:0;
cursor:pointer;
background:navy;
}
</style>
<script>
function initSlider() {
document.getElementById('kleur').value = "0";
document.getElementById('foto').setAttribute("style", "filter:hue-rotate(0);");
}
window.onload = initSlider;
function funKleur(e) {
let xx = document.getElementById('foto');
let val = e.value;
xx.setAttribute("style", "filter:hue-rotate("+val+"deg);");
}
</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%"br> onclick="initSlider()">Reset</button>
<div class="wrapper">
<img src="foto.jpg" alt="Molen" title="Beweeg de
schuifregelaar en zie wat er gebeurt" width="250" height="187"
id="foto">
<input type="range" id="kleur" min="0" max="360" value="0"
onchange="funKleur(this)">
</div>
Downloaden:
Druk op de knop:
File: voorb754.zip, 835 bytes.
Opmerking:
Behalve de helderheid kunnen ook andere eigenschappen, zoals helderheid,
contrast en verzadiging, met deze techniek
worden aangepast.