精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

水莓100国产免费av在线播放| 日本在线免费观看| 日本少妇精品亚洲第一区| 一区二区三区在线观看视频| 久久久婷婷一区二区三区不卡| 特级西西444www高清大视频| 欧美激情麻豆| 亚洲图片欧美午夜| 精产国品一区二区三区| 亚洲成人不卡| 亚洲午夜在线电影| 亚洲春色在线视频| 色综合视频在线| 国产综合一区二区| 日韩av免费在线播放| 青娱乐国产在线| 欧洲毛片在线视频免费观看| 精品成人在线观看| 17c国产在线| 杨幂一区二区国产精品| 免费人成黄页在线观看忧物| 国产成人av影院| 国产免费一区二区三区在线观看| 日韩大片免费在线观看| 91精品观看| 这里只有精品丝袜| www.超碰97| 午夜电影一区| 这里只有精品视频在线观看| 国产性生交xxxxx免费| 波多野结衣乳巨码无在线观看| 国产精品激情偷乱一区二区∴| 久久天堂国产精品| 韩国中文字幕hd久久精品| 韩国视频一区二区| 国产精品日韩av| 无码人妻丰满熟妇精品 | 菠萝蜜视频在线观看入口| 超碰国产在线观看| 国产亚洲精品超碰| 欧美一区二区视频17c| 午夜小视频在线播放| 成人三级在线视频| 高清不卡日本v二区在线| 国产人妖一区二区| 国产综合一区二区| 91夜夜未满十八勿入爽爽影院| 中文字幕在线日亚洲9| 日韩中文字幕不卡| 国产成人亚洲综合91| 中文字幕av影院| 久久久水蜜桃av免费网站| 777精品视频| 亚洲欧美精品一区二区三区| 在线综合亚洲| 国产97在线|亚洲| 欧美 日韩 精品| 久久久久在线| 国产区精品在线观看| 91精品国产乱码久久| 极品美女销魂一区二区三区| 91精品中国老女人| 性中国xxx极品hd| 成人小视频在线观看| 翡翠波斯猫1977年美国| 天堂av电影在线观看| 久久亚洲综合色一区二区三区| 欧美日韩大片一区二区三区| 青青免费在线视频| 亚洲国产激情av| 中文字幕乱码一区二区三区| 超鹏97在线| 亚洲图片有声小说| 国产精品久久中文字幕| 欧美电影免费看| 欧美在线看片a免费观看| 天天干天天爽天天射| 国产精品xnxxcom| 精品999在线播放| 一级片手机在线观看| 欧美电影一区| 欧美国产视频日韩| 黄色网址中文字幕| 国产美女精品人人做人人爽| 国产视频精品网| 番号集在线观看| 一区二区三区鲁丝不卡| 久久久久久久久久久免费视频| jvid一区二区三区| 日韩欧美综合一区| 一卡二卡三卡四卡| 一级毛片免费高清中文字幕久久网| 久久久亚洲天堂| 一区精品在线观看| www.日本不卡| 亚洲精品久久区二区三区蜜桃臀 | 亚洲一区日韩精品中文字幕| 日韩在线xxx| 欧美日韩黄色| 亚洲最新av在线网站| 免费人成视频在线| 久久婷婷影院| 好看的日韩精品| 久久77777| 色综合天天狠狠| 亚洲区 欧美区| 日本大胆欧美| 欧美洲成人男女午夜视频| 国产精品久久777777换脸| 91丝袜美腿高跟国产极品老师| 影音先锋亚洲视频| 欧美黄色网页| 亚洲国产精品系列| 萌白酱视频在线| 视频一区视频二区中文| 国产精品乱子乱xxxx| 欧美性天天影视| 一本到不卡精品视频在线观看| 国产精品一区二区在线免费观看| 欧美hentaied在线观看| 欧美一区三区三区高中清蜜桃| www.色视频| 亚洲欧美日韩国产另类专区| 亚洲天堂网一区| 宅男在线一区| 欧美在线观看网址综合| 好吊色一区二区三区| 一区二区三区日韩| 日本网站在线看| 久久国产精品亚洲人一区二区三区 | 日韩中文字幕不卡| 久久综合一区二区三区| 超碰97国产精品人人cao| 91麻豆精品国产91久久久资源速度 | 亚洲精选视频在线| 一本一道久久a久久综合蜜桃| 欧美另类69xxxxx| 国产成一区二区| 欧美色视频免费| 色天天综合色天天久久| 国产麻豆天美果冻无码视频| 亚洲精品乱码| 国内精品国语自产拍在线观看| 久久五月精品中文字幕| 精品国产乱码久久久久久影片| 538精品在线视频| 国产一区91精品张津瑜| 老司机午夜网站| 一区二区三区欧洲区| 欧美精品videos| 欧美一区二区三区成人片在线| 亚洲午夜视频在线| 稀缺呦国内精品呦| 亚洲免费影视| 日韩福利影院| 六九午夜精品视频| 久久这里只有精品视频首页| 国产精品50p| 亚洲专区在线播放| 中文字幕一区二区三区在线不卡 | 福利视频一区二区三区四区| 精品国产午夜肉伦伦影院| 69久久夜色精品国产7777| 能在线看的av| 欧美精品亚洲一区二区在线播放| 欧美第一页在线观看| 成人免费视频app| 黄色动漫网站入口| 成人看的视频| 91麻豆精品秘密入口| 97在线视频免费观看完整版| 亚洲欧洲免费视频| 一级黄色片在线| 亚洲综合一区二区| v8888av| 日本在线不卡视频一二三区| 中文字幕日韩一区二区三区| 国产精品乱码一区二区| 99热国内精品| 成人免费在线看片| 一区二区三区短视频| 日韩在线播放视频| 日本激情视频网站| 欧美在线观看视频一区二区| 国内偷拍精品视频| 久久久99久久精品欧美| 国产探花在线观看视频| 亚洲欧美清纯在线制服| 一区二区三区av| 日韩理论电影中文字幕| 国产精品夜间视频香蕉| 97蜜桃久久| 俺去亚洲欧洲欧美日韩| 头脑特工队2免费完整版在线观看| 欧美色网一区二区| 国产乡下妇女做爰视频| 国产精品色婷婷| 亚洲欧美在线不卡| 国产一区在线视频| 最近免费中文字幕中文高清百度| 亚欧美无遮挡hd高清在线视频| 久久综合九色99| 欧美高清hd| 国产精品亚洲片夜色在线| 成人免费观看在线观看| 久久国产精品视频| 成年网站在线| 日韩国产中文字幕| 亚洲AV无码乱码国产精品牛牛 | 国产精品丝袜久久久久久app| www.四虎精品| 狠狠久久亚洲欧美| 91淫黄看大片| 先锋影音国产一区| 激情六月天婷婷| 久久要要av| 日本视频一区二区不卡| 欧美18免费视频| 91一区二区三区| avtt久久| 国产精自产拍久久久久久| 国产免费不卡| 97久久久免费福利网址| 好看的中文字幕在线播放| 久久精品国产欧美激情| 成年网站在线| 一区二区亚洲欧洲国产日韩| 美丽的姑娘在线观看免费动漫| 日韩免费看网站| 国产精品久久久久精| 欧美日韩精品一区二区三区蜜桃| 免费视频网站在线观看入口| 大伊人狠狠躁夜夜躁av一区 | 在线精品观看国产| 国产婷婷色一区二区在线观看| 亚洲成av人片在线观看无码| 久久久久免费看| 亚洲一区二区3| 久久久国产精华液| 亚洲综合色成人| 久久久久亚洲天堂| 亚洲图片一区二区| www.天天色| 天天操天天干天天综合网| 日本三级片在线观看| 午夜精品久久久久久久久久 | 蜜桃视频在线观看成人| 亚洲精品小区久久久久久| 老牛影视免费一区二区| 亚洲va久久久噜噜噜久久| 欧美国产综合视频| 精品国产91乱码一区二区三区四区| 日本一区二区三区在线视频 | 欧美精品第一页在线播放| 超级碰碰不卡在线视频| 国产91|九色| a∨色狠狠一区二区三区| 国产有码在线一区二区视频| 99久久久成人国产精品| 99九九视频| 日韩影视在线观看| 神马欧美一区二区| 天天做天天爱天天综合网2021| 欧美爱爱视频网站| 欧美成人片在线观看| av网站免费线看精品| 黄色aaa视频| 一区在线播放视频| 久久久久成人网站| 日韩欧美在线视频观看| 又骚又黄的视频| 日韩免费看网站| 九色网友自拍视频手机在线| 中文字幕国内精品| 羞羞视频在线免费国产| 情事1991在线| 电影一区中文字幕| 激情欧美一区二区三区中文字幕| 欧美精品一二| 日韩a级黄色片| 久久久久免费| 日韩不卡的av| 91麻豆国产在线观看| avhd101老司机| 亚洲福利视频一区二区| 超碰在线免费97| 精品国产乱码久久久久久蜜臀| 国产色a在线| 欧美精品福利在线| 福利一区二区| 国产乱子伦精品| 999久久久精品国产| 国产人妻777人伦精品hd| 看电视剧不卡顿的网站| a级片在线观看视频| 国产精品久久久久国产精品日日| 日本三级欧美三级| 91精品国产丝袜白色高跟鞋| 你懂的在线观看| 欧美激情久久久久| 国产精品伊人| 九九九九九精品| 欧美精品国产| 亚洲国产成人va在线观看麻豆| 99精品视频在线观看| 国产日韩欧美在线观看视频| 在线精品视频免费观看| 天天摸夜夜添狠狠添婷婷| 久久精品小视频| 免费污视频在线一区| 狠狠色综合网站久久久久久久| 久久久五月天| 成年网站免费在线观看| 久久久精品中文字幕麻豆发布| 久久久久久久久久91| 91精品国产美女浴室洗澡无遮挡| 国产高清在线| 欧美在线视频导航| 美国成人xxx| 美女扒开大腿让男人桶 | 韩国黄色一级片| 亚洲特黄一级片| 亚洲综合五月天婷婷丁香| 亚洲丝袜在线视频| 日本在线高清| 黄色99视频| 亚洲精品偷拍| 又黄又爽的网站| 亚洲一卡二卡三卡四卡无卡久久 | 国产成人高清在线| 2025国产精品自拍| 粉嫩的18在线观看极品精品| 日韩精品无码一区二区三区| 亚洲一区二区三区高清不卡| 中文字幕在线永久| 性做久久久久久久免费看| 午夜精品无码一区二区三区| 美女av一区二区| 欧美成人精品午夜一区二区| 第九区2中文字幕| 国产精品夜夜爽| 精品肉丝脚一区二区三区| 日韩精品中午字幕| xxx.xxx欧美| 国内成+人亚洲| 欧美在线综合| 国产精品密蕾丝袜| 欧美视频一区二区三区| 97超碰国产一区二区三区| 国产精品入口尤物| 我不卡影院28| 国产裸体视频网站| 亚洲国产精品综合小说图片区| 少妇精品高潮欲妇又嫩中文字幕| 91精品国产高清| 国产亚洲一区| 日本黄色的视频| 尤物av一区二区| 色窝窝无码一区二区三区| 91高清免费在线观看| 国产一区二区三区四区五区| 少妇性l交大片| 亚洲欧洲国产专区| 亚洲精品.www| 2019中文字幕在线免费观看| 成人看的视频| 少妇欧美激情一区二区三区| 亚洲va国产va欧美va观看| 三级av在线| 国产精品丝袜视频| 欧美在线视屏| 国产美女喷水视频| 欧美三级乱人伦电影| 免费在线观看av电影| 蜜桃av久久久亚洲精品| 久久福利资源站| 日本三级2019| 色噜噜狠狠狠综合曰曰曰| 麻豆精品在线| 男人天堂999| 亚洲欧美在线观看| 人人妻人人澡人人爽精品日本| 日韩av成人在线观看| 97久久夜色精品国产| 久久人人妻人人人人妻性色av| 欧美午夜不卡视频| 9999热视频在线观看| 天堂社区 天堂综合网 天堂资源最新版| 国产裸体歌舞团一区二区| 亚洲日本视频在线观看| 久久午夜a级毛片| 一本色道久久综合狠狠躁的番外| 五月天激情播播| 欧美日韩一区二区免费在线观看 | 精品国产亚洲av麻豆| 欧美一区视频在线| 欧美日韩岛国| 91麻豆精品国产91久久综合| 精品国产乱码久久| 亚洲综合视频|