当前位置:首页 > JavaScript

用js实现页面暂停

2026-04-04 19:47:44JavaScript

实现页面暂停的JavaScript方法

使用CSS动画暂停

通过JavaScript控制CSS的animation-play-state属性实现页面动画暂停。

// 暂停所有动画
document.querySelectorAll('*').forEach(element => {
  element.style.animationPlayState = 'paused';
});

// 恢复动画
document.querySelectorAll('*').forEach(element => {
  element.style.animationPlayState = 'running';
});

禁用JavaScript定时器

暂停所有使用setTimeoutsetInterval创建的定时器。

let timerIds = [];

// 暂停所有定时器
function pauseTimers() {
  let id = setInterval(() => {}, 99999);
  while(id--) {
    if (id < 1) break;
    clearInterval(id);
    clearTimeout(id);
    timerIds.push(id);
  }
}

// 恢复定时器需要重新创建

冻结页面交互

通过覆盖全屏遮罩层阻止用户交互。

function freezePage() {
  const overlay = document.createElement('div');
  overlay.style.position = 'fixed';
  overlay.style.top = '0';
  overlay.style.left = '0';
  overlay.style.width = '100%';
  overlay.style.height = '100%';
  overlay.style.backgroundColor = 'rgba(0,0,0,0.5)';
  overlay.style.zIndex = '9999';
  overlay.id = 'freeze-overlay';
  document.body.appendChild(overlay);
}

function unfreezePage() {
  const overlay = document.getElementById('freeze-overlay');
  if (overlay) {
    overlay.remove();
  }
}

禁用滚动

通过控制CSS的overflow属性阻止页面滚动。

function disableScroll() {
  document.body.style.overflow = 'hidden';
}

function enableScroll() {
  document.body.style.overflow = '';
}

综合实现

结合上述方法创建完整的页面暂停功能。

用js实现页面暂停

class PagePauser {
  constructor() {
    this.originalOverflow = '';
    this.originalAnimations = [];
  }

  pause() {
    // 记录原始overflow值
    this.originalOverflow = document.body.style.overflow;

    // 禁用滚动
    document.body.style.overflow = 'hidden';

    // 暂停CSS动画
    document.querySelectorAll('*').forEach(el => {
      const animation = getComputedStyle(el).animation;
      if (animation && animation !== 'none') {
        this.originalAnimations.push({
          element: el,
          style: el.style.animationPlayState
        });
        el.style.animationPlayState = 'paused';
      }
    });

    // 添加遮罩层
    freezePage();
  }

  resume() {
    // 恢复滚动
    document.body.style.overflow = this.originalOverflow;

    // 恢复CSS动画
    this.originalAnimations.forEach(item => {
      item.element.style.animationPlayState = item.style;
    });

    // 移除遮罩层
    unfreezePage();

    // 清空记录
    this.originalAnimations = [];
  }
}

这些方法可以根据具体需求单独使用或组合使用,实现不同程度的页面暂停效果。CSS动画暂停和滚动禁用适用于简单场景,而综合实现则提供了更完整的页面冻结方案。

标签: 页面js
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在 s…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

vue实现页面

vue实现页面

Vue 实现页面的基本方法 安装 Vue.js 依赖 通过 npm 或 yarn 安装 Vue.js: npm install vue # 或 yarn add vue 创建 Vue 实例 在…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…