El Atributo ONRATECHANGE

El atributo onratechange detecta cambios en la velocidad de reproducción (playback rate) de elementos multimedia
El atributo onratechange
detecta cambios en la velocidad de reproducción (playback rate) de elementos multimedia (<audio>
o <video>
). Es útil para:
-
Crear controles personalizados de velocidad
-
Sincronizar efectos visuales con la velocidad
-
Implementar características educativas (ej: cursos en video)
-
Registrar preferencias de usuarios
???? Sintaxis Básica
<video src="video.mp4" onratechange="manejarCambioVelocidad(event)" ></video>
// Mediante JavaScript: elementoMedia.addEventListener('ratechange', (event) => { // Lógica aquí });
???? Propiedades Clave
-
playbackRate
: Velocidad actual (1.0 = normal, 2.0 = 2x) -
defaultPlaybackRate
: Velocidad predeterminada
???? Ejemplos Prácticos
1. Monitor Básico de Velocidad
<video id="miVideo" src="video.mp4" controls onratechange="actualizarVelocidad()"></video> <p>Velocidad actual: <span id="velocidad">1x</span></p> <script> function actualizarVelocidad() { const video = document.getElementById('miVideo'); document.getElementById('velocidad').textContent = `${video.playbackRate.toFixed(1)}x`; } </script>
2. Controlador Personalizado de Velocidad
<video id="videoPlayer" src="clase.mp4" controls></video> <div class="speed-controls"> <button onclick="cambiarVelocidad(0.5)">0.5x</button> <button onclick="cambiarVelocidad(1)">Normal</button> <button onclick="cambiarVelocidad(1.5)">1.5x</button> <input type="range" min="0.5" max="3" step="0.25" value="1" oninput="cambiarVelocidad(this.value)" > </div> <script> const video = document.getElementById('videoPlayer'); // Actualizar velocidad y UI function cambiarVelocidad(rate) { video.playbackRate = parseFloat(rate); } // Detectar cambios automáticos video.addEventListener('ratechange', () => { document.querySelector('input[type="range"]').value = video.playbackRate; }); </script> <style> .speed-controls { margin: 15px; padding: 10px; background: #f0f0f0; } </style>
3. Sincronización de Subtítulos
<video id="videoTutorial" src="tutorial.mp4" onratechange="ajustarSubtitulos()"></video> <div id="subtitulos"></div> <script> const subtitles = [ { time: 0, text: "Introducción..." }, { time: 5, text: "Primer concepto clave..." }, { time: 10, text: "Ejemplo práctico..." } ]; function ajustarSubtitulos() { const video = document.getElementById('videoTutorial'); const adjustedTime = video.currentTime / video.playbackRate; const currentSub = subtitles.find(sub => adjustedTime >= sub.time && adjustedTime < sub.time + 3 ); document.getElementById('subtitulos').textContent = currentSub?.text || ''; } </script>
???? Casos de Uso Avanzados
1. Sistema de Aprendizaje Adaptativo
// Ajustar velocidad según complejidad del contenido const segmentosVideo = [ { start: 0, end: 30, velocidadRecomendada: 1.0 }, { start: 30, end: 60, velocidadRecomendada: 0.75 } ]; video.addEventListener('timeupdate', () => { const segmentoActual = segmentosVideo.find(seg => video.currentTime >= seg.start && video.currentTime < seg.end ); if (segmentoActual && video.playbackRate !== segmentoActual.velocidadRecomendada) { video.playbackRate = segmentoActual.velocidadRecomendada; } });
2. Análisis de Hábitos de Usuario
let velocidadCambios = []; video.addEventListener('ratechange', () => { velocidadCambios.push({ tiempo: video.currentTime, velocidad: video.playbackRate, fecha: new Date() }); // Enviar datos al servidor cada 30 segundos if (video.currentTime % 30 === 0) { enviarAnaliticas(velocidadCambios); velocidadCambios = []; } });
3. Efectos de Sonido Adaptativos
<audio id="audioLibro" src="audiobook.mp3"></audio> <script> const audio = document.getElementById('audioLibro'); const context = new AudioContext(); const source = context.createMediaElementSource(audio); // Ajustar tono al cambiar velocidad audio.addEventListener('ratechange', () => { const playbackRate = audio.playbackRate; const pitchShift = playbackRate > 1 ? 1.2 : 0.8; // Aplicar efecto de tono (requiere Web Audio API) const pitchNode = new PitchShift(context); pitchNode.pitch = pitchShift; source.connect(pitchNode).connect(context.destination); }); </script>
⚠️ Consideraciones Importantes
-
Límites de Velocidad:
// Verificar velocidades soportadas video.addEventListener('ratechange', () => { if (video.playbackRate < 0.5 || video.playbackRate > 4) { console.warn('Velocidad no soportada'); video.playbackRate = 1.0; } });
-
Compatibilidad:
Navegador Soporte Chrome ✅ 20+ Firefox ✅ 15+ Safari ✅ 7+ Edge ✅ 12+ -
Mejores Prácticas:
-
Usar
toFixed()
para mostrar valores decimales limpios -
Combinar con
timeupdate
para efectos precisos -
Proporcionar feedback visual inmediato
-
???? Conclusión
El atributo onratechange
permite:
-
Crear experiencias multimedia interactivas
-
Adaptar contenido al comportamiento del usuario
-
Desarrollar herramientas educativas avanzadas
-
Recopilar datos de uso valiosos
Ejemplo Final (Control Profesional):
<div class="video-container"> <video id="proPlayer" src="video.mp4"></video> <div class="controls"> <button class="speed-btn" data-rate="0.75">0.75x</button> <button class="speed-btn active" data-rate="1">1x</button> <button class="speed-btn" data-rate="1.25">1.25x</button> <button class="speed-btn" data-rate="1.5">1.5x</button> </div> </div> <script> const player = document.getElementById('proPlayer'); document.querySelectorAll('.speed-btn').forEach(btn => { btn.addEventListener('click', () => { const rate = parseFloat(btn.dataset.rate); player.playbackRate = rate; document.querySelectorAll('.speed-btn').forEach(b => b.classList.remove('active') ); btn.classList.add('active'); }); }); player.addEventListener('ratechange', () => { const currentRate = player.playbackRate; document.querySelector(`[data-rate="${currentRate}"]`)?.classList.add('active'); }); </script> <style> .speed-btn.active { background: #2ecc71; color: white; } </style>
Con este conocimiento, podrás implementar controles profesionales de velocidad en tus proyectos multimedia. ¡Experimenta y optimiza la experiencia de usuario! ????????