当前位置:首页 > 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创建的定时器。

用js实现页面暂停

let timerIds = [];

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

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

冻结页面交互

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

用js实现页面暂停

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 = '';
}

综合实现

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

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
分享给朋友:

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现复制到剪贴板

js实现复制到剪贴板

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

vue实现引导页面

vue实现引导页面

实现引导页面的方法 在Vue中实现引导页面通常需要结合用户交互和页面跳转逻辑,以下是几种常见的实现方式: 使用路由守卫控制访问权限 在router.js中配置全局前置守卫,检查用户是否首次访问:…

实现vue页面回退

实现vue页面回退

使用 Vue Router 的编程式导航 在 Vue 组件中调用 this.$router.go(-1) 可以实现页面回退。该方法通过操作浏览器历史记录栈实现后退功能,类似于点击浏览器的后退按钮。…