前提・実現したいこと
jQueryから書き換えを行っており、ページダウンボタンが上手く実装できません。
・ポリフィルを使わない
js
1window.scrollTo({ 2 top: scrollPosition, 3 behavior: "smooth" 4});
を使わない方法を検索してもうまくできるものが見つかりませんでした。
発生している問題・エラーメッセージ
とにかくポリフィルを使いたくないので、jsだけで済ませたいです。
該当のソースコード
js
1/* page-top / bottom button ---------------------------------- */ 2 let Btn = document.getElementById('page-top'), 3 topBtn = document.getElementById('page-all'), 4 bottomBtn = document.getElementById('page-bottom'); 5 window.addEventListener('scroll', function () { 6 if (window.scrollY > 300) { 7 Btn.classList.add('fadeIn'); 8 Btn.classList.remove('fadeOut'); 9 } else { 10 Btn.classList.remove('fadeIn'); 11 Btn.classList.add('fadeOut'); 12 } 13 }) 14 topBtn.addEventListener("click", function foo() { 15 let nowY = window.pageYOffset; 16 window.scrollTo(0, Math.floor(nowY * .9)); 17 if (nowY > 0) { 18 window.setTimeout(foo, 10); 19 } 20 }); 21 // bottomBtn.addEventListener('click', scrollToBottom); 22 // 上手い方法が見つかりませんでした。 23 /* page-top / bottom button ------------------------------ end */
試したこと
js
1window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' })
Safari だと動かないそうなので、そしてbehavior: 'smooth'だとアニメーションが速いのでもっとゆっくりにしたいです。
ライブラリやポリフィルなしで実装できますでしょうか。
js
1bottomBtn.addEventListener("click", function foo() { 2 const goalOffset = document.body.scrollHeight - document.body.clientHeight; 3 let nowY = goalOffset - window.pageYOffset; 4 window.scrollTo(goalOffset, Math.floor(nowY * .9)); 5 if (nowY > 0) { 6 window.setTimeout(foo, 10); 7 } 8 });
としたところ、初回は下までスムーズスクロールされるのですが、二回目以降度のボタンを押しても反応しませんんでした。
ページ全体が fixed が掛けられたように、マウスでのスクロールも出来ません。エラーは特になかったです。
補足情報(FW/ツールのバージョンなど)
Firefox 最新版、Safari 604.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/15 15:31
2021/10/15 16:02
2021/10/16 01:55
2021/10/16 07:43 編集
2021/10/16 12:55