<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用于現(xiàn)代JavaScript的Observer API

          共 2592字,需瀏覽 6分鐘

           ·

          2020-11-08 04:44

          英文 |?https://dev.to/codyjasonbennett
          作者 | Cody Bennett

          Observer API(觀察者API)釋放了Web隱藏的超能力,以創(chuàng)建真正的響應(yīng)式體驗(yàn),從懶加載關(guān)鍵內(nèi)容到非侵入式性能監(jiān)控。
          在檢測(cè)變化方面非常方便,可以用來(lái)創(chuàng)建響應(yīng)式應(yīng)用。
          有四種不同類型的觀察者可以觀察不同的東西——從DOM到瀏覽器性能。

          MutationObserver

          MutationObserver觀察DOM樹,監(jiān)聽DOM的變化。
          // 選擇要觀察突變的節(jié)點(diǎn)const targetNode = document.getElementById('element');
          // 觀察者的選項(xiàng)(觀察哪些突變)const config = { attributes: true, childList: true, subtree: true,};
          // 創(chuàng)建一個(gè)觀察者實(shí)例,鏈接到一個(gè)回調(diào),以便在觀察到突變時(shí)執(zhí)行。const observer = new MutationObserver((mutations, observer) => { mutations.forEach(mutation => { if (mutation.type === 'childList') { console.log('A child node has been added or removed.'); } else if (mutation.type === 'attributes') { console.log(`The ${mutation.attributeName} attribute was modified.`); } });});
          // 開始觀察目標(biāo)節(jié)點(diǎn)的配置突變情況observer.observe(targetNode, config);
          // 之后,你可以停止觀察observer.disconnect();
          當(dāng)一個(gè)元素的屬性、文本或內(nèi)容發(fā)生變化時(shí),我們會(huì)得到通知,同時(shí)也會(huì)監(jiān)控子節(jié)點(diǎn)是否被添加或刪除。
          這對(duì)于調(diào)整DOM中元素的大小以及重置DOM值特別有用。

          IntersectionObserver

          IntersectionObserver觀察一個(gè)DOM元素的可見性,監(jiān)聽其位置的變化。
          // 選擇要觀察突變的節(jié)點(diǎn)const targetNode = document.getElementById('element');
          // 觀察者的選項(xiàng)(觀察哪些突變)const config = { rootMargin: '-100% 0px 0px 0px',};
          // 創(chuàng)建一個(gè)觀察者實(shí)例,鏈接到一個(gè)回調(diào),以便在觀察到突變時(shí)執(zhí)行。const intersectionObserver = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { console.log('Observing.');
          // 之后,你可以停止觀察 observer.unobserve(entry.target); } });});
          // 開始觀察intersectionObserver.observe(targetNode, config);
          這在基于目標(biāo)元素的可見性和位置的懶惰加載和動(dòng)畫內(nèi)容方面非常有用。

          ResizeObserver

          ResizeObserver觀察元素的內(nèi)容或邊框,監(jiān)聽元素及其子元素的變化。
          // 選擇要觀察突變的節(jié)點(diǎn)const targetNode = document.getElementById('element');
          const resizeObserver = new ResizeObserver((entries, observer) => { entries.forEach(entry => { console.log(`Element size: ${entry.width}px x ${entry.height}px`); console.log(`Element padding: ${entry.top}px ; ${entry.left}px`);
          // 之后,你可以停止觀察 observer.unobserve(entry.target); });});
          // 開始觀察resizeObserver.observe(targetNode);
          創(chuàng)建基于輸入或觸發(fā)器包裝的動(dòng)態(tài)內(nèi)容時(shí),此觀察者非常重要。

          PerformanceObserver

          PerformanceObserver觀察性能測(cè)量事件,監(jiān)聽新的性能條目。
          // 觀察者的選項(xiàng)(觀察哪些突變)const config = { entryTypes: ['resource', 'mark', 'measure']};
          const observer = new PerformanceObserver(list => { list.getEntries().forEach(entry => { // 在控制臺(tái)上顯示每個(gè)報(bào)告的測(cè)量 console.log( `Name: ${entry.name}`, `Type: ${entry.entryType}`, `Start: ${entry.startTime}`, `Duration: ${entry.duration}`, ); });});
          // 開始觀察observer.observe(config);performance.mark('registered-observer');
          這對(duì)于接收性能通知很有用,可以在空閑時(shí)間運(yùn)行,而不與關(guān)鍵的渲染工作競(jìng)爭(zhēng)。
          本文完~

          瀏覽 54
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操逼视频黄色 | 亚洲激情欧美色图 | 亚洲欧美操逼网 | 天天干五月天婷婷 | 日韩女同性爱一区二区三区四区五区 |