scrollIntoView()
すべてのブラウザで動作しますか?そうでない場合、jQuery
代替手段はありますか?
6 に答える
はいサポートされていますが、ユーザーエクスペリエンスは...悪いです。
@ 9bitsが指摘しているように、これはすべての主要なブラウザで長い間サポートされてきました。心配しないでください。主な問題はそれが機能する方法です。ページの最後にある可能性のある特定の要素にジャンプするだけです。そこにジャンプすることで、ユーザーは次のことを理解できません。
- ページが上にスクロールされました
- ページが下にスクロールされました
- それらは他の場所にリダイレクトされました
最初の2つはスクロール位置によって決定できますが、ジャンプが行われる前にユーザーがスクロール位置を追跡したと誰が言いますか?したがって、これは非決定的なアクションです。
最後の1つは、特にページにスクロールして表示されない移動ヘッダーがあり、残りのページデザインが同じページにあることを意味しない場合(左側のメニューのように全高の垂直要素がない場合)に当てはまる可能性がありますバー)。この問題が発生しているページの数に驚かれることでしょう。自分でチェックしてください。あるページに移動し、上部を見てから、Endキーを押してもう一度見てください。別のページだと思われるかもしれません。
アニメーション化scrollintoview
されたjQueryプラグインが救いの手を差し伸べます
そのため、ネイティブDOM関数を使用する代わりに、スクロールインビューを実行するプラグインがまだあります。これらは通常、スクロールをアニメーション化して、上記の3つの問題をすべて排除します。ユーザーは簡単に動きを追跡できます。
Matteo SpinnelliのiScroll-4を使用していますが、iOSサファリでも動作します。これには、scrollTo、scrollToElement、scrollToPageの3つのメソッドがあります。div内にラップされた要素の順序付けられていないリストがあるとしましょう。Robert Koritnikが上で書いたように、スクロールしたことを示すために、そのわずかなアニメーションが必要です。以下の方法でその効果が得られます。
scrollToElement(element, time);
scrollIntoViewIfNeededについてお読みください
if(el.scrollIntoViewIfNeeded){
el.scrollIntoViewIfNeeded()
}else{
el.scrollIntoView()
}
jQueryの代替およびアニメーション<html>
と<body>
要素を使用できます。
$('html, body').animate({
scrollTop: $("#myElem").offset().top
}, 1000);
これは試していませんが、組み込みのscrollIntoView関数に便乗すると多くのコードを節約できるようです。アニメーションアクションが必要な場合は、次のようにします。
- コンテナの現在のスクロール位置をSTARTPOSITIONとしてキャッシュします
- 組み込みのscrollIntoViewを実行する
- スクロール位置をENDPOSITIONとして再度キャッシュします
- コンテナをSTARTPOSITIONに戻します
- ENDPOSITIONまでスクロールをアニメーション化する