前提・実現したいこと
色分けされたsectionが画面に入ったことを探知し、表示領域が100%ならば、
入ったidを表示するものを作っています
threshold:1で全て入りきったら表示されるはずのところが、
なぜかs1が2回、s2が取得されなかったりと
おかしな挙動をします
スクロールバーを掴んでスクロールさせるのと、
マウスホイールでスクロールさせた場合の挙動も違います
どのように制御すれば、できますでしょうか?
IntersectionObserver
上記URLを参考に組んでいます
threshold:1にしてるにも関わらず初回ロード時にs1が表示されるのもおかしいです
該当のソースコード
<style> body,html{ height:100%; } </style> <script> let options = { root:document.querySelector("#aaa"), threshold:1 } window.onload=function(){ const observer = new IntersectionObserver((entries) => { if (entries[0].intersectionRatio == 0) { return; }else{ alert(entries[0].target.id); } }, options); s=document.querySelectorAll('.section'); sl=s.length; for(i=0;i<sl;i++){ observer.observe(s[i]); } } </script> <div id="aaa" style="width:100%;height:100%;overflow-y:scroll;"> <section id="s1" class="section" style="width:100%;height:100%;background:red"></section> <section id="s2" class="section" style="width:100%;height:100%;background:green"></section> <section id="s3" class="section" style="width:100%;height:100%;background:blue"></section> </div>
コードとご質問の内容があっていないように思えるのですが、実際のコードはまた違うものなのですか?
どの辺に相違がありますでしょうか?
現時点での実際のコードになります
そうなのですね。では、それが原因なのかもしれないですね。
検討してみます。
「スクロールバーを掴んでスクロールさせるのと、 マウスホイールでスクロールさせた場合の挙動も違います」とのことですが、試してみたところ、違いがわかりませんでした。
具体的にはどのように違いますか?
マウスホイールによるアラートの表示順
s1
↓
s1
↓
s3
スクロールバーによる操作
s1
↓
s1
↓
s2(緑の画面で止めたら出ます)
↓
s2
↓
s3
上記になります
Firefox最新版です
s2でアラートを表示させるのはけっこう大変じゃありませんか?
何度か試しましたが、成功しませんでした。
スクロールバーをつまんでですよね?
大変じゃありません
何度かやりましたら、出ない事が多いです
たまたま数回が偶然に出てたんですね
そうなんですね。私は一度も出ませんでした。
きっと私が不器用なのでしょう。
回答2件
あなたの回答
tips
プレビュー