【问题标题】:How to loop scroll event如何循环滚动事件
【发布时间】:2018-05-19 11:10:30
【问题描述】:

我的问题可能很简单。如何循环这个函数? 现在,滚动事件只工作一次。我正在寻找如何启用 else 功能的解决方案(平滑滚动从红色 div 到蓝色 div)

这里是js代码:

var o = true;

if (o === true) {
$('div').scroll(function () {
        if(o){
      $('div').animate({
          scrollTop: $("#red").offset().top
      }, 1000);
      o=false;
     }
});
} 

else {
$('div').scroll(function () {
        if(o === false ){
      $('div').animate({
          scrollTop: $("#blue").offset().top
      }, 1000);
      o=true;
     document.write(o);
    } 
});
}

HTML + CSS + JS: https://jsfiddle.net/g2jafoay/6/

我在寻找什么:当您向下滚动时,会有动画将您带到红色 div。所以,我想添加动画,在向上滚动后将您带到蓝色 div

【问题讨论】:

  • 您能否更具体地说明您想要达到的目标?
  • 在向一个滚动事件添加 if/else 后,我的函数的工作方式如下:jsfiddle.net/g2jafoay/7 我要查找的内容:当您向下滚动时,会有动画将您带到红色 div。所以,我想添加动画,在向上滚动后将您带到蓝色 div。

标签: javascript jquery


【解决方案1】:

记住代码何时执行。即:何时到达。

我们可以将您的代码简化为

let a = true;
if (a) {
  functionA();
} else {
  functionB();
}

显然,当我们到达这段代码时,functionA 将被执行。我们永远不会执行functionB,因为,这个代码永远不会再次执行。


使用此信息并查看您的代码,我们发现您只是附加了第一个滚动处理程序,该处理程序具有滚动到红色 div 的行为。滚动处理程序在每个滚动事件上执行。如果你能像现在这样成功地执行你的代码,你最终会得到无限数量的滚动处理程序尝试滚动到红色 div 和无限数量的滚动处理程序尝试滚动到蓝色 div。

我们要做的是只创建一个滚动处理程序,其中包含处理程序中的所有相关逻辑。或者,换句话说,决定是在滚动处理程序而不是周围的代码中做出的。

let onRed = true;
$('div').on('scroll', () => {
  let scrollTarget;
  if (onRed) {
    scrollTarget = $('#blue');
  } else {
    scrollTarget = $('#red');
  }

  $('div').animate({
    scrollTop: scrollTarget.offset().top
  }, 1000);
  onRed = !onRed;
});

【讨论】:

  • 感谢您的回答。我编辑了我的问题(为了更好地指定我在寻找什么)。在您的代码中,用户在滚动后失去了对此元素的控制。我正在寻找不同的东西。向下滚动后,动画将用户带到第二个 div。当用户向上滚动时,动画会将用户带到第一个 div。
  • 由于这不是最初的问题,我不会改变我的答案。但是,您可以找到第二个问题here 的所有信息。
  • 我知道如何确定滚动方向,我的问题不同。当我向下滚动时,我的函数被执行。在另一个滚动后移动到顶部的解决方案是什么?我认为最好的方法是在函数内部更改 var "o" (执行第一个函数时,全局变量从 true 更改为 false,因此第二个函数已准备好启动)但是如何做到这一点?
  • 请记住,我已将您链接到 wheel 事件。除此之外,就像我的回答一样使用onRed
猜你喜欢
  • 2014-12-04
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 2018-02-27
  • 2021-01-08
  • 2018-12-09
  • 1970-01-01
  • 2017-05-09
相关资源
最近更新 更多