现在我正在使用它:
$('#go-to-top').each(function(){
$(this).click(function(){
$('html').animate({ scrollTop: 0 }, 'slow'); return true;
});
});
在Chrome中不起作用,在Opera中我得到一个小闪烁:浏览器立即滚动到顶部,然后回到底部,然后它开始慢慢地滚动回顶部,就像应该的那样。
有更好的方法吗?
答案 0 :(得分:76)
您从点击功能返回true
,因此无法阻止默认的浏览器行为(即导航到go-to-top
锚点。正如Mark所说,使用:
$('html,body').animate({ scrollTop: 0 }, 'slow');
所以你的代码现在应该是这样的:
$('#go-to-top').each(function(){
$(this).click(function(){
$('html,body').animate({ scrollTop: 0 }, 'slow');
return false;
});
});
答案 1 :(得分:5)
为了让它在歌剧中发挥作用,answer证明是有帮助的。
将其与click()
$(this).click(function() {
$(window.opera ? 'html' : 'html, body').animate({
scrollTop: 0
}, 'slow');
});
<强> Code example on jsfiddle 强>
旁注如果你正在使用.each()
所做的就是分配一个点击处理程序,你不需要迭代该集合就可以简化为:
$('#go-to-top').click(function(){
$(window.opera ? 'html' : 'html, body').animate({
scrollTop: 0
}, 'slow');
});
此外,如果有多个ID为#go-to-top
的元素,您的标记无效,请尝试将其切换为类.go-to-top
答案 2 :(得分:1)
可能像
$('body').animate({scrollTop:0}, 'slow');
以及html。
编辑&gt;
$('#go-to-top').each(function(){
$(this).click(function(){
$('html').animate({ scrollTop: 0 }, 'slow'); return true;
$('body').animate({ scrollTop: 0 }, 'slow'); return true;
$('document').animate({ scrollTop: 0 }, 'slow'); return true;
$('window').animate({ scrollTop: 0 }, 'slow'); return true;
});
});
应涵盖所有浏览器!
答案 3 :(得分:1)
如果您愿意,可以在此处查看jsFiddle: http://jsfiddle.net/H7RFU/
我希望这有点帮助,虽然这不是一个真正的答案。
如果我所做的不是你的html等,请更新并添加。
致以最诚挚的问候,
基督教
警告:我之前没有使用过jsFiddle的保存功能所以我不知道它保存了多长时间。
答案 4 :(得分:1)
$(window).animate({ scrollTop: 0 }, 'slow');
它适用于跨浏览器
答案 5 :(得分:0)
这将适用于所有浏览器。它避免了网址上的哈希标记,因此,顺利滚动就完成了!
$('#back-top a[href*=#]:not([href=#])').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top
}, 1000);
return false;
}
}
});
答案 6 :(得分:0)
我正在使用它,这也很简单
$(document).ready(function(e) {
var a = 400,
t = 1200,
l = 700,
s = e(".scrool-top");
e(window).scroll(function() {
e(this).scrollTop() > a ? s.addClass("scrool-is-visible") : s.removeClass("scrool-is-visible scrool-fade-out"), e(this).scrollTop() > t && s.addClass("scrool-fade-out")
}), s.on("click", function(a) {
a.preventDefault(), e("body,html").animate({
scrollTop: 0
}, l)
})
})
答案 7 :(得分:0)
我有两种解决方案:平滑滚动和平滑按钮。
在禁用JavaScript的情况下,它只是页面底部指向锚点top
的链接。
(#
的href可能非常不稳定。)
启用JavaScript:
href
属性并添加click
处理程序以平滑滚动。
(使URL和浏览器历史记录保持整洁,并且在滚动功能中不需要return
或preventDefault
)HTML
<body>
<a name="top"></a>
...
<div id="scrolltotop" style="display:block;text-align:right">
<a href="#top" title="scroll to top"><img src="scrolltotop.png" alt="scroll to top"></a>
</div>
</body>
jQuery
function scrolltotop_display()
{
var el=$('#scrolltotop');
if((window.pageYOffset||document.documentElement.scrollTop)>window.innerHeight)
{ if(!el.is(':visible')) { el.stop(true, true).fadeIn(); } }
else { if(!el.is(':animated')) { el.stop(true, true).fadeOut(); }}
}
function scrolltotop_position()
{
var el=$('#scrolltotop');
el.css('top', window.innerHeight-100);
el.css('left', window.innerWidth-100);
scrolltotop_display();
}
$(window).on('load', function(){
$('#scrolltotop').css('display', 'none');
$('#scrollToTop').css('position', 'fixed');
scrolltotop_position();
$('#scrollToTop a').removeAttr('href');
$('#scrollToTop a').on('click', function(){$('html, body').animate({scrollTop:0}, 500);});
});
$(window).on('scroll', scrolltotop_display);
$(window).on('resize', scrolltotop_position);