我有一种情况,我需要页面不能滚动超过某个点(我的英雄设置为100 an,用户应该根本不能滚动),然后点击一个按钮,滚动保护被禁用,然后用户会自动平滑地向下滚动到一个锚链接直接下面(基本上向下滚动100 an或整个窗口的高度)。我需要一个流畅的滚动动画,而不是只是一个快速跳跃。
我试过尝试使用以下代码的变体,但没有结果。到目前为止,它确实是错误的,跳来跳去,当您重新加载页面时,正文溢出被设置为隐藏,但是窗口的位置并不总是在屏幕的顶部,所以您仍然可以看到一些下面的折叠内容,但仍然不能滚动。
function() {
function smoothScroll(){
windowHeight = $('window').height();
$('html, body').stop.animate({scrollTop: windowHeight}, slow);
}
$('.bottom-nav').on('click', '.fold-trigger', function(event) {
$('.home').css('overflow', 'visible');
setTimeout(smoothScroll(), 1000);
});
};
发布于 2016-09-07 15:45:40
固定码
function smoothScroll(){
windowHeight = $(window).height();
$('html, body').stop().animate({scrollTop: windowHeight}, "slow");
}
$('.bottom-nav').on('click', '.fold-trigger', function(event) {
$('.home').css('overflow', 'visible');
setTimeout(smoothScroll(), 1000);
});
固定小提琴:https://jsfiddle.net/yxkvnymu/2/
解释
您正在尝试通过执行$('window').height()
来获取窗口高度,它正在搜索一个不存在的“窗口”DOM元素。您希望使用$(window).height()
(注意在窗口周围省略引号),因为window
不是DOM节点,它是一个对象。
此外,您使用的是具有多个错误的$('html, body').stop.animate({scrollTop: windowHeight}, slow);
。.stop
无效,因为从$('html, body')
返回的NodeList上的stop
属性是要调用的函数。您应该使用$('html, body').stop()
。
另外,animate
部分引用变量slow
。jQuery的动画函数将"slow"
作为字符串,因此这一行应该按如下方式编写:
.animate({scrollTop: windowHeight}, "slow");
请注意,其中包含了引号,因为我们希望将"slow"
的字符串值传递给jQuery的动画函数,而不是变量slow
。
最后,您在匿名函数中包围了所有代码,这似乎是不必要的。
https://stackoverflow.com/questions/39374120
复制相似问题