You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移动端横竖屏切换时隐藏网页内容的实现方案咨询

横竖屏切换淡入淡出过渡实现方案

1. 先添加全屏过渡遮罩

在HTML结构里插入一个全屏遮罩层,用来实现转场效果:

<div id="rotation-overlay"></div>

用CSS定义遮罩的样式和过渡动画:

#rotation-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background: #000;
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.3s ease, visibility 0.3s ease;
  z-index: 9999; /* 确保遮罩在所有内容之上 */
}

#rotation-overlay.active {
  opacity: 1;
  visibility: visible;
}

2. 监听旋转事件并控制遮罩

通过监听屏幕方向变化,配合URL参数标记重载状态,实现完整的过渡流程:

const overlay = document.getElementById('rotation-overlay');
const urlParams = new URLSearchParams(window.location.search);

// 页面重载后,判断是否是旋转触发的重载,执行淡出
if (urlParams.get('rotation-reload') === 'true') {
  overlay.classList.add('active');
  setTimeout(() => {
    overlay.classList.remove('active');
    // 清除URL参数,避免后续刷新重复触发
    urlParams.delete('rotation-reload');
    window.history.replaceState({}, document.title, `${window.location.pathname}${urlParams.toString() ? `?${urlParams}` : ''}`);
  }, 100);
}

// 监听屏幕方向变化,触发遮罩显示和页面重载
let rotationDebounce;
window.addEventListener('orientationchange', () => {
  clearTimeout(rotationDebounce);
  // 立即显示遮罩,覆盖闪烁的无样式内容
  overlay.classList.add('active');
  // 延迟重载,确保遮罩完全显示后再刷新页面
  rotationDebounce = setTimeout(() => {
    window.location.href = `${window.location.pathname}?rotation-reload=true`;
  }, 300);
});

3. 可选优化

  • 调整过渡时长:把CSS里的0.3s改成0.5s可以让过渡更平缓,注意要和JS里的延迟时间匹配。
  • 兼容特殊设备:部分设备的orientationchange触发时机偏早,可以结合resize事件辅助判断,但要注意区分普通窗口缩放和屏幕旋转。

内容的提问来源于stack exchange,提问作者James Elliott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:33:19