蘑菇视频

蘑菇影视官网横屏切换时倍速从不稳定到很稳:我只做了两步

作者:蘑菇视频后腰酒窝阴影

蘑菇影视官网横屏切换时倍速从不稳定到很稳:我只做了两步

蘑菇影视官网横屏切换时倍速从不稳定到很稳:我只做了两步

在移动端使用蘑菇影视看视频时,很多用户反馈一个常见问题:横屏切换时倍速播放会忽然变回默认速度、卡顿或完全失效。这个问题看起来复杂,但我用两步就把官网上的倍速稳定下来了。下面把实战经验和可直接复制的代码给你,便于立刻落地。

问题核心(一句话概括)

我做的两步 步骤一:保持视频元素不被重建并“记住-恢复”状态 做法要点

示例代码(核心片段) // 假设 video 是页面中的 元素 const video = document.querySelector('video'); let stored = { rate: 1, time: 0 }; let resizeTimer = null;

function saveState() { stored.rate = video.playbackRate || 1; stored.time = video.currentTime || 0; }

function restoreState() { // 在视频可用时尽量恢复速率和时间 const apply = () => { try { video.playbackRate = stored.rate; // 恢复时间只在差距较大的情况下设置,避免跳动体验差 if (Math.abs(video.currentTime - stored.time) > 0.5) { video.currentTime = stored.time; } // 若想确保继续播放 if (video.paused) { video.play().catch(() => {}); } } catch (e) { console.warn('恢复视频状态失败:', e); } };

// 在下一帧和 canplay 事件后都尝试一次,覆盖各种浏览器行为 requestAnimationFrame(apply); video.addEventListener('canplay', function onCan() { apply(); video.removeEventListener('canplay', onCan); }); }

// 监听横竖屏或尺寸变化,去抖处理 window.addEventListener('orientationchange', () => { saveState(); clearTimeout(resizeTimer); resizeTimer = setTimeout(() => { restoreState(); }, 300); // 300ms 去抖,根据需要调整 }); window.addEventListener('resize', () => { saveState(); clearTimeout(resizeTimer); resizeTimer = setTimeout(() => { restoreState(); }, 300); });

说明

步骤二:启用行内播放并避免进入系统原生全屏(针对移动端兼容性) 做法要点

HTML / 属性

CSS(模拟全屏) .video-fullscreen { position: fixed; top: 0; left: 0; width: 100vw; /* 或 100% 根据需求 / height: 100vh; z-index: 9999; object-fit: contain; / 或 cover */ background: black; }

JS:进入/退出“行内全屏” function enterInlineFullscreen() { video.classList.add('video-fullscreen'); // 恢复倍速 video.playbackRate = stored.rate || 1; } function exitInlineFullscreen() { video.classList.remove('video-fullscreen'); }

额外兼容提示

最终效果与验证

总结(一句话)

#蘑菇#影视#官网