WCAG-succescriteria · Level A
WCAG 2.5.4: Bewegingsactivering
WCAG 2.5.4 vereist dat elke functionaliteit die wordt geactiveerd door apparaat- of gebruikersbeweging (zoals schudden of kantelen) ook bedienbaar moet zijn via conventionele gebruikersinterfacecomponenten, en dat gebruikers de bewegingsactivering moeten kunnen uitschakelen om onbedoelde activering te voorkomen.
Wat Deze Regel Betekent
WCAG 2.5.4 — Motion Actuation behandelt een specifiek maar steeds vaker voorkomend scenario in moderne webapplicaties: functionaliteit die wordt geactiveerd door fysieke apparaatbeweging, zoals het schudden van een smartphone, het kantelen van een apparaat of gebaren maken voor een camera. Het criterium stelt twee parallelle vereisten vast waaraan beide moet worden voldaan om conform te zijn.
Ten eerste moet elke functionaliteit die kan worden bediend door apparaatbeweging of gebruikersbeweging ook bedienbaar zijn via een gebruikersinterfacecomponent — wat betekent een knop, link, formulierelement of een vergelijkbaar interactief element dat niet afhankelijk is van beweging. Dit zorgt ervoor dat mensen die geen fysieke bewegingsgebaren kunnen uitvoeren of deze niet betrouwbaar kunnen uitvoeren, niet volledig worden uitgesloten van toegang tot die functionaliteit.
Ten tweede moeten gebruikers de bewegingsrespons kunnen uitschakelen zodat toevallige of onvrijwillige beweging geen ongewenste acties triggert. Dit beschermt gebruikers met tremoren of andere motorische aandoeningen die onbedoelde apparaatbeweging veroorzaken, tegen voortdurende verstoring door onverwacht applicatiegedrag.
Het criterium is van toepassing op twee verschillende soorten beweging: apparaatbeweging, die wordt gedetecteerd via sensoren zoals versnellingsmeters en gyroscopen die in smartphones en tablets zijn ingebouwd (benaderd via API’s zoals DeviceMotionEvent en DeviceOrientationEvent), en gebruikersbeweging, die wordt gedetecteerd via camera’s of andere invoersensoren die lichaamsbeweging of gebaren volgen in plaats van het apparaat zelf.
Een geslaagde implementatie biedt alle door beweging geactiveerde functionaliteit via een standaard UI-bediening (een knop, link of equivalent), EN stelt de gebruiker in staat de bewegingsdetectie uit te schakelen als die dat wil. Een mislukte implementatie biedt ofwel alleen via beweging toegang tot een functie zonder alternatieve UI-bediening, of biedt een alternatief maar geen manier om de bewegingstrigger uit te schakelen zodat onvrijwillige beweging geen problemen veroorzaakt.
WCAG 2.5.4 definieert twee belangrijke uitzonderingen. Motion actuation is uitgezonderd als de beweging essentieel is voor de functie en het uitschakelen ervan de activiteit fundamenteel zou veranderen — bijvoorbeeld een stappenteller-fitnessapplicatie waarbij bewegingsregistratie het kern-doel is, of een spel dat expliciet is ontworpen rond kantelmechanieken. De tweede uitzondering is van toepassing wanneer de beweging wordt gebruikt om functionaliteit te bedienen via een ondersteunde toegankelijkheidsinterface, wat betekent dat de eigen toegankelijkheidsfuncties van het platform de bewegingsinteractie afhandelen op een manier die de gebruiker zelfstandig beheerst.
Waarom Het Belangrijk Is
Belemmeringen door motion actuation treffen in het bijzonder mensen met motorische en mobiliteitsbeperkingen, maar de impact is breder dan veel ontwikkelaars aanvankelijk aannemen. Begrijpen wie wordt getroffen — en hoe — helpt teams dit criterium op de juiste manier te prioriteren.
Mensen met tremoraandoeningen — waaronder essentiële tremor, de ziekte van Parkinson en multiple sclerose — kunnen constante of intermitterende onvrijwillige beweging van hun handen en armen ervaren. Wanneer zij een smartphone vasthouden, is hun natuurlijke tremor al genoeg om shake-to-undo-dialogen, verversacties of andere door beweging geactiveerde functies herhaaldelijk en onverwacht te triggeren. De Wereldgezondheidsorganisatie schat dat ongeveer 1,3 miljard mensen wereldwijd leven met een vorm van significante beperking, en aandoeningen die de fijne motoriek beïnvloeden behoren tot de meest voorkomende in alle leeftijdsgroepen.
Mensen met verlamming of verschillen in ledematen gebruiken hun apparaten mogelijk gemonteerd op rolstoelen of standaarden, of gebruiken hoofdaanwijzers, oogbesturing of schakelbediening om met hun apparaten te communiceren. Deze gebruikers kunnen vaak helemaal geen apparaat schudden of kantelen, waardoor functies die uitsluitend op beweging zijn gebaseerd volledig ontoegankelijk zijn. Als de enige manier om een tekstinvoer in een mobiele webapplicatie ongedaan te maken is door het apparaat te schudden, kan een rolstoelgebruiker met een gemonteerde telefoon simpelweg geen toegang krijgen tot die functie.
Oudere volwassenen vormen een andere aanzienlijk getroffen groep. Leeftijdsgebonden aandoeningen zoals verminderde knijpkracht, artritis en essentiële tremor komen steeds vaker voor met het ouder worden, wat betekent dat een groeiend deel van de bevolking — dat ook steeds actiever is als digitale gebruiker — moeite kan hebben met precieze of intentionele bewegingsgebaren.
Beschouw een concreet scenario uit de echte wereld: een Turkse e-commercesite voegt een “shake to shuffle”-functie toe die gebruikers een willekeurige productaanbeveling toont wanneer ze hun telefoon schudden, waardoor het browsen aantrekkelijker wordt. De functie is leuk en nieuw, maar er is geen equivalente knop om de shuffle te triggeren, en geen manier om de schuddetectie uit te schakelen. Een gebruiker met de ziekte van Parkinson die die site bezoekt, ervaart constante, ongecontroleerde shuffle-activeringen doordat hun natuurlijke tremor het gebaar triggert. Die persoon kan niet rustig browsen omdat de pagina steeds naar willekeurige producten springt. Deze gebruiker wordt feitelijk buitengesloten van een normale winkelervaring — en onder de Turkse toegankelijkheidsregelgeving is dit niet slechts een UX-probleem maar een juridische non-conformiteit.
Naast toegankelijkheid voor mensen met een beperking verbetert het uitschakelen van of het bieden van alternatieven voor bewegingsfuncties ook de ervaring voor gebruikers in omgevingen waar apparaatbeweging onbetrouwbaar is — in het openbaar vervoer, op kantoren of in elke omgeving waar een gebruiker zijn apparaat niet vrij kan bewegen.
Gerelateerde Axe-core Regels
WCAG 2.5.4 vereist handmatige tests omdat geautomatiseerde tools de aanwezigheid of afwezigheid van op beweging gebaseerde functionaliteit niet betrouwbaar kunnen detecteren door alleen statische HTML en CSS te analyseren. Motion actuation is afhankelijk van JavaScript-eventlisteners en runtimegedrag dat geautomatiseerde scanners niet volledig kunnen doorgronden. Het volgende legt uit waarom automatisering tekortschiet en wat handmatige evaluatie moet dekken.
- Er bestaat geen directe geautomatiseerde axe-core-regel voor 2.5.4. Axe-core en vergelijkbare geautomatiseerde engines werken door de DOM, ARIA-attributen en berekende stijlen te inspecteren. Ze kunnen niet waarnemen of een pagina een
devicemotion- ofdeviceorientation-eventlistener heeft geregistreerd, noch kunnen ze bepalen of er een equivalente UI-bediening bestaat voor enige door beweging geactiveerde functionaliteit. Een pagina kan uitgebreide op beweging gebaseerde interactiviteit hebben zonder zichtbare DOM-indicatoren, waardoor geautomatiseerde detectie fundamenteel onbetrouwbaar is. Axe-core markeert dit criterium daarom als iets dat handmatige beoordeling vereist, in plaats van te proberen geautomatiseerde detectie uit te voeren die hoge aantallen fout-negatieven zou opleveren. - Handmatige inspectie van JavaScript-eventlisteners is vereist. Testers moeten de ontwikkelaarstools van de browser gebruiken om te zoeken naar registraties van
DeviceMotionEvent,DeviceOrientationEventen camera/vision-API’s zoals de Shape Detection API. Het paneel Event Listeners in DevTools van de browser kan laten zien of deze events zijn gekoppeld aan het window- of document-object. - Functionele equivalentie kan niet worden geautomatiseerd. Zelfs als een tool een bewegingslistener zou kunnen detecteren, kan deze niet bepalen of ergens anders in de interface een knop of link dezelfde functionaliteit biedt. Het beoordelen van functionele equivalentie vereist een menselijke tester die de functies van de applicatie begrijpt en kan verifiëren dat elke door beweging geactiveerde actie een bereikbaar, bedienbaar UI-alternatief heeft.
- Uitschakelbaarheid kan niet worden geautomatiseerd. Bepalen of een gebruiker bewegingsresponsen kan uitschakelen vereist interactie met de instellingen of voorkeuren van de applicatie — een gedragstest die geautomatiseerde tools niet zijn ontworpen om volledig uit te voeren.
Hoe te Testen
- Geautomatiseerde scan als startpunt: Voer axe DevTools, Lighthouse of de Accsible-toegankelijkheidschecker uit op de pagina. Deze tools zullen 2.5.4-overtredingen niet automatisch markeren, maar kunnen gerelateerde problemen aan het licht brengen. Noteer alle gemarkeerde items en ga vervolgens verder met de handmatige stappen. De afwezigheid van geautomatiseerde meldingen betekent niet dat de pagina 2.5.4 haalt.
- Identificeer door beweging geactiveerde functionaliteit: Open Chrome DevTools en ga naar het tabblad Elements. Doorzoek de JavaScript-bronbestanden van de pagina (met het tabblad Sources en globale zoekopdracht met Ctrl+Shift+F) op de strings
devicemotion,deviceorientation,accelerat,gyroenshake. Documenteer elke gevonden instantie en de bijbehorende functionaliteit. - Controleer of UI-alternatieven bestaan: Probeer voor elk stuk door beweging geactiveerde functionaliteit dat in de vorige stap is ontdekt, dezelfde actie uit te voeren met alleen toetsenbordnavigatie en muisklikken — geen apparaatbeweging. Navigeer door de interface met Tab, Enter, Spatiebalk en pijltjestoetsen. Als u geen bedienbare UI-bediening kunt vinden die hetzelfde resultaat bereikt, faalt het criterium.
- Controleer of beweging kan worden uitgeschakeld: Zoek naar een instellingenmenu, voorkeurenpaneel, toegankelijkheidsinstellingen of een specifieke schakelaar voor bewegingsfuncties. Probeer motion actuation uit te schakelen. Als er geen dergelijke bediening bestaat, of als het uitschakelen van beweging ook het UI-alternatief uitschakelt, faalt het criterium.
- Testen op een fysiek apparaat: Laad de pagina op een echte smartphone of tablet. Beweeg het apparaat opzettelijk zachtjes (simuleer onvrijwillige tremor — kleine, continue bewegingen) en observeer of functionaliteit onbedoeld wordt geactiveerd. Voer vervolgens dezelfde test uit nadat u beweging via eventuele beschikbare instellingen hebt uitgeschakeld.
- Screenreader- en toetsenbordtesten: Gebruik NVDA met Firefox, VoiceOver met Safari op iOS of JAWS met Chrome en navigeer door de pagina met alleen het toetsenbord en screenreader-commando’s. Bevestig dat alle functionaliteit die via beweging bereikbaar is, ook bereikbaar is via screenreader-navigatie, en dat de bediening om beweging uit te schakelen (indien aanwezig) zelf toetsenbordtoegankelijk en correct gelabeld is.
- Device-simulatie in Browser DevTools: Open in Chrome DevTools het paneel Sensors (More Tools > Sensors) en gebruik de simulatiebedieningen voor apparaatoriëntatie en versnellingsmeter om bewegingsevents programmatisch te triggeren. Dit maakt desktoptesten van door beweging geactiveerd gedrag mogelijk zonder een fysiek apparaat.
Hoe te Herstellen
Shake-to-Refresh zonder alternatief — Onjuist
<!-- Motion listener attached, but no UI button provided to refresh -->
<script>
window.addEventListener('devicemotion', function(event) {
var acceleration = event.accelerationIncludingGravity;
if (Math.abs(acceleration.x) > 15 || Math.abs(acceleration.y) > 15) {
refreshContent();
}
});
</script>
<div id='content'>...page content...</div>
Shake-to-Refresh zonder alternatief — Juist
<!-- Motion alternative: a visible button provides the same refresh action.
A settings toggle lets users disable the motion trigger entirely. -->
<div id='motion-controls'>
<button type='button' id='refresh-btn' onclick='refreshContent()'>
Refresh Content
</button>
<label>
<input type='checkbox' id='disable-motion' onchange='toggleMotion(this.checked)' />
Disable shake-to-refresh
</label>
</div>
<div id='content'>...page content...</div>
<script>
var motionEnabled = true;
function toggleMotion(disabled) {
motionEnabled = !disabled;
}
window.addEventListener('devicemotion', function(event) {
if (!motionEnabled) return;
var acceleration = event.accelerationIncludingGravity;
if (Math.abs(acceleration.x) > 15 || Math.abs(acceleration.y) > 15) {
refreshContent();
}
});
function refreshContent() {
// fetch and update content
}
</script>
Tilt-to-Scroll-carrousel zonder uitschakeloptie — Onjuist
<!-- Carousel advances on device tilt; no way to turn this off -->
<div id='carousel'>
<div class='slide'>Slide 1</div>
<div class='slide'>Slide 2</div>
<div class='slide'>Slide 3</div>
</div>
<script>
window.addEventListener('deviceorientation', function(event) {
if (event.gamma > 30) advanceCarousel();
if (event.gamma < -30) retreatCarousel();
});
</script>
Tilt-to-Scroll-carrousel zonder uitschakeloptie — Juist
<!-- Previous/Next buttons provide UI alternatives.
A settings checkbox lets users opt out of tilt control.
The carousel is also keyboard accessible via arrow keys. -->
<div id='carousel-wrapper'>
<button type='button' aria-label='Previous slide' onclick='retreatCarousel()'>«</button>
<div id='carousel' role='region' aria-label='Image carousel' aria-live='polite'>
<div class='slide' aria-hidden='false'>Slide 1</div>
<div class='slide' aria-hidden='true'>Slide 2</div>
<div class='slide' aria-hidden='true'>Slide 3</div>
</div>
<button type='button' aria-label='Next slide' onclick='advanceCarousel()'>»</button>
</div>
<label>
<input type='checkbox' id='disable-tilt' onchange='tiltEnabled = !this.checked' />
Disable tilt navigation
</label>
<script>
var tiltEnabled = true;
window.addEventListener('deviceorientation', function(event) {
if (!tiltEnabled) return;
if (event.gamma > 30) advanceCarousel();
if (event.gamma < -30) retreatCarousel();
});
</script>
Camera-gebaarfunctie zonder alternatief — Onjuist
<!-- User waves hand in front of camera to dismiss a modal;
no button or keyboard method exists to dismiss it otherwise -->
<div id='modal' role='dialog' aria-modal='true' aria-label='Notification'>
<p>Wave your hand to dismiss this message.</p>
</div>
<script>
startCameraGestureDetection(function onWave() {
document.getElementById('modal').hidden = true;
});
</script>
Camera-gebaarfunctie zonder alternatief — Juist
<!-- A clearly labeled close button provides the UI alternative.
The modal is fully keyboard operable and focus is managed correctly. -->
<div id='modal' role='dialog' aria-modal='true' aria-labelledby='modal-title'>
<h2 id='modal-title'>Notification</h2>
<p>Wave your hand or press the button below to dismiss this message.</p>
<button type='button' id='dismiss-btn' onclick='dismissModal()'>Dismiss</button>
</div>
<script>
function dismissModal() {
document.getElementById('modal').hidden = true;
// return focus to triggering element
}
startCameraGestureDetection(dismissModal);
// Allow Escape key to also dismiss
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') dismissModal();
});
</script>
Veelvoorkomende Fouten
- Wel een UI-alternatieve knop bieden maar de schakelaar om beweging uit te schakelen vergeten: Veel ontwikkelaars voegen een equivalente knop toe maar implementeren nooit een manier om de bewegingslistener uit te schakelen, waardoor gebruikers met tremor nog steeds ongewenste activaties ervaren, ook al is de functie technisch gezien op andere manieren bedienbaar.
- De optie om beweging uit te schakelen verbergen in een hamburgermenu of diep weggestopte instellingenpagina: De bediening om beweging uit te schakelen moet zelf gemakkelijk bereikbaar zijn. Als een gebruiker met een tremor herhaaldelijk shake-to-refresh triggert voordat die vijf menuniveaus diep kan navigeren om het uit te schakelen, is de uitschakeloptie praktisch niet toegankelijk.
- Aannemen dat de OS-instelling “reduce motion” voldoet aan 2.5.4: De mediaquery
prefers-reduced-motionen OS-toegankelijkheidsinstellingen hebben betrekking op animatie en vestibulaire problemen, maar schakelen niet automatisch eventlisteners voor apparaatbeweging in webapplicaties uit. U moet dit in uw eigen code afhandelen. - Bewegingsdrempels te laag instellen: Het gebruik van zeer gevoelige drempels voor
DeviceMotionEvent-versnellingswaarden betekent dat kleine, onvrijwillige tremoren de drempel kunnen overschrijden. Drempels moeten een bewuste, krachtige beweging vereisen, en zelfs dan is een uitschakeloptie vereist. - Bewegingslisteners globaal op window registreren zonder ze ooit te verwijderen: Een listener koppelen en nooit een codepad bieden om deze met
removeEventListenerte verwijderen, betekent dat de uitschakel-schakelaar alleen het gedrag voorwaardelijk kan onderdrukken — als de schakelaar zelf faalt of wordt gereset bij het herladen van de pagina, blijft de beweging actief. - De checkbox om beweging uit te schakelen ontoegankelijk maken: De uitschakel-schakelaar implementeren als een gestylede
<div>of<span>met een click-listener in plaats van een correcte<input type='checkbox'>of ARIA-verrijkte bediening betekent dat toetsenbord- en screenreader-gebruikers de bediening die juist voor hen bedoeld is, niet kunnen bereiken of bedienen. - Gebruikersvoorkeuren voor beweging niet over sessies heen bewaren: Als een gebruiker motion actuation uitschakelt maar de voorkeur niet wordt opgeslagen (bijv. via
localStorageof een gebruikersaccountinstelling), moet die persoon het bij elk bezoek opnieuw uitschakelen, wat een herhaalde belasting vormt voor de gebruikers die er het meest door worden getroffen. - De uitzondering voor essentiële functies te ruim toepassen: De “essentiële” uitzondering is beperkt. Een productgalerij die shake-to-shuffle gebruikt is niet essentieel — de shuffle-functie is niet de kernfunctie van een shoppingsite. Teams passen deze uitzondering soms verkeerd toe om implementatiewerk te vermijden.
- Niet testen op een echt fysiek apparaat met daadwerkelijke beweging: Alleen vertrouwen op desktop-simulatietools of geautomatiseerde scans betekent dat problemen met gevoeligheid voor echte beweging — inclusief hoe de functie zich gedraagt wanneer een gebruiker een natuurlijke tremor heeft — pas worden ontdekt wanneer gebruikers ze melden.
- Vergeten dat bewegingsfuncties die door SDK’s van derden of analysetools worden toegevoegd ook moeten voldoen: Bewegingslisteners die zijn ingebed in chat-widgets van derden, gamification-SDK’s of A/B-testtools maken nog steeds deel uit van de conformiteitsverantwoordelijkheid van de pagina. Als een script van een derde een
devicemotion-listener registreert zonder een alternatief te bieden, faalt de pagina 2.5.4.
Relatie met de Turkse Toegankelijkheidsregelgeving
Turkije’s Presidential Circular No. 2025/10, gepubliceerd in het Staatsblad (No. 32933) op 21 juni 2025, stelt verplichte webtoegankelijkheidseisen vast die zijn afgestemd op WCAG 2.2. WCAG 2.5.4 Motion Actuation is een Level A-criterium, wat betekent dat het zich op het hoogste prioriteitsniveau van verplichte naleving onder deze circulaire bevindt.
De circulaire heeft betrekking op een breed scala aan publieke en private entiteiten. Publieke instellingen — waaronder alle centrale en lokale overheidsorganen, ministeries en publieke agentschappen — moeten binnen één jaar na publicatie van de circulaire volledige Level A-conformiteit bereiken. Private entiteiten in de gedekte categorieën moeten binnen twee jaar aan dezelfde norm voldoen. De gedekte private categorieën omvatten e-commerceplatforms en marktplaatsen, banken en financiële instellingen, ziekenhuizen en particuliere zorgaanbieders, telecombedrijven met 200.000 of meer abonnees, erkende reisbureaus, particuliere vervoersbedrijven en particuliere scholen die opereren onder autorisatie van het Ministry of National Education (MoNE).
Motion actuation is bijzonder relevant voor Turkse digitale diensten omdat het mobiele internetgebruik in Turkije zeer hoog is, waarbij het merendeel van het webverkeer afkomstig is van smartphones. Mobile-first- en mobile-only-webapplicaties zijn daarom extreem gebruikelijk in alle gedekte sectoren. Elke Turkse e-commercesite, bankapplicatie of overheidsportal die shake-to-refresh, kantelnavigatie, gebareninteracties of vergelijkbare bewegingsfuncties heeft geïmplementeerd zonder UI-alternatieven en uitschakelbedieningen te bieden, is in directe overtreding van een verplicht Level A-vereiste onder Presidential Circular 2025/10.
Voor gedekte entiteiten die conformiteitsroadmaps voorbereiden, moet motion actuation worden beoordeeld als onderdeel van een bredere audit van mobiele toegankelijkheid. Omdat geautomatiseerde tools 2.5.4-overtredingen niet kunnen detecteren, moeten organisaties handmatige tests door gekwalificeerde toegankelijkheidsspecialisten opnemen als onderdeel van hun conformiteitsverificatieproces. Aangezien de circulaire geen overgangsperiode bevat voor functies die vóór publicatie zijn geïmplementeerd — alleen een tijdlijn voor het bereiken van conformiteit — moet alle op beweging gebaseerde functionaliteit die momenteel op gedekte sites is uitgerold, binnen de toepasselijke deadline worden hersteld.
Entiteiten die niet voldoen aan de vereisten van de circulaire kunnen te maken krijgen met administratieve sancties en vallen onder de handhaving door de relevante toezichthoudende autoriteiten voor hun sector. Naast het regelgevingsrisico vormt non-conformiteit met 2.5.4 op een drukbezochte Turkse mobiele site een reële gebruiksprobleem voor miljoenen gebruikers die motorische beperkingen of tremoren kunnen ervaren of ondersteunende technologie gebruiken — een populatie waarvan de behoeften expliciet worden erkend en beschermd door de keuze van de circulaire om WCAG 2.2 Level A als basisnorm te hanteren.
Bronnen & referenties
- W3C Understanding 2.5.4 Motion Actuation
- W3C Techniques for 2.5.4 Motion Actuation
- MDN: DeviceMotionEvent
- MDN: DeviceOrientationEvent
- W3C Technique G213: Provide conventional controls and an application setting for motion activated input
- Deque University: WCAG 2.5.4 Motion Actuation Overview
- WebAIM: Motor Disabilities and Accessibility
