Javascript 角度:如何继续在滚动事件上重置$timeout,否则$timeout将完成

Javascript 角度:如何继续在滚动事件上重置$timeout,否则$timeout将完成,javascript,jquery,html,css,angularjs,Javascript,Jquery,Html,Css,Angularjs,我正在开发一个小型控制器,它监视一个滚动事件,应用一个CSS类,并应用一个不同的CSS类。长话短说,我试图让滚动条拇指在你不滚动时消失,在你滚动时出现(就像iPhone上的滚动条拇指) 我在实施上有困难。我这样做的思想过程是: 1) On page load, set a $scope variable to false. 2) Watch for a scroll event on the div I want. 3) Once the scroll event starts, set th

我正在开发一个小型控制器,它监视一个滚动事件,应用一个CSS类,并应用一个不同的CSS类。长话短说,我试图让滚动条拇指在你不滚动时消失,在你滚动时出现(就像iPhone上的滚动条拇指)

我在实施上有困难。我这样做的思想过程是:

1) On page load, set a $scope variable to false. 
2) Watch for a scroll event on the div I want.
3) Once the scroll event starts, set the $scope variable to true. 
4) Keep on resetting the $timeout whenever a scroll event fires.
5) In the timeout function, set the $scope variable back to false if the $timeout finishes.
6) In the HTML, set an ng-class to watch for this $scope variable.
我觉得这听起来很简单,但我在实现它时遇到了很多麻烦,我不确定这是否只是我缺少的$timeout,或者我只是在兜圈子,还没有意识到这一点

这是我为它设置的控制器(实际工作的JSFIDLE链接在这堵代码墙下面):

我在这里设置了一个JSFiddle(),其中包含了我到目前为止所拥有的代码(希望它是不言自明的),并且非常感谢任何人提供的任何帮助/见解。谢谢大家!

角度不。。。要“重置”滚动超时,应通过以下方式执行:

var timer;
$('.container').on('scroll', function(event) {
  console.log('User is actually scrolling...');

  clearTimeout(timer);
  timer = setTimeout(function(){
    console.log('User finished scrolling.');
  },500);

});
它将替换这段代码:

$('.container').on('scroll', function(event) {
  $scope.actuallyScrolling = true;
  console.log('before checkScroll ', $scope.actuallyScrolling);
  checkScroll();
});
有棱角的不是。。。要“重置”滚动超时,应通过以下方式执行:

var timer;
$('.container').on('scroll', function(event) {
  console.log('User is actually scrolling...');

  clearTimeout(timer);
  timer = setTimeout(function(){
    console.log('User finished scrolling.');
  },500);

});
它将替换这段代码:

$('.container').on('scroll', function(event) {
  $scope.actuallyScrolling = true;
  console.log('before checkScroll ', $scope.actuallyScrolling);
  checkScroll();
});

这很有效。非常感谢。不过我很好奇,为什么我要做的就是声明一个名为timer的变量,然后对它运行clearTimeout?为什么在运行clearTimeout之前我不需要让timer成为setTimeout函数?当调用
clearTimeout()
时。。。如果传递的参数是一个
setTimeout()
,它将被清除。如果没有,就像第一次发生一样,什么都不会发生。它不会抛出错误。然后变量被定义为一个
setTimeout
来倒计时500毫秒。。。但在它执行回调之前,另一个滚动事件发生,计时器被清除。新的500毫秒倒计时开始。。。等等直到至少500毫秒内没有滚动事件发生。。。这就是回调函数最终执行的时候。啊,这是有道理的。非常感谢。校长很好。。。但是当您使用angular时,“angular或not”不是一件好事,因为您使用的是jquery,很多新手都会将jquery放入他们的angular代码中-而且基本代码是垃圾(其中包含jquery)。。所以我明白你为什么说这样做很公平。非常感谢。不过我很好奇,为什么我要做的就是声明一个名为timer的变量,然后对它运行clearTimeout?为什么在运行clearTimeout之前我不需要让timer成为setTimeout函数?当调用
clearTimeout()
时。。。如果传递的参数是一个
setTimeout()
,它将被清除。如果没有,就像第一次发生一样,什么都不会发生。它不会抛出错误。然后变量被定义为一个
setTimeout
来倒计时500毫秒。。。但在它执行回调之前,另一个滚动事件发生,计时器被清除。新的500毫秒倒计时开始。。。等等直到至少500毫秒内没有滚动事件发生。。。这就是回调函数最终执行的时候。啊,这是有道理的。非常感谢。校长很好。。。但是当您使用angular时,“angular或not”不是一件好事,因为您使用的是jquery,很多新手都会将jquery放入他们的angular代码中-而且基本代码是垃圾(其中包含jquery)。。所以我理解你为什么说这很公平