我试图在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);
}
});
答案 0 :(得分:2)
据我所知,你在这里做的是错误地使用scrollTo插件。 e.currentTarget.hash
将是一个字符串,scrollTo插件的允许参数为:
$(...).scrollTo( 'li:eq(14)', 800 );
$(...).scrollTo( $('div li:eq(14)'), 800 );
$(...).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 );
这应该可以解决你的问题