# 页面可见性应用

页面可见性 API对于节省资源和提高性能特别有用,它使页面在文档不可见时避免执行不必要的任务。 通过 visibilityState 的值检测页面当前是否可见,以及打开网页的时间等;

# 对应api

  • 属性
    • Document​.hidden (只读属性)返回布尔值,表示页面是(true)否(false)隐藏.
    • Document​.visibility​State 返回document的可见性, 即当前可见元素的上下文环境.
      1. visible
      2. hidden
      3. prerender
      4. unloaded
  • Events
    • visibilitychange 浏览器标签页被隐藏或显示的时候会触发visibilitychange事件.

# 实际应用

# 切换页面自动停止播放

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title></title>
	</head>
	<body>
	<audio src="demo.mp3" controls="controls" id="videoElement">
			Your browser does not support the audio element.
	</audio>
	</body>
</html>
<script type="text/javascript">
	// 设置隐藏属性和改变可见属性的事件的名称
var hidden, visibilityChange; 
if (typeof document.hidden !== "undefined") {
	// Opera 12.10 and Firefox 18 and later support 
  hidden = "hidden";
  visibilityChange = "visibilitychange";
} else if (typeof document.msHidden !== "undefined") {
  hidden = "msHidden";
  visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
  hidden = "webkitHidden";
  visibilityChange = "webkitvisibilitychange";
}
 
var videoElement = document.getElementById("videoElement");

// 如果页面是隐藏状态,则暂停视频
// 如果页面是展示状态,则播放视频 
function handleVisibilityChange() {
  if (document[hidden]) {
    videoElement.pause();
  } else {
    videoElement.play();
  }
}

// 如果浏览器不支持addEventListener 或 Page Visibility API 给出警告
if (typeof document.addEventListener === "undefined" || 
	typeof document[hidden] === "undefined") {
  console.log("This demo requires a browser, such as Google Chrome or Firefox,
   that supports the Page Visibility API.");
} else {
  // 处理页面可见属性的改变
  document.addEventListener(visibilityChange, handleVisibilityChange, false);
    
  // 当视频暂停,设置title
  // This shows the paused
  videoElement.addEventListener("pause", function(){
    document.title = 'Paused';
  }, false);
    
  // 当视频播放,设置title
  videoElement.addEventListener("play", function(){
    document.title = 'Playing'; 
  }, false);

}
</script>
最后更新: 6/3/2019, 8:38:03 AM