JavaScript监听页面可见性(焦点)同时改变title的三种方法


本文参考了https://developer.mozilla.org/zh-CN/docs/Web/API/Page_Visibility_API

  • onfocus onblur

    1. window.onfocus = function() {
    2. console.log("onfocus");
    3. document.title="在这";
    4. };
    5. window.onblur=function(){
    6. console.log("onblur");
    7. document.title="离开了";
    8. }

    通过改变标签页 title 可清楚看到变化

    下面是html5提供的方法


  • visibilitychange 事件

    浏览器标签页被隐藏或显示的时候会触发visibilitychange事件。经测试(Chorme),浏览器最小化也会触发该事件。

    可以用addEventListener()向document添加监听事件,也可以直接写成document.onvisibilitychange = function() {......}

  1. document.hidden

    1. 如果页面处于被认为是对用户隐藏状态时返回true,否则返回false
    2. 使用addEventListenerdocument添加监听事件,falseaddEventListener默认的一个参数,可以不写
    1. function handleVisibilityChange() {
    2. if (document.hidden) {
    3. document.title="离开了";
    4. } else {
    5. document.title="在这";
    6. }
    7. }
    8. document.addEventListener("visibilitychange", handleVisibilityChange, false);
  2. document.visibilityState

    1. 是一个用来展示文档可见性状态的字符串。可能的值:
    2. visible : 页面内容至少是部分可见。 在实际中,这意味着页面是非最小化窗口的前景选项卡。
    3. hidden : 页面内容对用户不可见。 在实际中,这意味着文档可以是一个后台标签,或是最小化窗口的一部分,或是在操作系统锁屏激活的状态下。
    4. prerender : 页面内容正在被预渲染且对用户是不可见的(被document.hidden当做隐藏). 文档可能初始状态为prerender,但绝不会从其它值转为该值。
    1. function handleVisibilityChange(){
    2. if(document.visibilityState=="hidden"){
    3. document.title="离开了";
    4. }
    5. if(document.visibilityState=="visible"){
    6. document.title="在这";
    7. }
    8. }
    9. document.addEventListener("visibilitychange", handleVisibilityChange, false);

  • 下面是MDN的demo,离开界面,视频暂停

    含有兼容代码,值得一看

    1. // 设置隐藏属性和改变可见属性的事件的名称
    2. var hidden, visibilityChange;
    3. if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and later support
    4. hidden = "hidden";
    5. visibilityChange = "visibilitychange";
    6. } else if (typeof document.msHidden !== "undefined") {
    7. hidden = "msHidden";
    8. visibilityChange = "msvisibilitychange";
    9. } else if (typeof document.webkitHidden !== "undefined") {
    10. hidden = "webkitHidden";
    11. visibilityChange = "webkitvisibilitychange";
    12. }
    13. var videoElement = document.getElementById("videoElement");
    14. // 如果页面是隐藏状态,则暂停视频
    15. // 如果页面是展示状态,则播放视频
    16. function handleVisibilityChange() {
    17. if (document[hidden]) {
    18. videoElement.pause();
    19. } else {
    20. videoElement.play();
    21. }
    22. }
    23. // 如果浏览器不支持addEventListener 或 Page Visibility API 给出警告
    24. if (typeof document.addEventListener === "undefined" || typeof document[hidden] === "undefined") {
    25. console.log("This demo requires a browser, such as Google Chrome or Firefox, that supports the Page Visibility API.");
    26. } else {
    27. // 处理页面可见属性的改变
    28. document.addEventListener(visibilityChange, handleVisibilityChange, false);
    29. // 当视频暂停,设置title
    30. // This shows the paused
    31. videoElement.addEventListener("pause", function () {
    32. document.title = 'Paused';
    33. }, false);
    34. // 当视频播放,设置title
    35. videoElement.addEventListener("play", function () {
    36. document.title = 'Playing';
    37. }, false);
    38. }

