精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

再續(xù)那些關(guān)于DOM的常見Hook封裝

開發(fā) 前端
Document.visibilityState (只讀屬性), 返回document的可見性, 即當(dāng)前可見元素的上下文環(huán)境。由此可以知道當(dāng)前文檔 (即為頁面) 是在背后, 或是不可見的隱藏的標(biāo)簽頁,或者 (正在) 預(yù)渲染。

本篇接著針對關(guān)于 DOM 的各個 Hook 封裝進(jìn)行解讀。

useFullscreen

管理 DOM 全屏的 Hook。

該 hook 主要是依賴 screenfull[1] 這個 npm 包進(jìn)行實現(xiàn)的。

選擇它的原因,估計有兩個:

  • 它的兼容性好,兼容各個瀏覽器的全屏 API。
  • 簡單,包體積小。壓縮后只要 1.1 k。

大概介紹幾個它的 API。

  • .request(element, options?)。使一個元素全屏顯示。默認(rèn)元素是<html>
  • .exit()。退出全屏。
  • .toggle(element, options?)。假如目前是全屏,則退出,否則進(jìn)入全屏。
  • .on(event, function)。添加一個監(jiān)聽器,用于當(dāng)瀏覽器切換到全屏或切換出全屏或出現(xiàn)錯誤時。event 支持 'change' 或者 'error'。另外兩種寫法:.onchange(function)? 和.onerror(function)。
  • .isFullscreen。判斷是否是全屏。
  • .isEnabled。判斷當(dāng)前環(huán)境是否支持全屏。

來看該 hook 的封裝:

首先是 onChange 事件中,判斷是否是全屏,從而觸發(fā)進(jìn)入全屏的函數(shù)或者退出全屏的函數(shù)。當(dāng)退出全屏的時候,卸載 ??change?? 事件。

const { onExit, onEnter } = options || {};
// 退出全屏觸發(fā)
const onExitRef = useLatest(onExit);
// 全屏觸發(fā)
const onEnterRef = useLatest(onEnter);
const [state, setState] = useState(false);

const onChange = () => {
if (screenfull.isEnabled) {
const { isFullscreen } = screenfull;
if (isFullscreen) {
onEnterRef.current?.();
} else {
screenfull.off('change', onChange);
onExitRef.current?.();
}
setState(isFullscreen);
}
};

手動進(jìn)入全屏函數(shù),支持傳入 ref 設(shè)置需要全屏的元素。并通過 ??screenfull.request?? 進(jìn)行設(shè)置,并監(jiān)聽 change 事件。

// 進(jìn)入全屏
const enterFullscreen = () => {
const el = getTargetElement(target);
if (!el) {
return;
}

if (screenfull.isEnabled) {
try {
screenfull.request(el);
screenfull.on('change', onChange);
} catch (error) {
console.error(error);
}
}
};

退出全屏方法,調(diào)用 screenfull.exit()。

// 退出全屏
const exitFullscreen = () => {
if (!state) {
return;
}
if (screenfull.isEnabled) {
screenfull.exit();
}
};

最后通過 toggleFullscreen,根據(jù)當(dāng)前狀態(tài),調(diào)用上面兩個方法,達(dá)到切換全屏狀態(tài)的效果。

// 切換模式
const toggleFullscreen = () => {
if (state) {
exitFullscreen();
} else {
enterFullscreen();
}
};

?useHover

監(jiān)聽 DOM 元素是否有鼠標(biāo)懸停。

主要實現(xiàn)原理是監(jiān)聽 mouseenter? 觸發(fā) onEnter 事件,切換狀態(tài)為 true,監(jiān)聽 mouseleave 觸發(fā) onLeave 事件,切換狀態(tài)為 false。代碼簡單,如下:

export default (target: BasicTarget, options?: Options): boolean => {
const { onEnter, onLeave } = options || {};
const [state, { setTrue, setFalse }] = useBoolean(false);
// 通過監(jiān)聽 mouseenter 判斷有鼠標(biāo)懸停
useEventListener(
'mouseenter',
() => {
onEnter?.();
setTrue();
},
{
target,
},
);

// mouseleave 沒有鼠標(biāo)懸停
useEventListener(
'mouseleave',
() => {
onLeave?.();
setFalse();
},
{
target,
},
);

return state;
};

