21日目TIL


無限スクロール

  • スクロール
  • intersectionObserver API
  • 1.スクロールイベント(+制限)

  • 欠点
  • メインスレッド影響
  • 各エリアにアクティブ登録があるため、ユーザがスクロールするたびに検出されたイベントが呼び出される(使用制限が改善される)
  • getBoodingClientRect()を呼び出して特定の場所を検出するときにReflowが発生する
  • スクロールイベントによるgetBoodingClientRect関数の実行
  • 2. intersectionObserver

  • メリット
    getBoundingClientRect()を実行しないと、Reflowは発生しません.
  • 交差観測プログラムの使用

    const options = {
      root: null, //default값
      rootMargin: '0px 0px 0px 0px', //default값
      threshold: 0 //default값
    }
    
    // IntersectionObserver 생성
    const io = new IntersectionObserver((entries, observer) => {
      // IntersectionObserverEntry 객체 리스트와 observer 본인(self)를 받음
      // 동작을 원하는 것 작성
      entries.forEach(entry => {
        // entry와 observer 출력
        console.log('entry:', entry);
        console.log('observer:', observer);
      })
    }, options)

    intersectionObserver options

  • ルート:交差領域の基準(閾値に関する)
  • rootMargin:対象の全領域が入ることを基準としている(調整すれば、写真が全部見えなくても、どのような操作が可能か)
  • threshold:対象領域の交差領域パーセンテージ
  • 交差点観察プログラムの方法

  • IntersectionObserver.observe(targetElement)
  • IntersectionObserver.unobserve(targetElement)

  • ターゲットエンティティのIntersectionObserverを登録します(観察開始時)

  • 観察対象領域の停止
  • intersectionObserver Properties

  • IntersectionObserverEntry.boundingClientRect
  • IntersectionObserverEntry.rootBounds
  • IntersectionObserverEntry.intersectionRect
  • IntersectionObserverEntry.isIntersection:ターゲットエンティティが交差領域にある場合はtrueを返します.そうでない場合はfalseを返します.
  • 整理する


    new交差点Observerのターゲットとして登録(i)
    observeが登録されている場合、
    newとして定義されたオプション
    newとして定義されたコールバック関数を実行します.
    イベント(関数)を対応するコールバック関数で条件に従って操作します.
    ソース

    classプロパティ


    1. classList


    add、remove、toggle、containsなどの方法を使用するために使用されます.

    2. className


    classの値をもたらします.
    <div class='a'>a</div>
    <span class='b c'>bc</span>
    <script>
    console.log(document.querySelector('div').classList)	//DOMTokenList ['a', value: 'a']
    console.log(document.querySelector('div').classList.value)	//a
    console.log(document.querySelector('div').className)		//a
    
    
    console.log(document.querySelector('span').classList)		//DOMTokenList(2) ['b', 'c', value: 'b c']
    console.log(document.querySelector('span').classList[0])	//b 
    console.log(document.querySelector('span').classList[1])	//c
    console.log(document.querySelector('span').classList[2])	//undefined 
    console.log(document.querySelector('span').classList.value)	//b c
    console.log(document.querySelector('span').className)	//b c
    </script>

    なぜモジュール化するのですか?


    App.jsでは、a.jsおよびb.jsは、a.jsのいくつかの挙動に基づいてb.jsの影響を生じたいが、a.jsはb.jsを知らないが、動作のために適用される.ターゲットをjsおよびアプリケーションに移動します.jsはb.jsであり、影響があればa.jsとb.jsは相手を知らなくても互いに操作し合い、互いの独立性を形成することができる.