blog

トップへスクロールする

一般的に、長いページには上部にスクロールするボタンがあり、ユーザーはそれをクリックすると、300ミリ秒以内にアニメーション効果で上部にスクロールします。 携帯電話を待っているだけで見つけるために、クリ...

Jul 21, 2020 · 2 min. read
シェア

一般的に、長いページには一番上までスクロールするボタンがあり、ユーザーはそれをクリックすると、300ms以内にアニメーション効果で一番上までスクロールします。

最初は、こんなの簡単じゃないか、1行のコードで完璧じゃないか、と思いました。

$(document.documentElement).animate({scrollTop: 0}, 300);

これを使って頂上まで行くことは可能ですが、アニメーションはありません。

$(document.documentElement).scrollTop(0)

携帯電話でクリックしても反応しないことを知り、簡単すぎると思っていたこと、スクロールして上に移動するボタンには互換性の問題がたくさんあることに気づきました。

document.bodyは携帯電話では動作しますが、PCでは動作しません。

$(document.body).animate({scrollTop: 0}, 300);
console.log(document.body.scrollTop) // モバイルは値、PCは0

document.documentElementPCでは動作しますが、携帯電話では動作しません。

$(document.documentElement).animate({scrollTop: 0}, 300);
console.log(document.documentElement.scrollTop) // pcモバイルの値は0、IEの値は0だ。

document.documentElementつまり、PCでのスクロールは , で、モバイルでのスクロールは document.body です。

より良いAPIがなければ、スクロール要素は別の環境で処理する必要があり、明らかに少し面倒です。

document.scrollingElement document.scrollingElement.tagName PCではhtml、モバイルではbodyということがわかります。

問題解決をしながら、apiを検索します。

window.scrollTo({top: 0, behavior: "smooth"})

と思っていたのですが、jsの良心的なapiが見つかり、とても良いapiを提供し、一番上までスクロールできたり、アニメーションができたりと、その時々の互換性をチェックするのですが、実はiosは対応しておらず、弊害があり、本当に良いことがありません。

document.scrollingElement そのため、IEやオペラ、一部の低バージョンのブラウザが対応していないことを除けば、基本的にニーズを満たすことができます。

Read next

JavascriptのMath.maxとMath.max.applyの違いと使い方

最近、ちょっとした案件をこなしていたところ、このような使い方に出くわしました。滅多に遭遇しない使い方で、なかなか面白いと感じたので記録しておきます。 ただし、データが配列に配置されている場合は、これを呼び出すことはできません。このとき、applyメソッドapply()メソッドを使って関数を呼び出します。単純に関数を呼び出す方法として理解できますが、t...

Jul 21, 2020 · 2 min read

032 JavaEEに関する質問: Spring

Jul 20, 2020 · 5 min read

JavaScriptリボーン

Jul 20, 2020 · 6 min read

Vueソースコードのビルド処理

Jul 20, 2020 · 4 min read