javascript – 分离并重新连接鼠标滚轮事件监听器不重置滚动惯性

前端之家收集整理的这篇文章主要介绍了javascript – 分离并重新连接鼠标滚轮事件监听器不重置滚动惯性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 jquery-mousewheel插件来触发一个功能.

当我调用moveit时,我会分离监听器并等待动画完成,然后重新连接监听器.

问题是,当我重新连接它时,鼠标滚轮插件仍在听一些鼠标/触控板的惯性,并反复调用moveit.

我想在我的特定情况下,对函数调用进行去抖动或限制是不好的解决方案,因为惯性仍然存在,并且我还希望立即附加侦听器以用于其他可能的moveit调用.

有没有办法通过完全重置鼠标滚轮事件来“消除惯性”,而不是仅仅拆卸它?

  1. $(document).ready(function () {
  2.  
  3. var tween;
  4. var slide = $('#slide');
  5.  
  6. function bodyListen () {
  7. $('body').on('mousewheel.bodyscroll',function (e,delta,deltaX,deltaY) {
  8. e.preventDefault();
  9. $('body').off('mousewheel.bodyscroll');
  10. moveit();
  11. });
  12. }
  13.  
  14. function moveit () {
  15. tween = TweenMax.to(slide,0.8,{
  16. marginLeft: 300,onComplete: bodyListen
  17. });
  18. }
  19.  
  20. bodyListen();
  21. });

解决方法

在处理事件(或与DOM相关的任何操作)时使用标志,beacuse事件监听器通常可以表现为异步函数.
  1. $(document).ready(function () {
  2.  
  3. var tween;
  4. var slide = $('#slide');
  5. var flag = true;
  6.  
  7. function bodyListen () {
  8. $('body').on('mousewheel.bodyscroll',deltaY) {
  9. if(flag){
  10. e.preventDefault();
  11. flag = false;
  12. moveit();
  13. }
  14. });
  15. }
  16.  
  17. function moveit () {
  18. tween = TweenMax.to(slide,onComplete: function(){
  19. flag = true;
  20. }
  21. });
  22. }
  23.  
  24. bodyListen();
  25. });

猜你在找的JavaScript相关文章