Schuifregelaar voor de negatieve kleur van een afbeelding
Hieronder zie je een foto met een schuifregelaar. Als je die naar rechts beweegt worden de kleuren vervangen door de foto-negatieve tegenhanger. Als de schuifknop helemaal rechts staat, zijn de kleuren volledig foto-negatief. Als de schuifknop halverwege de schuifbalk staat is de foto grijs. 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:invert() aangepast. De beginwaarde is 0, dat is de oorspronkelijke foto. invert kan niet < 0 zijn. In het voorbeeld is het ook minimaal 0. De maximale waarde van invert is 100, dan zijn de kleuren foto-negatief. Waarden > 100 zijn mogelijk, maar worden behandeld als 100.
- 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 negatief.
- Als de stand van de regelaar wordt veranderd, wordt de function funNegatief(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 invert 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 funNegatief() gestart via onchange. Deze function
haalt de stand van de regelaar op en verandert de waarde van de CSS-eigenschap filter:invert(). 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...
- In de dagelijkse praktijk zal deze toepassing weinig of niet worden gebruikt, hoogstens als gimmick op een foto-site-
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;
}
#negatief {
width:100%; height:6px;
margin:10px auto;
appearance:none;
border-radius:3px;
background:#09c;
outline:none;
cursor:pointer;
}
#negatief::-webkit-slider-thumb {
appearance:none;
width:12px; height:12px;
border-radius:50%;
cursor:pointer;
background:navy;
}
#negatief::-moz-range-thumb {
appearance:none;
width:12px; height:12px;
border-radius:50%;
border:0;
cursor:pointer;
background:navy;
}
</style>
<script>
function initSlider() {
document.getElementById('negatief').value = "0";
document.getElementById('foto').setAttribute("style", "filter:invert(0);");
}
window.onload = initSlider;
function funNegatief(e) {
let xx = document.getElementById('foto');
let val = e.value;
xx.setAttribute("style", "filter:invert("+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="Park" title="Beweeg de schuifregelaar en zie
wat er gebeurt" width="250" height="187" id="foto">
<input type="range" id="negatief" min="0" max="100" value="0"
onchange="funNegatief(this)">
</div>
Downloaden:
Druk op de knop:
File: voorb749.zip, 833 bytes.
Opmerking:
Behalve de helderheid kunnen ook andere eigenschappen, zoals helderheid,
contrast en verzadiging, met deze techniek
worden aangepast.