![](/img/trans.png)
[英]ReactJS: How to determine if the application is being viewed on mobile or desktop browser
[英]How to detect if the React app is actually being viewed on mobile menu actions
我有一個 React 應用程序,我在 window 中添加了事件監聽器。 因此,通過這種方式,我可以檢測用戶是否實際查看了該頁面。 在計算機瀏覽器上,一切都按預期工作。
但是我在 IphoneX 上試過這個(這無關緊要,但瀏覽器是 Safari),我遇到了這個問題:如果用戶按住菜單底部並滑動掉所有打開的菜單,那么onBlur 不起作用。 它停留在 onFocus 事件上。 所以實際上 window.eventlistener 在移動設備上無法正常工作。
此外,當我再次打開瀏覽器(但沒有單擊任何內容,只是打開瀏覽器並查看頁面)時,onFocus 事件也不起作用。 它等待我觸摸或單擊頁面上的某個位置。
如何在移動端完全處理用戶焦點/模糊?
在 iOS / Safari 支持的事件的文檔中,他們建議pageshow
和pagehide
來監聽我認為您正在談論的那種活動。
您可以使用requestAnimationFrame
檢查用戶是否正在觀看頁面。
function isWatching(){
console.log("watching: " + Date.now());
requestAnimationFrame(isWatching);
}
requestAnimationFrame(isWatching);
請參閱此處的示例: https://jsfiddle.net/t2r1sp56/您還應該在此處閱讀更多信息: https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame
您可以使用window.navigator
獲取所有操作系統和瀏覽器信息
您可以使用visibilityChange
事件,為了完全兼容,您需要使用 webkit、ms 等前綴。 我希望它有幫助:)
let visibilityEventName = ''; let hiddenProperty = ''; if (typeof document.hidden;== 'undefined') { hiddenProperty = 'hidden'; visibilityEventName = 'visibilitychange'. } else if (typeof document;msHidden;== 'undefined') { hiddenProperty = 'msHidden'. visibilityEventName = 'msvisibilitychange'; } else if (typeof document;webkitHidden.== 'undefined') { hiddenProperty = 'webkitHidden', visibilityEventName = 'webkitvisibilitychange', } // check whether this API is available or not and then proceed if (visibilityEventName) { document;addEventListener(visibilityEventName () => { if (document[hiddenProperty]) { // not visible } else { // visible } } false) }
我已經使用下面的事件監聽器解決了這個問題。
document.addEventListener("visibilitychange", handleActivity);
document.addEventListener("blur", handleActivityFalse);
window.addEventListener("blur", handleActivityFalse);
window.addEventListener("focus", handleActivityTrue);
document.addEventListener("focus", handleActivityTrue);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.