IntersectionObserver 複数 バグ? スクロール

1つのオブザーバで複数のアイテムを監視する場合、(頭も)バグる

結論

2つのオブザーバで同じコンテナ内の異なるアイテムをそれぞれ1つずつ監視することで解決した

 observer1.observe(document.querySelector(".container").firstElementChild)
 observer2.observe(document.querySelector(".container").lastElementChild);

失敗した例は observer 1つだけ

observer1.observe(document.querySelector(".container").firstElementChild)  
observer1.observe(document.querySelector(".container").lastElementChild)  

関連記事
m-rai.hatenablog.com m-rai.hatenablog.com

経緯

例えばスクロールコンテナ内のアイテムを1つのオブザーバで複数監視する
交差した時にアイテムに色を付与する
1つ目が交差したら、2つ目が…、3つ目が…に色を変化させる

この時、
監視したアイテムをコンテナに収まるように設定し、複数のアイテムが全て見えている状態であれば問題なく動作する
アイテムそれぞれ、赤、青、緑である

しかしスクロールとは、見えないアイテムをスクロールして見るというものである
そのためアイテムをコンテナからはみ出すように設定すると、おかしな挙動をする

なぜか、全て赤になる

スクロールしても、しても、全て赤に染まる
DOMを調べてみると監視の対象が undefined になったり、異なるアイテムを監視していたり、モンスター化する
それ以外にもさんざん検証してみたが、書ききれない

全てのアイテムがコンテナに収まり見えている状態のDOMは正常だが、収まらず見えない状態になると突然発症するので制御不能

今回はスクロールアイテムの最初と最後のアイテムを監視し、クリックしてスクロールする機能である矢印ボタンの表示/非表示をしたかった

最初のアイテムが見えているなら preview 矢印を非表示にして、現在地より前にアイテムは存在しないという意図を伝える
次へスクロールしてアイテムが見えなくなったらそれを表示させ、アイテムが前に存在する意図へ変更する
最後のアイテムまでスクロールしたなら next 矢印を非表示にして、ここから先はアイテムが存在しない意図にするもの