14
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Turbolinksの画面遷移をJS側でも使いたい

Posted at

JSでTurbolinksの画面遷移処理を呼びたい

Turbolinksを利用しているアプリケーションで、以下のように任意の要素のクリックイベントに画面遷移を設定するコードを書いていました。
当然ながら以下のコードのままではTurbolinksの画面遷移は利用できず、任意の要素をクリックしても通常の画面遷移が実行されてしまいます。

element.addEventListener('click', (e) => {
  const href = e.currentTarget.dataset.href
  window.location.href = href
})

Turbolinksは自動的に<a href>リンクに対して独自の遷移処理を差し込むことで画面遷移の高速化を実現しています。
Turbolinksでは、この独自の遷移処理を明示的に呼び出すためにTurbolinks.visit(location)というメソッドを用意してくれています。

以下のように書き換えることでJS側でTurbolinksの画面遷移を利用できるようになりました。

element.addEventListener('click', (e) => {
  const href = e.currentTarget.dataset.href
  Turbolinks.visit(href)
})

Tips

ちなみに、第二引数に{ action: 'replace' }のオプションを与えることで、HistoryAPIのhistory.replaceStateを使用した画面遷移を実行することもできます。
新たに履歴エントリを追加することなくURLを変更することができるため、タブ切り替えなどの「URLは変えたいけど、戻るボタンの対象にはしたくない」といったケースで便利です。

Turbolinks.visit(location, { action: 'replace' })

14
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?