为什么页面在使用scrollBy()时会振动?

时间:2016-03-02 10:20:50

标签: javascript html css angularjs

我正在angularjs中创建一个指令以实现平滑滚动..但我面临一些奇怪的问题,每当我点击任何菜单项时页面开始振动而且它也不会上升。它只适用于向下..:p:)....它有点搞笑,我无法解决这个问题。 这是我的代码......
FIDDLE LINK https://jsfiddle.net/a6at8js6/1/

HTML

template< class F, class... Args>
auto invoke(F&& f, Args&&... args)
{
  return std::forward<F>(f)(std::forward<Args>(args)...);
}

CSS

<div ng-app="mainApp" ng-controller="mainCtrl">
<ul class="left">
  <li ng-repeat="menu in menus"  class="list-group-item" scroll srcelem="head{{$index+1}}"><a href="">{{menu}}</a></li>
</ul>

<ul class="right">
  <li ng-repeat="p in para" id="head{{$index+1}}">{{p}}</li>
</ul>
</div>

JS

.left{
  float:left;
  position:fixed;
}
.right{
  float:right;
  width:500px;
}

.right li{
  height:500px;
}

2 个答案:

答案 0 :(得分:1)

你的间隔条件太严格了,如果你的偏移不是像10或15这样的圆形,那么它会变成+5和-5,如果它是13,它会被卡在无限循环中。

修改你的===条件以接受更多,如+3和-3,不仅是完全相同的偏移量,而是将它作为第一个条件。

答案 1 :(得分:0)

您跳跃的时间间隔不允许window.pageYOffset === divHeight(target_elem)条件评估为真。在条件中的步骤中更改步长或因子。

如果绝对必须使用相等,请尝试添加差异误差范围。我还建议您使用setTimeout代替setInterval