【问题标题】:backbone routing detecting whether forward or back pressed主干路由检测是向前还是向后按压
【发布时间】:2012-05-04 07:23:19
【问题描述】:

我正在使用backbone.js 编写一个应用程序,并在页面之间制作动画(有点像iphone 风格的ui)。所以当你点击一个按钮时,下一页从右侧滑入,点击后退按钮将使下一页从左侧滑入。我希望能够使用路由器对浏览器的前进和后退按钮执行相同的操作。是否可以分辨出哪个被按下(向前或向后),以便我可以确保动画的方向正确?

澄清一下,我不是在问如何进行骨干路由。我在问在进行主干路由时,如何捕捉导致 url 更改的按钮,是后退按钮还是前进按钮?

谢谢

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    监听所有链接的点击事件。 (CoffeeScript)

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

    或者,你可以拦截Backbone.history.navigate()如果有人点击它,这意味着他们不会返回,所以设置一个标志为true。在您的路由器中也有一个事件来监听所有路由器事件。始终存储前一个片段 (Backbone.history.getFragment())。将当前片段与前一个片段进行比较。如果它们相同,则检查该标志是否设置为truefalse。如果设置为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
    

    如果您需要任何说明,请告诉我(我刚刚为我的应用程序实现了此功能,并且可以正常工作)。

    【讨论】:

    • 我认为这并不能真正回答问题;他正在寻找浏览器的后退/前进按钮。
    • if !window.linkClicked and currentFragment == window.previousFragment 如果用户单击并按住后退按钮并选择 older 条目,此代码将失败。
    猜你喜欢
    • 2012-05-01
    • 2016-05-25
    • 2014-02-11
    • 2015-02-02
    • 2019-01-25
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    相关资源
    最近更新 更多