pjax でページを移動した後の処理
コードのサンプルは javascript ではなくて coffeescript で書いてある。
pjax 切り替え時の処理
pjax:start と pjax:end に指定することができる。 ここでは、ページ切り替え後の処理なので pjax:end に処理を記述する。
$('#pjax-container').bind('pjax:start', ->
...
).bind('pjax:end', ->
...
)
スクロール
URL に # が含まれていれば、アンカーまでスクロールする。 そうでなければ、ページの上部まで。
if (n = url.search(/\#.*$/)) != -1
anchor = $(url.substring(n)).offset().top
$("html, body").animate({ scrollTop: anchor }, 0)
else
$("html, body").animate({ scrollTop: 0 }, 0)
を pjax:end に bind する。
google analytics
jquery.pjax.js を見ると google analytics に対応している部分があるので、 特に何もしなくて良い(はず)。
google code prettify
prettyPrint()
を pjax:end に bind する。
twitter のボタンを更新する
pjax でページが切り替わるとき、何もしないと twitter のボタンの URL が更新されないで 前のページの URL がツイートされてしまう。
対策は https://dev.twitter.com/discussions/890 にあるようにする。
twitter のボタンは twtr-btn クラスの div で囲って
<div class='twtr-btn'>
<a href="https://twitter.com/share" class="twitter-share-button" data-lang="ja">ツイート</a>
<script> ... </script>
</div>
のような HTML だとする。
coffeescript で書くと次のようなプログラム
if (twtrBtn = $(".twtr-button")).length > 0
twtrBtn.empty()
twtrBtn.append('<a href="https://twitter.com/share" class="twitter-share-button" data-lang="ja" data-url="' + location.href + '">ツイート</a>')
twttr.widgets.load()
を pjax:end に bind すれば良い。
はてなブックマークのボタンを更新する
bookmark_button_wo_al.js を見たところ、pjax でページ切り替え後に
Hatena.Bookmark.BookmarkButton.setup()
を実行すれば良いようだ。
twitter と同じように
<div class='hatena-button'>
<a href="http://b.hatena.ne.jp/entry/ ...></a>
<script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button_wo_al.js" charset="utf-8" async="async"></script>
</div>
のような HTML なら
if (hatenaBtn = $(".hatena-button")).length > 0
hatenaBtn.empty();
hatenaBtn.append('<a href="http://b.hatena.ne.jp/entry/' + location.href + '" class="hatena-bookmark-button" data-hatena-bookmark-title="SOME_TITLE" data-hatena-bookmark-layout="standard" title="このエントリーをはてなブックマークに追加"><img src="http://b.st-hatena.com/images/entry-button/button-only.gif" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a>')
Hatena.Bookmark.BookmarkButton.setup()
を pjax:end に bind すれば良い。