useDocumentVisibility

監(jiān)聽頁面是否可見。

這個 hook 主要使用了 Document.visibilityState 這個 API。先簡單看下這個 API:

Document.visibilityState (只讀屬性), 返回document的可見性, 即當(dāng)前可見元素的上下文環(huán)境。由此可以知道當(dāng)前文檔 (即為頁面) 是在背后, 或是不可見的隱藏的標(biāo)簽頁,或者 (正在) 預(yù)渲染。可用的值如下:

  • 'visible' : 此時頁面內(nèi)容至少是部分可見. 即此頁面在前景標(biāo)簽頁中,并且窗口沒有最小化。
  • 'hidden' : 此時頁面對用戶不可見。即文檔處于背景標(biāo)簽頁或者窗口處于最小化狀態(tài),或者操作系統(tǒng)正處于 '鎖屏狀態(tài)' 。
  • 'prerender' : 頁面此時正在渲染中,因此是不可見的。文檔只能從此狀態(tài)開始,永遠(yuǎn)不能從其他值變?yōu)榇藸顟B(tài)。

典型用法是防止當(dāng)頁面正在渲染時加載資源,或者當(dāng)頁面在背景中或窗口最小化時禁止某些活動。

最后看這個 hook 的實現(xiàn)就很簡單了:

  • 通過 document.visibilityState 判斷是否可見。
  • 通過 visibilitychange 事件,更新結(jié)果。
const getVisibility = () => {
if (!isBrowser) {
return 'visible';
}
// Document.visibilityState (只讀屬性), 返回document的可見性, 即當(dāng)前可見元素的上下文環(huán)境。
return document.visibilityState;
};

function useDocumentVisibility(): VisibilityState {
const [documentVisibility, setDocumentVisibility] = useState(() => getVisibility());

useEventListener(
// 監(jiān)聽該事件
'visibilitychange',
() => {
setDocumentVisibility(getVisibility());
},
{
target: () => document,
},
);
return documentVisibility;
}

參考資料

[1]screenfull: https://www.npmjs.com/package/screenfull


責(zé)任編輯:武曉燕 來源: 前端雜貨鋪
相關(guān)推薦

2022-07-03 23:26:38

DOMHook封裝

2022-07-20 09:06:27

Hook封裝工具庫

2022-04-14 11:50:39

函數(shù)組件hook

2017-07-19 14:26:01

前端JavaScriptDOM

2021-01-25 10:05:27

ReactDOM前端

2012-07-13 00:03:08

WEB前端開發(fā)WEB開發(fā)

2019-12-10 08:00:46

Kata容器Linux

2015-08-13 10:54:46

2022-08-04 10:18:32

棧遷移?寄存器內(nèi)存

2015-09-14 09:28:47

2021-03-18 16:05:20

SSD存儲故障

2009-02-19 10:21:00

路由多WAN口

2022-06-10 08:01:01

ahookshook代碼

2012-05-01 08:06:49

手機

2023-07-06 08:10:57

Vue3參數(shù)請求

2023-12-25 08:25:42

AndroidHook應(yīng)用程序

2017-01-03 19:12:56

數(shù)據(jù)中心冷卻機架

2015-06-16 09:53:48

swift蘋果開源

2023-08-02 10:11:00

DOM曝光封裝

2021-12-29 06:30:12

安全工具網(wǎng)絡(luò)安全CISO
點贊
收藏

51CTO技術(shù)棧公眾號

