2

我有一个主干视图页面(或窗口),它可以有很长的内容,这使得垂直滚动成为必要。发生这种情况时,视口会自动定位在窗口的中间而不是顶部。无论页面是否有长内容,我都希望它在页面顶部打开。我尝试了几种 scrollTo 变体,但似乎都没有。请注意,我使用的是 Backbone js,并且是用 Coffeescript 编写的。这里是:

:coffeescript
  $ ->
    model = new Backbone.Model
      forcastTickInterval: #{xx_interval(@type_well.num_rows)}
      typeWell: #{@type_well.to_json}
      x_labels: #{price_array}
      disc_rate_array: #{disc_rate_array}
      disc_pv10_array: #{disc_pv10_array}
    view = new VGStream.Views.TypeWells.Show(
      model: model
    ).render()
    VGStream.App.router = new VGStream.Routers.Tabs()
    VGStream.App.currentView = view
    Backbone.history.start()

选项卡路由器也相当简单:

class VGStream.Routers.Tabs extends Backbone.Router
  routes:
    '' : 'index'
    ':name' : 'viewTab'

  index: ->
    firstTab = $('.tab-nav li a').first()
    firstTab.scrollTop(0)
    if firstTab
      @navigate firstTab.attr('href'),
        trigger: true

  viewTab: (name) ->
    selectedTab = $(".tab-nav li a[href='##{name}']").parent()
    unless selectedTab.hasClass 'active'
      $('.tab-nav li.active').removeClass 'active'
      selectedTab.addClass 'active'
      $('.tab').hide()
      $(".tab##{name}").show()
      if VGStream.App.currentView? && VGStream.App.currentView[name]?()
        VGStream.App.currentView[name]()

有趣的是,当我打开 Chrome 控制台并输入以下命令时:

this.scrollTo(0)

窗口正确地转到页面顶部。

我不知道如何解决这个问题。

在此先感谢您的帮助。

4

2 回答 2

1

你有没有尝试过

$(document).scrollTop(0);

http://api.jquery.com/scrollTop/

于 2013-03-25T18:42:52.410 回答
0

感谢这是一个古老的问题,但也许下面的内容对于人们搜索旧的 SO 问题以回答他们的编程问题有一些用处。

所以,$(document).scrollTop(0);工作。它也适用于 Bootstrap 导航栏。但重要的是你何时调用它。您正在操作 DOM,即窗口,因此这需要在视图呈现后发生。在 view.render() 完成后查看Backbone.js 事件,了解如何在视图呈现后触发事件。

我正在使用 Backbone.Marionette,因此会 自动触发两者onRender和事件。onShow这对我很有用:

  onRender: function(){
    $(document).scrollTop(0);
  }
于 2015-07-30T09:11:08.370 回答