我正在使用jQuery expander来读取更少读取类型的情况并且它工作正常。我想在用户点击阅读之后将用户滚动到文章的标题。我想弄清楚代码,但我对jQuery不太熟悉。
$('.expand_please').expander({
slicePoint: 1000,
widow: 2,
expandEffect: 'show',
userCollapseText: 'Read less',
expandText: 'Read more',
onCollapse: $(this).closest('h2').scroll()
});
编辑:相关HTML:
<div class="row keyline" id="show_article1">
<h2 style="margin-bottom: 1em;">TITLE</h2>
<div class="link_article" style="display: none;"><a href="/share/thomas/more/18" data-remote="true">READ MORE</a></div>
<div class="fivecol">
<img alt="thumbnail" class="thumbnail" src="/system/thumb.jpg">
</div>
<div class="sevencol last expand_please marginer"><div class="summary" style="display: none;">
ARTICLE BODY TEXT
<span class="read-less"><a href="#">Read less</a></span>
</div>
</div>
答案 0 :(得分:3)
要滚动到相关元素,您只需获取其offset().top
值,并将该值传递给animate()
方法。
它看起来像这样:
$('.expand_please').expander({
slicePoint: 1000,
widow: 2,
expandEffect: 'show',
userCollapseText: 'Read less',
expandText: 'Read more',
onCollapse: function(){
var amount = $(this).siblings('h2:first').offset().top;
$('body, html').animate({scrollTop : amount},800);
}
});
上面的方法显然会animate
滚动,这是一个很好的接触,但如果你想要更基本的东西,你可以使用element.scrollIntoView(true);
1
在你的情况下,那将是:
...
onCollapse: function(){
// pass true to align with top of scroll area
// pass false to align with bottom of scroll area
$(this).siblings('h2:first').scrollIntoView(true)
}
...
1 https://developer.mozilla.org/en-US/docs/DOM/element.scrollIntoView
答案 1 :(得分:2)
我相信onCollapse想要在扩展器崩溃时调用一个函数。你也在寻找jQuery的.scrollTop方法而不是.scroll。 .scroll将处理程序附加到scroll事件。 请尝试以下
$('.expand_please').expander({
slicePoint: 1000,
widow: 2,
expandEffect: 'show',
userCollapseText: 'Read less',
expandText: 'Read more',
onCollapse: function () {
$('body').scrollTop($(this).closest('h2').offset().top);
}
});
更新:.closest()将不起作用,因为它通过匹配的元素集的祖先进行查找。在提供的HTML中,您实际上是在尝试选择一个兄弟,例如
$(this).siblings('h2').first().offset().top