14

No matter what method I use to detect scrolling on the page the event is triggered twice. Please see the code for the different methods I have tried.

<body onmousewheel="alert('Why are you alerting twice?')"> 

or

<script src="js/jquery-1.8.3.min.js"></script> <script> $(window).scroll(function(){ alert("Why are you alerting twice?"); }); </script> 

or

window.onscroll = please_scroll; function please_scroll() { alert("Why are you alerting twice?"); } 

I have even tried using $.debounce.

In case it is of any use I will explain what I am trying to do: When the user scrolls the wheel either up or down, the page will animate the scroll to the next full width content div. I have code that is successfully doing this onclick of my menu, but I would also like it to happen as the user scrolls, essentially auto assisting them with scrolling to each part of my page. This is the function I currently have for scrolling:

function scrollTo(id){ // Scroll $('html,body').animate({scrollTop: $("#"+id).offset().top - 110},'slow',function(){ animation_active = "false"; }); } 
2
  • firstly, should be: window.onscroll = please_scroll; Secondly, you shouldn't use alert to debug event Commented Feb 25, 2014 at 15:17
  • well the mousewheel and other hids like the apple mouses can trigger scroll events more often when being used. you have to use a timeout for that Commented Feb 25, 2014 at 15:20

1 Answer 1

19

many devices can trigger scroll events which appear to happen once more often. simply use a timeout for that:

var timeout; $(window).scroll(function() { clearTimeout(timeout); timeout = setTimeout(function() { // do your stuff }, 50); }); 

you can play with the value 50, i recommend something between 50 and 150.

Sign up to request clarification or add additional context in comments.

4 Comments

I just spent 4 hours trying to debug this and you seem to have resolved my issues straight up. Wow. Thanks!
LOL me too! I did not think a timeout would be needed, my question: stackoverflow.com/questions/32383804/…
Working but with delay!, not immediate
@WantToDo decrease the 50 to whatever floats your boat

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.