Addaw, ir a inicio Donar

Técnica Scripts de cliente WCAG 2.2

SCR33Usar scripts para desplazar el contenido y proporcionar un mecanismo para pausarlo

En resumen

El texto que se desplaza automáticamente por la pantalla resulta difícil o imposible de leer para personas con baja visión o con dificultades cognitivas, y distrae a muchas otras. Esta técnica muestra cómo, si se usa JavaScript para desplazar contenido, ofrecer también un control para pausarlo y reanudarlo desde el mismo punto. Es aplicable a marquesinas, tickers y cualquier texto en movimiento controlado por script.

Aplicabilidad

Tecnologías que permiten desplazar el contenido mediante scripts.

Descripción

El objetivo de esta técnica es proporcionar a los usuarios una forma de detener el contenido en desplazamiento cuando dicho desplazamiento lo genera un script. El contenido que se desplaza puede ser difícil o imposible de leer para los usuarios con baja visión o con discapacidades cognitivas. El movimiento también puede distraer a algunas personas y dificultarles la concentración en otras partes de la página web.

Ejemplos

En este ejemplo se usan CSS y JavaScript para presentar visualmente un texto en formato de desplazamiento. Se incluye un enlace para pausar el movimiento de desplazamiento.

Esta implementación mostrará el texto completo y omitirá el enlace cuando JavaScript o CSS no sean compatibles o estén desactivados.

El componente HTML

...
<div id="scroller">
  <p id="tag">This text will scroll and a Pause/Scroll link will be present 
  when JavaScript and CSS are supported and active.</p>
</div>
...

El componente CSS

...
body {
  font:1em verdana,sans-serif;
  color:#000;
  margin:0
}
#scroller {
  position:relative;
  overflow:hidden;
  width:15em;
  border:1px solid #008080;
}
#tag {
  margin:2px 0;
}
#testP {
  visibility:hidden;
  position:absolute;
  white-space:nowrap;
} 
 #top {
  width:350px;
  margin:auto;
}
...

El componente JavaScript

var speed=50        // speed of scroller
var step=3          // smoothness of movement
var StartActionText= "Scroll"  // Text for start link
var StopActionText = "Pause"   // Text for stop link
var x, scroll, divW, sText=""
function onclickIE(idAttr,handler,call){
  if ((document.all)&&(document.getElementById)){idAttr[handler]="Javascript:"+call}
}
function addLink(id,call,txt){
  var e=document.createElement('a');
  e.setAttribute('href',call);
  var linktext=document.createTextNode(txt);
  e.appendChild(linktext);
  document.getElementById(id).appendChild(e);
}
function getElementStyle() {
  var elem = document.getElementById('scroller');
  if (elem.currentStyle) {
    return elem.currentStyle.overflow;
  }
  else if (window.getComputedStyle) {
    var compStyle = window.getComputedStyle(elem, '');
    return compStyle.getPropertyValue("overflow");
  }
  return "";
}
function addControls(){
  // test for CSS support first 
  // test for the overlow property value set in style element or external file
  if (getElementStyle()=="hidden") {
    var f=document.createElement('div');
    f.setAttribute('id','controls');
    document.getElementById('scroller').parentNode.appendChild(f);
    addLink('controls','Javascript:clickAction(0)',StopActionText);
    onclickIE(document.getElementById('controls').childNodes[0],"href",'clickAction(0)');
    document.getElementById('controls').style.display='block';
  }
}
function stopScroller(){clearTimeout(scroll)}
function setAction(callvalue,txt){
  var c=document.getElementById('controls')
  c.childNodes[0].setAttribute('href','Javascript:clickAction('+callvalue+')')
    onclickIE(document.getElementById('controls').childNodes[0],"href",'clickAction
  ('+callvalue+')')
  c.childNodes[0].firstChild.nodeValue=txt
}
function clickAction(no){
  switch(no) {
    case 0:
      stopScroller();
      setAction(1,StartActionText);
      break;
    case 1:
      startScroller();
      setAction(0,StopActionText);
  }
}
function startScroller(){
  document.getElementById('tag').style.whiteSpace='nowrap'
  var p=document.createElement('p')
  p.id='testP'
  p.style.fontSize='25%' //fix for mozilla. multiply by 4 before using
  x-=step
  if (document.getElementById('tag').className) p.className=document.getElementById
  ('tag').className
    p.appendChild(document.createTextNode(sText))
    document.body.appendChild(p)
    pw=p.offsetWidth
    document.body.removeChild(p)
    if (x<(pw*4)*-1){x=divW}
    document.getElementById('tag').style.left=x+'px'
    scroll=setTimeout('startScroller()',speed)
}
function initScroller(){
  if (document.getElementById && document.createElement && document.body.appendChild) {
    addControls();
    divW=document.getElementById('scroller').offsetWidth;
    x=divW;
    document.getElementById('tag').style.position='relative';
    document.getElementById('tag').style.left=divW+'px';
    var ss=document.getElementById('tag').childNodes;
    for (i=0;i<ss.length;i++) {sText+=ss[i].nodeValue+" "};
    scroll=setTimeout('startScroller()',speed);
  }
}
function addLoadEvent(func) {
  if (!document.getElementById | !document.getElementsByTagName) return
  var oldonload = window.onload
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload()
      func()
    }
  }
}
addLoadEvent(initScroller)

Hay disponible un ejemplo funcional de este código: Example of using script to scroll content and providing a mechanism to pause it (ejemplo de uso de scripts para desplazar contenido con un mecanismo para pausarlo).

Pruebas

Procedimiento

  1. Comprobar que se proporciona un mecanismo para pausar el contenido en desplazamiento.
  2. Usar el mecanismo de pausa para pausar el contenido en desplazamiento.
  3. Comprobar que el desplazamiento se ha detenido y no se reinicia por sí solo.
  4. Comprobar que se proporciona un mecanismo para reanudar el contenido pausado.
  5. Usar el mecanismo de reanudación proporcionado para reanudar el contenido en desplazamiento.
  6. Comprobar que el desplazamiento se ha reanudado desde el punto en el que se detuvo.

Resultados esperados

  • Las comprobaciones n.º 3 y n.º 6 son verdaderas.

Cómo lo comprobamos en ADDAW

En las auditorías de accesibilidad de ADDAW revisamos cada criterio de conformidad siguiendo este catálogo de técnicas: comprobamos si la web aplica una técnica suficiente y documentamos cada fallo común con capturas y el código afectado, para que el equipo de desarrollo sepa exactamente qué corregir. Los informes siguen la metodología del Observatorio de Accesibilidad y la norma UNE-EN 301 549.

Solicitar una auditoría

Fuente y licencia

Traducción al español, no oficial, realizada por ADDAW a partir de la técnica SCR33 del documento «Techniques for WCAG 2.2» del W3C (versión del repositorio público del W3C a 22/10/2026). Copyright © W3C® (MIT, ERCIM, Keio, Beihang). Se publica conforme a la licencia de documentos del W3C. El texto normativo de referencia es el original en inglés; si detecta un error en la traducción, escríbanos.

Financiado por la unión europea Gobierno de españa red.es Plan de recuperación transformación y resilencia kit digital