Closed xccjk closed 2 years ago
需要兼容老版本浏览器慎用
// app.js import React from 'react' import useVisibility from './visibilityChange' export default function App() { const videoElement = document.getElementById('video') // 直接调用即可 useVisibility(videoElement) return ( <div className='App'> <h1>visibilityChange api在react的使用</h1> <video autoplay loop id='video' src={ 'https://s3-ap-northeast-1.amazonaws.com/daniemon/demos/The%2BVillage-Mobile.mp4' } controls='controls' width={500} height={300} /> </div> ); }
// visibilityChange.js /** * 处理切换页面后视频暂停播放 * @param {视频的ele} videoElement */ function useVisibility(videoElement) { 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' } const handleVisibilityChange = () => { if (document[hidden]) { videoElement && videoElement.pause() } else { videoElement && videoElement.play() } } if (typeof window.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 { // 处理页面可见属性的改变 window.document.addEventListener(visibilityChange, handleVisibilityChange, false) // 当视频暂停,设置title // This shows the paused window.document.addEventListener('pause', function () { window.document.title = 'pause' }, false) // 当视频播放,设置title window.document.addEventListener('play', function () { window.document.title = 'play' }, false) } } export default useVisibility
visibilityChange api的使用场景
场景
visibilityChange api 文档
需要兼容老版本浏览器慎用
demo
其他可预测的使用场景