JavaScript监听页面可见性(焦点)同时改变title的三种方法的更多相关文章

  1. 浏览器,tab页显示隐藏的事件监听--页面可见性

    //监听浏览器tab切换,以便在tab切换之后,页面隐藏的时候,把弹幕停止 document.addEventListener('webkitvisibilitychange', function() ...

  2. C#在Winform中改变Textbox高度三种方法

    最近在做C# Winform项目,需要有一个能动态调整大小的Textbox,并且要是单行的.试了几次,单行模式的Textbox不能直接改高度.于是搜索了一下,整理出几个改变高度的方法. 1.将Text ...

  3. 页面加载即执行JQuery的三种方法

    [1]$(function( ){ }): $(function(){ $("#name").click(function(){ //adding your code here } ...

  4. 打印web页面指定区域的三种方法

    本文和大家分享一下web页面实现指定区域打印功能的三种方法,一起来看下吧. 第一种方法:使用CSS 定义一 个.noprint的class,将不打印的内容放入这个class内. 代码如下: <s ...

  5. react 监听页面滚动

    html: // 如果使用typescript, 定义dom类型 private dom: HTMLDivElement | null // ReactJS中,对Div监听只需要绑定 onScroll ...

  6. JavaScript监听手机物理返回键的两种解决方法

    JavaScript没有监听物理返回键的API,所以只能使用 popstate 事件监听. 有两个解决办法: 1.返回到指定的页面 pushHistory(); window.addEventList ...

  7. webview缓存及跳转时截取url地址、监听页面变化

    缓存及一些设定 我在做一些项目时,h5做的项目手机浏览器能使用,但是在搬到webview时候不能用,这个时候通过查阅资料,原来是webview没有设定好,包括缓存.缓存大小及路径等等 mWebview ...

  8. angular2监听页面大小变化

    一.现象 全屏页面中的图表,在很多的时候需要 resize 一把,以适应页面的大小变化 二.解决 1.引入 : import { Observable } from 'rxjs'; 2.使用(在ngO ...

  9. js监听页面放大缩小

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>d ...

随机推荐

  1. openresty使用redis作本地缓存

    一,为什么要使用redis作本地缓存? 1,使用缓存通常会有三层 当使用openresty作为web服务器时,我们更看重是的它可以通过lua编程的扩展能力,就openresty而言,它可以实现的功能非 ...

  2. 五分钟详解MySQL并发控制及事务原理

    在如今互联网业务中使用范围最广的数据库无疑还是关系型数据库MySQL,之所以用"还是"这个词,是因为最近几年国内数据库领域也取得了一些长足进步,例如以TIDB.OceanBase等 ...

  3. [Vue音乐项目] 第一节 环境搭建

    1.Node安装 登录官网,下载最新版本并安装: 在我的电脑内,执行以下操作:右键->属性->高级->环境变量->系统变量->path 查看是否有node的安装路径,没有 ...

  4. 1.1:JAVA基础

    JAVA基础面试部分(多线程.算法.网络编程提出去了,详细分类见<面经>) 一.Java底层基础题 JDK和JRE区别? 1.JDK是整个JAVA的核心,包括了Java运行环境JRE,一堆 ...

  5. Spring Boot学习笔记(一)——Eclipse安装STS插件

    一.简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式进行配置,从而使开发人员不再需要定义样板化的配 ...

  6. 基于gin的golang web开发:模型绑定

    在前两篇文章介绍路由的时候,我们了解到gin可用通过类似DefaultQuery或DefaultPostForm等方法获取到前端提交过来的参数.参数不多的情况下也很好用,但是想想看,如果接口有很多个参 ...

  7. SpringBoot+HikariCP+Dropwizard-Metrics统计连接池使用情况

    SpringBoot+HikariCP+Dropwizard-Metrics统计连接池使用情况 背景,HikariCP是Java目前使用最广的连接池工具类,SpringBoot默认也是用这个,现在想获 ...

  8. 利用transformer进行中文文本分类(数据集是复旦中文语料)

    利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) 利用RNN进行中文文本分类(数据集是复旦中文语料) 利用CNN进行中文文本分类(数据集是复旦中文语料) 和之前介绍的不同,重 ...

  9. 免费申请HTTPS通配符证书

    前言 在阿里云买了一个域名giantliu.cn 部署了自己的博客系统 https://www.giantliu.cn/ 所有用https证书是Let's Encrypt免费申请的 因为申请的免费证书 ...

  10. Scipy 学习第3篇:数字向量的距离计算

    计算两个数字向量u和v之间的距离函数 1,欧氏距离(Euclidean distance) 在数学中,欧几里得距离或欧几里得度量是欧几里得空间中两点间"普通"(即直线)距离.使用这 ...