如何解決setInterval 與頁面切換問題
setInterval 與頁面切換問題
今天遇到的問題是我用好幾個setInterval定時器來做模擬系統的動態表示,當開啟頁面時,程式能夠正常執行,效果正常,但是當我切換到其他頁面,過段時間再切回到系統的頁面時,動畫出現了錯亂,不是按原來安排的執行。查了資料後,發現這是因為瀏覽器本著節省記憶體的性質,當切換到其他頁面時,採油系統頁面的定時器不運動,但是動畫依然排列,當切換回來的時候,動畫加速運動,出現錯誤,在輪播圖之類的頁面經常會發生這樣的情況。
解決方案
我查了一部分資料,網上一般都是說如何在關閉頁面的時候呼叫函式,比如用onbeforeunload和Onunload,但是我主要是在切換的時候出的問題,查了一上午,終於找到了監聽頁面切換的函式:如下所示:
var hiddenProperty = 'hidden' in document ? 'hidden' :
'webkitHidden' in document ? 'webkitHidden' :
'mozHidden' in document ? 'mozHidden' :
null;
var visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange');
var onVisibilityChange = function(){
if (!document[hiddenProperty]) {
console.log('頁面非啟用');
}else{
console.log('頁面啟用')
}
}
document.addEventListener(visibilityChangeEvent, onVisibilityChange);
當切換到其他頁面時,控制檯輸出頁面啟用,切回來的時候,顯示頁面未啟用,為了明確一點,我把上面程式碼改成
var onVisibilityChange = function(){
if (!document[hiddenProperty]) {
console.log('切回');
}else{
console.log('切走')
}
}
這裡我在’切走’部分,寫入clearInterval(),發現沒有作用,在一會切換回來的時候依然會出現錯亂。很難受。
今天到這裡之後繼續查詢,測試,找到一篇部落格上寫到是兩種方法:
方案1: 如果您使用的是jQuery,在jq版本里每次在animate前加上 $(obj).stop(true,true); 可以解決(可是我用的不是jQuery,)
setInterval(function(){
$(".notice").show();
$(".notice ul").stop(true,true).animate({"top":"-20px"},function(){
var node = $(".notice ul li:eq(0)").remove();
$(".notice ul").append(node);
$(".notice ul").css("top","0");
});
},3500);
方案2:通過瀏覽器的焦點去執行該js(這個我測試過,在切換的時候並不能呼叫,很傷心)
var timer=null;
window .onfocus=function(){
timer=setInterval(autoRun,1000);
}
window.onblur=function(){
clearInterval(timer);
}
於是在這裡我想用最上面寫的函式來代替onfocus 和 onblur ,如下所示:
var hiddenProperty = 'hidden' in document ? 'hidden' :
'webkitHidden' in document ? 'webkitHidden' :
'mozHidden' in document ? 'mozHidden' :
null;
var visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange');
var onVisibilityChange = function(){
if (!document[hiddenProperty]) {
console.log('頁面非啟用');
var timer=null;
timer=setInterval(autoRun,1000);
}else{
console.log('頁面啟用');
clearInterval(timer);
}
}
document.addEventListener(visibilityChangeEvent, onVisibilityChange);
但是結果還是不對,顯示autoRun is not defined
,之前沒有這個問題,估計是前面切換的時候並沒有呼叫。
這篇文章雖然沒有解決我的問題,但是希望能解決其他人的問題,同時也希望有大佬來告訴這個問題怎麼辦?
相關文章
- 完美解決setInterval在瀏覽器切換時加速的問題瀏覽器
- 關於微信 H5 頁面切換 webview 的問題H5WebView
- 如何解決自動化切換資料庫的問題資料庫
- 如何解決快應用頁面滑動卡頓問題
- Appium 關於微信 H5 頁面切換 webview 的問題APPH5WebView
- mui 子頁面切換父頁面底部導航UI
- [提問交流]切換頁面,左側選單消失
- 切換頁面主題樣式研究及less教程
- WPF手動實現切換頁面
- 如何解決網頁無響應問題網頁
- 頁面無重新整理切換實現
- iOS實現超酷頁面切換動畫特效iOS動畫特效
- 微信小程式頁面功能-----標籤切換微信小程式
- DNS解析(網路切換的問題解決)DNS
- 解決切換Fragment的黑色閃屏問題Fragment
- iPhone手機卡在載入頁面怎麼辦?如何解決iPhone卡頓問題iPhone
- 【解決方法】正常遊覽Flash頁面,解決主流遊覽器的不支援問題(如Edge,Firefox)Firefox
- 如解決jquery與原生js衝突的問題jQueryJS
- Silence 主題暗黑模式根據瀏覽器配置,以及切換頁面閃白屏的問題處理模式瀏覽器
- CSS自定義屬性與前端頁面的主題切換CSS前端
- 解決webpack-dev-server代理常切換問題WebdevServer
- iOS 封裝頁數控制,點選NavigationTabBar切換頁面iOS封裝NavigationtabBar
- 實戰!聊聊如何解決MySQL深分頁問題MySql
- CSS實現頁面切換時的滑動效果CSS
- flutter實戰6:TAB頁面切換免重繪Flutter
- Android使用Fragment打造萬能頁面切換框架AndroidFragment框架
- 實現模式--技能與如何解決問題模式
- Android 解決Activity切換時出現白屏問題Android
- Android解決Activity切換時出現白屏問題Android
- 【問題&解決】手機網頁Html程式碼實現(解決顯示頁面很小的問題)網頁HTML
- Mac 下切換 PHP 版本問題MacPHP
- H5單頁面手勢滑屏切換原理H5
- 快速構建H5單頁面切換應用H5
- AI換臉——汝怎飾品如面AI
- IP頁面訪問域名介面問題
- 解決django中超連結頁面不跳轉的問題Django
- 解決WordPress頁面錯位問題的實用技巧
- js頁面跳轉的問題(跳轉到父頁面、最外層頁面、本頁面)JS