我想平滑地向下滚动。我不想为此写一个函数——特别是如果jQuery已经有了一个。
当前回答
尼克的回答很好,默认设置也很好,但你可以通过完成所有可选设置来更全面地控制滚动。
下面是它在API中的样子:
.animate( properties [, duration] [, easing] [, complete] )
所以你可以这样做:
.animate(
{scrollTop:'300px'},
300,
swing,
function(){
alert(animation complete! - your custom code here!);
}
)
这是jQuery .animate函数的api页面:http://api.jquery.com/animate/
其他回答
如果你想在页面的末尾向下移动(所以你不需要向下滚动到底部),你可以使用:
$('body').animate({ scrollTop: $(document).height() });
尼克的回答很管用。在animate()调用中指定complete()函数时要小心,因为它将被执行两次,因为你声明了两个选择器(html和body)。
$("html, body").animate(
{ scrollTop: "300px" },
{
complete : function(){
alert('this alert will popup twice');
}
}
);
下面是避免双重回调的方法。
var completeCalled = false;
$("html, body").animate(
{ scrollTop: "300px" },
{
complete : function(){
if(!completeCalled){
completeCalled = true;
alert('this alert will popup once');
}
}
}
);
你可以使用jQuery动画滚动页面与特定的持续时间:
$("html, body").animate({scrollTop: "1024px"}, 5000);
其中1024px是滚动偏移量,5000是以毫秒为单位的动画持续时间。
试试scrollTo插件。
在其他例子中,动画总是从页面刷新后的页面顶部开始。
我通过不直接动画css来修复这个问题,而是调用window.scrollTo();每一步:
$({myScrollTop:window.pageYOffset}).animate({myScrollTop:300}, {
duration: 600,
easing: 'swing',
step: function(val) {
window.scrollTo(0, val);
}
});
这也解决了html vs body的问题,因为它使用跨浏览器的JavaScript。
关于jQuery的animate函数的更多信息,请访问http://james.padolsey.com/javascript/fun-with-jquerys-animate/。
推荐文章
- Angular ng-repeat反过来
- 如何获得请求路径与表达请求对象
- 使用Handlebars 'each'循环访问父对象的属性
- 盎格鲁- ngcloak / ngg展示blink元素
- 禁用表单自动提交按钮单击
- 节点和错误:EMFILE,打开的文件太多
- JavaScript函数中的默认参数值
- 使用RegExp.exec从字符串中提取所有匹配项
- 测试一个值是奇数还是偶数
- 空数组似乎同时等于true和false
- 它是可能的动画scrollTop与jQuery?
- 我需要哪个选择器来选择一个文本选项?
- 如何清除下拉框中的所有选项?
- 如何添加ID属性Html.BeginForm()在asp.net mvc?
- 基于原型的继承与基于类的继承