2017-02-20 39 views
0

我有一些代码使用jQuery的scrollTop(0)方法,它在Chrome(版本56.0.2924.87)上无法正常工作。jQuery滚动到顶部冻结,如果调用中间滚动

我的代码设置其执行以下2秒超时:

  • 滚动到屏幕的顶部。
  • 取消隐藏具有100%宽度和高度的div并请求用户完成某些操作。
  • 将类添加到设置为overflow: hidden的html标记中。
  • 一旦用户完成操作,它将删除类并隐藏div,以便它们可以继续滚动。

这是工作可靠的Firefox。

在Chrome上,如果在用户滚动时执行2秒超时而而不是,则按预期工作。但是,如果在用户处于滚动中间时调用2秒超时,它似乎会冻结。

我已经创建了包含所有代码的this Plunker。如果您在内联演示窗口中进行测试,则不会发生该问题,您需要单击单独窗口中的预览(代码演示中的蓝色按钮右上角)。

在我的演示,这是什么情况,如果超时运行,而我积极滚动:

enter image description here

这是如果执行超时会发生什么,而我向下滚动(中间滚动): enter image description here

即使用户当前正在页面上滚动,如何在Chrome上可靠地进行此项工作?

回答

1

为什么在显示时看不到div。当在滚动隐藏的滚动条和页面顶部的div apper中间调用事件时,但视口不在顶部位置。如果您将div CSS位置属性设置为固定,它将起作用,css position。 position属性的固定值是相对于视口的。

所以这个问题不在你的jQuery代码上。

code here 

plunker

而且检查:

  • 滚动到屏幕顶部。

  • 一旦用户完成操作,它将删除类并隐藏div,以便它们可以继续滚动。

我认为最好的,如果他们能继续在以前的位置穿。

0

如果你添加stop(),那么怎么办?在.scrollTop(0)之前?

$('html,body,document').stop().scrollTop(0); 

我不是专家,但可能值得一试。

希望它有帮助。