当前位置:首页 > JavaScript

js实现定时删除

2026-03-16 08:30:33JavaScript

js实现定时删除

js实现定时删除

使用 setTimeout 实现单次延迟删除

function deleteAfterDelay(elementId, delayMs) {
  setTimeout(() => {
    const element = document.getElementById(elementId);
    if (element) {
      element.remove();
    }
  }, delayMs);
}

调用方式:deleteAfterDelay('myElement', 5000) 将在5秒后删除ID为myElement的元素

使用 setInterval 实现定期清理

let cleanupInterval;

function startPeriodicCleanup(intervalMs) {
  cleanupInterval = setInterval(() => {
    const expiredElements = document.querySelectorAll('.expired');
    expiredElements.forEach(el => el.remove());
  }, intervalMs);
}

function stopPeriodicCleanup() {
  clearInterval(cleanupInterval);
}

基于时间戳的条件删除

function deleteExpiredElements() {
  const now = Date.now();
  document.querySelectorAll('[data-expiry]').forEach(el => {
    const expiryTime = parseInt(el.dataset.expiry);
    if (now >= expiryTime) {
      el.remove();
    }
  });
}

// 设置元素示例
// <div data-expiry="1735689600000">...</div>

结合 localStorage 的持久化定时删除

function scheduleDeletion(key, expiryMs) {
  const expiryTime = Date.now() + expiryMs;
  localStorage.setItem(`delete_${key}`, expiryTime.toString());

  window.addEventListener('load', checkExpiredItems);
}

function checkExpiredItems() {
  const now = Date.now();
  Object.keys(localStorage).forEach(key => {
    if (key.startsWith('delete_')) {
      const expiryTime = parseInt(localStorage.getItem(key));
      if (now >= expiryTime) {
        localStorage.removeItem(key);
        const elementKey = key.replace('delete_', '');
        document.getElementById(elementKey)?.remove();
      }
    }
  });
}

使用 requestAnimationFrame 实现动画结束删除

function deleteAfterAnimation(element, animationDuration) {
  element.style.animation = `fadeOut ${animationDuration}ms`;

  const onAnimationEnd = () => {
    element.remove();
    element.removeEventListener('animationend', onAnimationEnd);
  };

  element.addEventListener('animationend', onAnimationEnd);
}

使用 MutationObserver 监听变化后删除

function deleteWhenEmpty(element) {
  const observer = new MutationObserver(mutations => {
    if (element.children.length === 0) {
      element.remove();
      observer.disconnect();
    }
  });

  observer.observe(element, { childList: true });
}

使用 WeakRef 和 FinalizationRegistry 实现内存敏感删除

const registry = new FinalizationRegistry(id => {
  document.getElementById(id)?.remove();
});

function registerForAutoDeletion(elementId) {
  const element = document.getElementById(elementId);
  if (element) {
    registry.register(element, elementId);
  }
}

注意:FinalizationRegistry 的清理时机由垃圾回收决定,不适合精确时间控制

标签: js
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…