[解決済み] AngularJSのScrollTo関数
質問
クイックナビを正しく動作させようとしています。サイドに浮いています。リンクをクリックすると、ページ上のそのIDに移動します。私は次のようにします。 ツリーハウスのガイド . これはスクロールのために持っているものです。
$("#quickNav a").click(function(){
var quickNavId = $(this).attr("href");
$("html, body").animate({scrollTop: $(location).offset().top}, "slow");
return false;
});
最初は
</body>
. しかし、私はレースコンディションに遭遇しているようで、それはquickNavがコンパイルされる前に発射されました(それは
ng-hide
それが原因かどうかはわかりませんが、DOM内にあります)。
コンソールでそのコードのブロックを実行すると、期待通りにスクロールが動作します。
これをコントローラに、もっと言えばディレクティブの中に移動させるのが効果的だと考えました。しかし、それを達成するための運がありません。 このコードのブロックをAngularJSで動作させるにはどうしたらよいですか?
どのように解決するのですか?
以下は、クリック時に要素までスクロールする簡単なディレクティブです。
myApp.directive('scrollOnClick', function() {
return {
restrict: 'A',
link: function(scope, $elm) {
$elm.on('click', function() {
$("body").animate({scrollTop: $elm.offset().top}, "slow");
});
}
}
});
デモの様子 http://plnkr.co/edit/yz1EHB8ad3C59N6PzdCD?p=preview
ディレクティブの作成方法については、以下のビデオを参照してください。 http://egghead.io 10の「最初のディレクティブ」からご覧ください。
編集
: hrefで指定した特定の要素にスクロールするようにするには、単に
attrs.href
.
myApp.directive('scrollOnClick', function() {
return {
restrict: 'A',
link: function(scope, $elm, attrs) {
var idToScroll = attrs.href;
$elm.on('click', function() {
var $target;
if (idToScroll) {
$target = $(idToScroll);
} else {
$target = $elm;
}
$("body").animate({scrollTop: $target.offset().top}, "slow");
});
}
}
});
そうすると、こんな風に使うことができます。
<div scroll-on-click></div>
をクリックすると、クリックされた要素までスクロールします。 または
<a scroll-on-click href="#element-id"></div>
を指定すると、そのidを持つ要素にスクロールします。
関連
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】TypeError: res.status は関数ではありません。
-
[解決済み】中央値の計算 - javascript
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] 部分テンプレートとテンプレートの複雑なネスト
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み】React.jsの配列の子要素のユニークキーを理解する
-
[解決済み】React-Routerの子が1つしかない。
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?