JQuery . scrolltop()和.offset().首要问题:它是如何运作的?如何解决
JQuery .scrollTop() and .offset().top issue: how it work? How to solve?
我想实现一些平滑的滚动,所以我做了这个脚本:
$('a').click(function(){
var sclink = $(this).attr('href');
$('.menu').animate({
scrollTop: $(sclink).offset().top
}, 500);
return false;
});
问题?当我点击"a"时,offset.top()
值在另一个奇怪的值中变化,并在它们之间切换?为什么会发生这种情况,我该如何解决?
我认为问题在于scroll.top()
以另一种方式获得价值…jsfiddle.net/9SDLw/2950/
$('a').click(function(){
var sclink = $(this).attr('href');
$('.menu').animate({
scrollTop: $(sclink).position().top
}, 500);
logit('Anchor: '+sclink+'; Offset top value: <b>'+$(sclink).offset().top+'</b>')
return false;
});
用position
代替offset
原因是offset
是相对于视口,因此它看起来像你已经滚动太远,但这是因为你的视口区域的顶部被你的布局遮蔽,所以offset
实际上不是你想要的,相反,position
是。
您还应该在调用animate
之前添加对stop
的引用,以确保如果用户快速连续单击该行为是预期的(动画队列实际上是刷新的)
考虑到这一点,你的HTML还需要一些工作-例如,可点击的链接没有关闭标签。
将滚动代码更改为:
$('.menu').stop(true,true).animate({
scrollTop: $(sclink).position().top
}, 500);
演示小提琴
相关文章:
- 如何解决Yii中的页面刷新问题
- 测试Angular Service解决错误回调中的promise
- 如何解决Access Control Allow Origin错误
- 如何解决这种情况下的非法调用类型错误
- 简单的ES6承诺问题-交换解决和拒绝参数
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- iPad虚拟键盘-哪一个-javasctript解决方案
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- 如何解决“;错误所请求的URL返回500-内部服务器错误”;
- 如何逃离<脚本>jquery html()中的标记.我使用了innerHTML和outerHTML来解决这个
- 如何解决'窗口未定义'终端上的节点JS出错
- Angularjs:如何在使用'解决'在$routeProvider中
- 可以't解决Javascript错误
- “createImageData()”和“new ImageData(()”有何不同
- AJAX HTTP基本身份验证解决方案
- 为什么不'我的窗口滚动事件根本没有启动.其他答案没有解决问题
- 如何解决此错误
- 在chrome web商店中打开时,是否有允许执行内容/后台脚本的解决方案
- CORS故障无法解决jquery,laravel5.2
- JQuery . scrolltop()和.offset().首要问题:它是如何运作的?如何解决