私は、クライアントによって動的に構築されたWebページを持っています。これは、それぞれ独自の名前付きアンカーで数十のリスト項目を生成します。ページの側面には、指定されたアンカーを指すハイパーリンク付きの固定目次(TOC)があります。これにより、ユーザは、目次をクリックして項目にジャンプすることができる。動的に生成されたページ上で名前付きアンカーに確実にジャンプしますか?
私が遭遇している問題は、初期ページの読み込み時にページが動的に生成されるため、ブラウザのデフォルトの動作を使用してURLの最初のハッシュの項目にスクロールできないことです。さらに、ユーザーが別のブックに切り替えると、ページは新しいコンテンツと新しい開始ハッシュで完全に再生成されます。同じ問題:ハッシュはコンテンツを先行しているので、すでに表示されているアイテムには位置しません。
レンダリングを待ってから適切な要素のscrollIntoView
メソッドを使用してハッシュにジャンプすることで、これをJavaScriptでほぼ解決しました。
次の問題は、scrollIntoView
が呼び出された時点でスタイルシートが完全に適用されないため、アイテムの最終的な位置が不明であることです。私は見えないアイテムのスクロールを見ていますが、スタイリングが適用されると、位置が失われます。 scrollIntoView
コールを遅らせるために1秒間setTimeout
を置いています。これは機能しますが、壊れやすいと感じます。
ハッシュが配置された後にコンテンツが来たときに、名前付きアンカーにジャンプする信頼できる手法はありますか? CSSがいつスタッフィングのコンテンツを手伝ったのか分かっていたらあるいは、ページの高さが安定した後にイベントをトリガすると便利です(CSSスタイリングの終了を通知する)。
「ジャンプする」と言うと、フォーカスを意味しますか?あなたがフォーカスしたいページの要素を「ハッシュ」していますか?もしそうなら、それは常に同じ名前を持っていますか? –
コンテンツがビューポートを超えているため、(URLのハッシュタグごとに)ビューポートの上部に表示する必要がある項目をスクロールして表示する必要があります。名前は変更されません。 – Mario
jquery.scrollToへのリンクを使用して、フォーカスに関する私の答えを編集しました –