没有方法scrollTo

时间:2012-05-10 05:08:20

标签: jquery backbone.js scrollto

我试图在backbone.js事件函数中调用scrollTo方法。我想在单击列表锚点时滚动到某个div标签。我将click事件绑定到一个函数并在该函数中调用了scrollTo方法,但是我得到了错误," 未捕获TypeError:对象函数(a,b){return new e.fn.init(a ,b,h)}没有方法' scrollTo' "当我点击锚点时。

请帮忙!

以下是一些示例代码。

var MenuItemListView = Backbone.View.extend({
    el: $('#menuitem_list_container'),
    initialize: function() {
        _.bindAll(this, 'render');
    },
    render: function() {
        var template = _.template( $("#menuitem_list_template").html(), {selectedindex: menuItemList.get('selectedindex'), menuitemlist: menuItemList.get('menuitemlist')});
        this.el.html(template);
        return this;
    },
    events: {
        "click .nav a":"buttonClick"
    },
    buttonClick: function(e) {
        e.preventDefault();
        target = e.currentTarget.hash;
        alert(target);
        $.scrollTo(target, 100);
    }
});

1 个答案:

答案 0 :(得分:2)

据我所知,你在这里做的是错误地使用scrollTo插件。 e.currentTarget.hash将是一个字符串,scrollTo插件的允许参数为:

  • 相对选择器$(...).scrollTo( 'li:eq(14)', 800 );
  • jQuery对象$(...).scrollTo( $('div li:eq(14)'), 800 );
  • DOM元素$(...).scrollTo( $('ul').get(2).childNodes[20], 800 );
  • 绝对数字$(...).scrollTo( 150, 800 );
  • 绝对数字(哈希)$(...).scrollTo( { top:800, left:700}, 800 );
  • 绝对位置$(...).scrollTo( '520px', 800 );
  • 绝对位置(哈希)$(...).scrollTo( {top:'110px', left:'290px'}, 800 );
  • 相对位置$(...).scrollTo( '+=100px', 800 );
  • 相对位置(哈希)$(...).scrollTo( {top:'-=100px', left:'+=100'}, 800 );
  • 百分比$(...).scrollTo( '50%', 800 );

所以你想要最终做的是找到你想要击中的锚的位置

这些是您的Backbone视图最终将事件绑定到:

的锚点
<div class="nav">
  <a href="#foo">Foo</a>
  <a href="#bar">Bar</a>
</div>

这些是你想要达到的目标:

<a name="foo">Foo</a>
<a name="bar">Bar</a>

因此您必须尝试找到所述命名锚点的位置:

var hash = e.currentTarget.hash.replace('#', '');
var $anchor = $('a[name=' + hash + ']');

然后你可以使用jQuery对象参数,如下所示:

$.scrollTo( $anchor, 800 );

这应该可以解决你的问题