这个功能运行良好。它将主体滚动到所需容器的偏移量
function scrolear(destino){
var stop = $(destino).offset().top;
var delay = 1000;
$('body').animate({scrollTop: stop}, delay);
return false;
}
但在 Firefox 中则不然。为什么?
-EDIT-
为了处理接受的答案中的双触发器,我建议在动画之前停止该元素:
$('body,html').stop(true,true).animate({scrollTop: stop}, delay);
Firefox 将溢出置于html
级别,除非特别设计以不同的方式表现。
要使其在 Firefox 中工作,请使用
$('body,html').animate( ... );
工作示例 http://jsfiddle.net/4etct/
CSS 解决方案是设置以下样式:
html { overflow: hidden; height: 100%; }
body { overflow: auto; height: 100%; }
我认为 JS 解决方案的侵入性最小。
Update
下面的很多讨论都集中在以下事实:动画scrollTop
两个元素的组合将导致回调被调用两次。浏览器检测功能已被建议,随后又被弃用,其中一些功能可以说是相当牵强的。
如果回调是幂等的并且不需要大量的计算能力,那么触发它两次可能完全不是问题。如果回调的多次调用确实是一个问题,并且如果您想避免功能检测,则强制回调仅从回调中运行一次可能会更直接:
function runOnce(fn) {
var count = 0;
return function() {
if(++count == 1)
fn.apply(this, arguments);
};
};
$('body, html').animate({ scrollTop: stop }, delay, runOnce(function() {
console.log('scroll complete');
}));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)