肥臀熟女一区二区三区| 日韩av片在线免费观看| 春色校园综合激情亚洲| 久久久久久久久久看片| 国产区精品视频| 免费看一级一片| 国产精品欧美日韩一区| 91精品久久久久久久99蜜桃| 免费一级特黄毛片| av免费在线一区二区三区| 国产高清久久久久| 国产精品成人观看视频国产奇米| 69av.com| 日韩av在线播放网址| 亚洲黄色在线看| 亚洲最大成人在线观看| 国产传媒在线观看| 综合激情成人伊人| 欧美在线一区二区三区四区| 国产浮力第一页| 蜜桃av一区二区三区电影| 国模视频一区二区| 国产又粗又硬又长又爽| 精品精品精品| 日韩欧美一级二级三级久久久| 粉嫩虎白女毛片人体| аⅴ资源天堂资源库在线| 国产精品久久三区| 日本不卡在线播放| 婷婷丁香一区二区三区| 国产盗摄视频一区二区三区| 国产精品视频永久免费播放| 日本三级小视频| 欧美日韩一卡| 美女精品视频一区| 国产三级精品三级观看| 欧美在线色图| 一区二区三区www| 欧美日韩色一区| 国产欧美精品日韩精品| 日本视频在线观看免费| 亚洲激情成人| 国内精品久久久久伊人av| 日本中文字幕免费在线观看| 91一区二区三区四区| 国产一区二区三区在线观看视频 | 成人免费性视频| 国产福利视频在线观看| 国产精品不卡在线| 一区二区三区国| 丝袜美腿美女被狂躁在线观看| 久久久久99精品一区| 欧美激情论坛| 九一国产在线| 亚洲国产电影在线观看| 性刺激综合网| 欧美日本高清| 亚洲精品国产一区二区三区四区在线 | 欧美黄网站在线观看| 女人让男人操自己视频在线观看| 午夜精品成人在线| 97av视频在线观看| 香蕉久久免费电影| 精品视频全国免费看| 国产日韩欧美久久| 自拍偷拍欧美日韩| 日韩精品一区二区三区老鸭窝| 在线播放国产视频| 国产色噜噜噜91在线精品| 亚洲成人1234| 成人乱码一区二区三区av| 自拍自偷一区二区三区| 亚洲欧洲日产国产网站| gv天堂gv无码男同在线观看| 日韩国产专区| 久久久国产精品亚洲一区| 91在线播放观看| 精久久久久久| 热久久99这里有精品| 一区二区乱子伦在线播放| 美女看a上一区| av成人综合网| 欧洲亚洲在线| 亚洲少妇最新在线视频| 自拍日韩亚洲一区在线| av亚洲一区二区三区| 337p亚洲精品色噜噜狠狠| 国产清纯白嫩初高中在线观看性色| theporn国产在线精品| 亚洲欧洲日本专区| 国产极品国产极品| 欧美一级网站| 成人信息集中地欧美| 少妇高潮久久久| 国产日韩精品一区二区三区| 欧美另类videosbestsex日本| 嗯~啊~轻一点视频日本在线观看| 在线观看亚洲a| 亚洲欧洲日韩综合| 精品久久一区| 国内精品久久久久影院 日本资源| 国产亚洲欧美在线精品| 国产精品一二三四| 欧美激情国产日韩| 欧美性受ⅹ╳╳╳黑人a性爽| 日本高清成人免费播放| 久久无码人妻一区二区三区| 加勒比久久综合| 久久久久久久久久久久久久久久久久av| 男人天堂视频网| 成人免费看视频| 久久精品国产精品亚洲精品色| 日本在线播放一二三区| 日韩一级片网站| 亚洲一区 欧美| 西西人体一区二区| 国产精品99久久久久久久 | 亚洲国产精品av| 国产一区二区网| 天堂精品久久久久| 少妇高潮 亚洲精品| 国产精品第5页| 不卡一区二区中文字幕| 天天干天天色天天爽| jizz免费一区二区三区| 国产视频精品免费播放| 国产无套在线观看| 国产精品一区专区| 中文字幕中文字幕99| 韩国主播福利视频一区二区三区| 精品乱人伦小说| 裸体武打性艳史| 久久66热偷产精品| 亚洲一区三区| 国产精品蜜月aⅴ在线| 亚洲欧美日韩精品| xxxx.国产| 337p粉嫩大胆噜噜噜噜噜91av| 又大又硬又爽免费视频| 天堂av一区| 欧美精品久久久久久久久久| 国产草草影院ccyycom| 中文字幕亚洲一区二区va在线| 国产天堂在线播放| 欧美精品一二| 国产精品久久久久久搜索 | 欧美激情手机在线视频 | 成人手机电影网| 亚洲精品少妇一区二区| 日韩精品一区二区三区中文在线 | 国产精品香蕉一区二区三区| 国产免费色视频| 国产一区精品二区| 久99九色视频在线观看| 亚洲av无码乱码国产精品久久| 一区二区三区中文免费| 人妻体体内射精一区二区| 午夜久久黄色| 国产日韩亚洲精品| 国产精品迅雷| 在线精品高清中文字幕| 亚洲熟妇无码久久精品| 亚洲男人天堂av| 好吊操视频这里只有精品| 在线成人h网| 秋霞毛片久久久久久久久| 色天使综合视频| 久久国产精品视频| 免费观看a视频| 欧美色xxxx| 战狼4完整免费观看在线播放版| 毛片av一区二区| 黄色成人在线免费观看| 免费观看成人www动漫视频| 茄子视频成人在线| 9色在线观看| 精品美女在线播放| 精品免费囯产一区二区三区| 欧美国产精品一区二区| 亚洲精品久久久久久| 亚洲一区二区伦理| 日本福利视频导航| 精品国产导航| 国产精品香蕉av| 丁香花视频在线观看| 亚洲欧美日韩高清| 99热这里精品| 色婷婷av久久久久久久| 一区二区三区影视| 久久你懂得1024| 国产精品久久久久久久99| 99伊人成综合| 亚洲 欧洲 日韩| 群体交乱之放荡娇妻一区二区| 国产欧美精品va在线观看| 182在线视频观看| 精品国产欧美一区二区五十路| 蜜臀av午夜精品| 欧美色爱综合网| 久久久精品免费看| |精品福利一区二区三区| 熟女人妻在线视频| 国产自产2019最新不卡| 日本在线视频www| 欧美片第1页综合| 亚洲国产精品毛片| 欧美人与动xxxxz0oz| 成人国产精品色哟哟| 亚洲最大网站| 欧美激情小视频| 精品国产99久久久久久| 亚洲人成绝费网站色www| 亚洲精品一区二区三区区别| 欧美日韩美少妇| www毛片com| 午夜精品久久久久久久久| www色aa色aawww| 欧美国产日本韩| 欧美 变态 另类 人妖| 国产成人亚洲综合a∨婷婷图片| 男女无套免费视频网站动漫| 国产精品综合色区在线观看| 国产精品无码免费专区午夜| 97欧美在线视频| 视频在线一区二区三区| 亚洲国产欧美日韩在线观看第一区 | 夜夜嗨aⅴ一区二区三区| 欧美日韩在线视频首页| 国产乡下妇女做爰视频| 亚洲精品日产精品乱码不卡| 天堂资源在线视频| 国产日韩三级在线| 色噜噜日韩精品欧美一区二区| 成人精品视频一区二区三区 | 亚洲天堂777| 欧美视频在线观看一区| 国产伦精品一区二区三区视频网站| 亚洲电影激情视频网站| 玖玖爱免费视频| 一区二区三区免费看视频| 免费看特级毛片| 亚洲欧美日韩中文播放| 手机在线免费看片| 亚洲六月丁香色婷婷综合久久 | 久久久久久久久丰满| 亚洲国产成人不卡| 欧美hentaied在线观看| 亚洲在线不卡| 性欧美欧美巨大69| 蜜桃视频成人在线观看| 中文一区一区三区免费在线观看| 日本丰满大乳奶| 欧美激情亚洲| 国产综合中文字幕| 香蕉久久夜色精品国产| 狠狠爱免费视频| 日韩激情视频在线观看| 2025韩国理伦片在线观看| 黄色日韩网站视频| 久久黄色一级视频| proumb性欧美在线观看| 国产又粗又长又爽| 日本一区二区三区dvd视频在线| 极品蜜桃臀肥臀-x88av| 亚洲欧美一区二区三区久本道91| 清纯粉嫩极品夜夜嗨av| 亚洲成人激情综合网| 国产高清中文字幕| 欧美日韩国产中文| 国产成人精品a视频| 亚洲精品国偷自产在线99热| 你懂的在线免费观看| 日韩中文字幕国产| 羞羞污视频在线观看| 欧美性在线视频| 成人在线免费电影网站| 91中文字幕在线| 日韩高清三区| 亚洲国产欧洲综合997久久 | 99精品视频在线看| 激情图区综合网| 午夜男人的天堂| 国产欧美精品一区二区色综合朱莉 | 成人h动漫精品一区二区无码| 亚洲第一视频网| 最新真实国产在线视频| 欧美黑人视频一区| 丁香六月综合| 97人人模人人爽人人少妇| 丝袜久久网站| 国产一区二区三区播放| 久热re这里精品视频在线6| 一级黄色在线播放| 337p粉嫩大胆噜噜噜噜噜91av| 黄色片子在线观看| 欧美性猛交xxxxx水多| 国产精品无码一区二区桃花视频| 亚洲国内精品在线| 国产区在线观看| 日本一区二区三区在线播放| 精品国产亚洲一区二区在线观看 | 黄色片在线看| 欧美国产日韩精品| 四虎影视成人精品国库在线观看| 精选一区二区三区四区五区| 图片小说视频色综合| 日本wwww视频| 成人小视频免费观看| 波多野结衣家庭教师在线观看 | 在线免费观看高清视频| 亚洲第一二三四五区| 久久77777| 国产精品av免费在线观看| 嗯用力啊快一点好舒服小柔久久| 性高潮久久久久久久久| 久久三级视频| 国产精品成人99一区无码| 一区二区三区中文在线观看| 中文字幕av在线免费观看| 日韩精品一区二区视频| 丁香花电影在线观看完整版| 91天堂在线观看| 93在线视频精品免费观看| 搡女人真爽免费午夜网站| 久久色在线视频| 国产又爽又黄的视频| 精品毛片乱码1区2区3区| 亚洲无线看天堂av| 成人免费大片黄在线播放| 日韩欧美网站| 婷婷六月天在线| 国产日产欧美一区二区视频| 在线能看的av| 亚洲精选一区二区| 欧美巨大丰满猛性社交| 国产亚洲精品久久飘花| 亚洲香蕉网站| 中国特级黄色片| 亚洲一区二区精品视频| 国产18精品乱码免费看| 欧美激情精品久久久久久大尺度 | 国产成人午夜视频| 国产探花在线免费观看| 欧美一级黄色片| 在线观看午夜av| 成人在线看片| 999亚洲国产精| 亚洲成人日韩在线| 色婷婷av一区二区| www.黄在线观看| 成人精品福利视频| 在线精品国产| 91av免费观看| 午夜精品国产更新| 青青青免费视频在线2| 欧美在线一级视频| 国产伦精品一区二区三区千人斩 | 精品欧美一区二区三区免费观看| 日韩电影中文字幕一区| a欧美人片人妖| 亚洲电影一二三区| 国产精品一区在线观看乱码| 青娱乐国产精品| 日韩av有码在线| 亚洲a∨精品一区二区三区导航| 先锋影音日韩| 国产一区二区日韩精品| 久久精品视频日本| 亚洲欧美一区二区精品久久久| 日本在线中文字幕一区二区三区| 伊人久久大香线蕉精品| 国产精品羞羞答答xxdd| 成人毛片18女人毛片| 国产一区二区精品丝袜| 久久国产精品美女| 日本精品免费在线观看| 中文字幕日韩一区| 亚洲精品福利网站| 国产成人精品999| 午夜欧美精品久久久久久久| 污污内射在线观看一区二区少妇| 色婷婷久久99综合精品jk白丝| 日本福利在线| 国产日产精品一区二区三区四区| 天堂va蜜桃一区二区三区 | 日韩欧美在线播放| 免费网站看v片在线a| 国产精品久久精品视| 日韩国产精品久久久久久亚洲| √天堂中文官网8在线| 亚洲美女动态图120秒| 24小时成人在线视频| 俄罗斯av网站| 亚洲欧美日韩在线不卡| 日本a一级在线免费播放| 成人在线视频福利| 久久激情网站| 国产精品日日夜夜| www.欧美免费| 欧美猛男同性videos|