Angularjsでアンカーリンク?
質問
Angularjsでアンカーリンクを使用することは可能でしょうか?
すなわち
<a href="#top">Top</a>
<a href="#middle">Middle</a>
<a href="#bottom">Bottom</a>
<div name="top"></div>
...
<div name="middle"></div>
...
<div name="bottom"></div>
ありがとうございます
どのように解決するのですか?
いくつかの方法があるようです。
オプション1: ネイティブAngular
Angularは
$anchorScroll
サービスを提供していますが、ドキュメントがひどく不足しており、私はそれを動作させることができませんでした。
チェックアウト
http://www.benlesh.com/2013/02/angular-js-scrolling-to-element-by-id.html
に関するいくつかの洞察は
$anchorScroll
.
オプション2: カスタムディレクティブ / ネイティブJavaScript
私が試したもう一つの方法は、カスタムディレクティブを作成して
el.scrollIntoView()
.
これは、基本的にディレクティブのリンク関数で次のようにすることで、かなりまともに機能します。
var el = document.getElementById(attrs.href);
el.scrollIntoView();
しかし、ブラウザがネイティブに対応しているのに、この両方を行うのは少し大げさな気がしますよね?
選択肢3:Angularのオーバーライド/ブラウザのネイティブ対応
もし、あなたが http://docs.angularjs.org/guide/dev_guide.services.$location とその HTML Link Rewriting の項を見ると、以下のようにリンクが書き換わらないことがわかるでしょう。
ターゲット要素を含むリンク
例
<a href="/ext/link?a=b" target="_self">link</a>
ということで、あとは
target
属性をリンクに追加するだけです。
<a href="#anchorLinkID" target="_self">Go to inpage section</a>
Angularはブラウザのデフォルトとして、そのアンカーリンクは異なるベースURLではないので、ブラウザは望み通り正しい位置にスクロールします。
私はオプション3を選びました。なぜなら、ここではブラウザのネイティブ機能に頼るのが最善であり、私たちの時間と労力を節約できるからです。
スクロールとハッシュの変更が成功した後、Angularがフォローアップしてハッシュをカスタムスタイルに書き換えることに注意しなければなりません。しかし、ブラウザはすでにその仕事を終えており、あなたは行くのに問題ありません。
関連
-
[解決済み] Angular 1.2+ で ng-bind-html-unsafe を複製するために $sce.trustAsHtml(string) を使用するにはどうしたらよいですか?
-
[解決済み] Angular JSによるシンプルなポップアップ
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] AngularJSで$scope.$watchと$scope.$applyを使用するにはどうすればよいですか?
-
[解決済み] AngularJS コントローラにおける 'this' と $scope の比較
-
[解決済み] なぜAngularJSはselectに空のオプションを含めるのですか?
-
[解決済み】AngularJSのディレクティブスコープにおける「@」と「=」の違いは何ですか?
-
[解決済み】AngularJSのスコーププロトタイピング/プロトタイピング継承のニュアンスとは?
-
[解決済み】AngularJSでアンカーハッシュのリンクを処理する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ページロード時にAngularJSのコントローラ関数を実行する方法は?
-
[解決済み] AngularJSのグローバル変数
-
[解決済み] Angular JS $locationChangeStart 次の url ルートオブジェクトを取得する
-
[解決済み] Apigee API へのリクエストで 401 レスポンスエラーが発生する
-
[解決済み] 誰かangularjsの$qサービスの使用について説明してください。[重複しています]。
-
[解決済み] ngInject'を本当に書く必要があるのか?
-
[解決済み] AngularJSの.$on()とは?
-
[解決済み] 入力フィールドにフォーカスを当てるには?
-
[解決済み] 子コントローラから親スコープにアクセスするAngularJS
-
[解決済み】AngularJSでアンカーハッシュのリンクを処理する方法