2012-04-23 11 views
9

私はbackbone.jsを使用してアプリケーションを作成しており、ページ間でアニメーションを作成しています。したがって、ボタンをクリックすると、次のページが右からスライドし、戻るボタンをクリックすると、左から次のページがスライドします。私はルータを使用して、ブラウザの前進と後ろのボタンで同じことをしたいです。アニメーションが正しい方向にあることを保証できるように、どちらが押されたかを(前方または後方に)伝えることは可能ですか?バックボーンルーティングは、順方向か逆方向かを検出します

明確にするために、私はバックボーンルーティングを行う方法を尋ねません。私はバックボーンルーティングを行うときに、どのボタンがURLを変更させたかをどのように捕まえることができるのか、バックボタンかフォワードボタンかを尋ねています。

ありがとうございました

答えて

8

すべてのリンクでクリックイベントを再生します。 (CoffeeScriptのは)

$(document).on 'click', 'a' -> 
    window.linkClicked = true 

また、あなたはBackbone.history.navigate()を傍受することができます。誰かがクリックすると、戻ってこないことを意味するので、フラグをtrueに設定します。また、ルータにすべてのルータイベントをリッスンするイベントがあります。常に前のフラグメント(Backbone.history.getFragment())を保存してください。現在のフラグメントと前のフラグメントを比較します。両者が同じ場合は、そのフラグがtrueまたはfalseに設定されているかどうかを確認します。 falseに設定されている場合は、trueでない場合、誰かがリンクをクリックしたが同じ前のページに来た場合、それが戻ってきたことがわかります。最後に、このフラグをfalseにリセットします。

class SnazzyRouter extends Backbone.Router 
    initialize: -> 
     # This gets triggered everytime a route event gets triggered 
     @on 'all', => 
      currentFragment = Backbone.history.getFragment() 
      window.backDetected = false # assume no back detected 

      if !window.linkClicked and currentFragment == window.previousFragment 
       window.backDetected = true 

      window.linkClicked = false # reset 
      window.previousFragment = currentFragment 

window.linkClicked = false 
window.backDetected = false 
window.previousFragment = null 

snazzyRouter = new SnazzyRouter() 

今、それは簡単な

# Did we go back? 
console.log "I CAN'T BELIEVE WE WENT BACK!" if window.backDetected 

は、あなたが任意の明確化が必要な場合は、私に教えてくださいます(私はちょうど私のアプリのためにこれを実装し、それが動作します)。

+0

私はこれが本当に質問に答えるとは思わない。彼はブラウザの戻る/進むボタンを探していました。 – mix3d

+0

'if!window.linkClickedおよびcurrentFragment == window.previousFragment'ユーザがクリックして戻るボタンを押したときに_older_エントリが選択されると、このコードは失敗します。 –

関連する問題