亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢測變量何時在javascript中發生更改

檢測變量何時在javascript中發生更改

慕斯709654 2021-04-23 17:15:21
我有一個chrome應用程序,我想在分辨率更改時正確調整大小(與屏幕寬度成比例的尺寸)。我編寫了一個函數,可以使用正確的尺寸重新繪制應用程序,現在我只想在需要時執行它。分辨率的更改會導致screen.width發生更改,但是(由于它們與不同的事物有關,所以可能就不足為奇了),不會觸發“調整大小”事件,據我所知,沒有觸發任何事件。我知道Proxy物件(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy),因此我編寫了一些代碼來檢測何時設置了變量并執行了回調,這似乎可行,但在分辨率更改的情況下不起作用。因此,我在線搜索并嘗試使用此方法https://gist.github.com/eligrey/384583(本質上,這是在類似主題的幾個stackoverflow問題中提供的答案,實際上是我最初產生的結果,盡管缺乏抽象的含義代理對象提供)。這似乎也可行(從某種意義上來說,如果我說在完成screen.watch(“ width”,()=> console.log(“ hello”))之后手動設置screen.width);然后再執行screen.width = 100 ;我的回調已執行)。但不是在分辨率更改的情況下(實際上,也許最重要的是,分配此觀察者似乎阻止了screen.width的分配)。我有三個問題1)當我分配一個混亂的觀察者/代理時發生了什么。2)我如何才能知道瀏覽器在此詳細級別上的工作(是什么發送觸發來更改screen.width?我猜是操作系統,這是什么樣的)3)有沒有更好的方法來實現我最初想要的功能(調整chrome應用程序的大?。?。通常,我對問題1)感興趣,并且不再關心3)。要復制我的問題,在Firefox或Chrome中打開新標簽頁轉到開發者控制臺。檢查screen.width,更改分辨率,觀察screen.width變化從https://gist.github.com/eligrey/384583復制并粘貼代碼做screen.watch(“ width”,(id,oldval,newval)=> {console.log(“ hello”); return newval;});做screen.width = 100; 并觀察到您好已記錄并且screen.width設置為100更改分辨率,觀察未設置screen.width。編輯-正如Bertrand回答后所揭示的那樣,調整大小事件實際上可能會在分辨率更改時觸發,但這似乎是對分辨率更改的響應,如果窗口較小,則強制窗口邊界變小,然后screen.width可以更改而無需觸發調整大小事件。
查看完整描述

2 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

根據Mozilla的說法,屏幕調整大小事件僅在window對象上觸發。因此,您應該將監聽器添加到window而不是screen

window.addEventListener('resize', yourfunc)

經過Windows 10的測試,它在Chrome上的魅力十足。值得一提的是,瀏覽器計算出的實際屏幕尺寸使用的是屏幕分辨率縮放比例。

例如,如果您使用的是1920x1080,請縮放100%:

  • 傳遞到3840x2160時,縮放200%將輸出1920x1080的瀏覽器窗口,并且resize似乎未觸發

  • 傳遞到150%縮放將輸出1280x720的瀏覽器窗口resize并被觸發

盡管如此,還是有一個陷阱。僅當屏幕分辨率更新實際觸發瀏覽器窗口大小調整時,才會檢測到屏幕分辨率更新??紤]到瀏覽器窗口的窗口化/全屏初始狀態以及屏幕尺寸的變大/變大,這并不是很明顯。


查看完整回答
反對 回復 2021-04-29
  • 2 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號