LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

【WEB开发】前端如何判断用户是否离开了当前页面?

admin
2025年7月3日 8:5 本文热度 95

有几种方法可以检测用户是否离开了当前页面:

1. visibilitychange 事件

document.addEventListener('visibilitychange'function() {  if (document.visibilityState === 'hidden') {    console.log('用户离开了页面');  } else {    console.log('用户回到了页面');  }});
优点:标准、可靠:W3C 标准,所有现代浏览器都支持。

性能友好:专门为此设计,能有效节省 CPU 和电池资源。

逻辑清晰:直接反映页面的“可见”状态。

缺点:它无法判断用户是否正在关闭页面。当用户关闭标签页时,visibilitychange 事件可能会触发(变为 hidden),但我们无法区分这是切换还是关闭。

2pagehide  事件  

 window.addEventListener('pagehide'function() {  console.log('用户正在离开页面');  if (e.persisted) {    console.log('页面正在进入 bfcache');  } else {    console.log('页面正在被正常卸载');  }  });

pagehide 比 unload 更可靠,特别是在移动设备上。

3unload 事件

window.addEventListener('beforeunload'function(e) {  // 可以在这里显示确认对话框  e.preventDefault();  e.returnValue = '';  console.log('用户尝试离开页面');});

重大缺陷:

unload 事件非常不可靠。浏览器在处理页面卸载时,并不会等待 unload 事件处理器中的异步操作(如 fetch 或 XMLHttpRequest)完成。这个请求很可能在发送完成之前就被浏览器终止了。

4. beforeunload 事件

window.addEventListener('beforeunload'function(e) {  // 可以在这里显示确认对话框  e.preventDefault();  e.returnValue = '';  console.log('用户尝试离开页面');  e.returnValue ='您有未保存的更改,确定要离开吗?‘;});

5. 监听鼠标离开窗口

document.addEventListener('mouseout'function(e) {  if (!e.relatedTarget && e.clientY <= 0) {    console.log('鼠标离开了窗口');  }});

注意事项

  • beforeunload 和 unload 事件在某些移动浏览器中可能不可靠

  • 现代浏览器限制了这些事件的使用,以防止滥用(如强制用户留在页面上)

  • 对于单页应用(SPA),路由变化不会触发这些事件,需要使用路由守卫


选择哪种方法取决于你的具体需求,visibilitychange 通常是推荐的方法,因为它能准确反映页面是否对用户可见。


阅读原文:原文链接


该文章在 2025/7/3 14:24:08 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved