I wish this helpful for you I don't think the delay function is the problem here. The thing that is missing in both of your queue callback is a call to the .dequeue() function to execute the next function in-line. Quoting the .queue() documentation,
it fixes the issue Just add stop() to the hide function $(this).stop().hide(); to stop the animation (fadeIn). Also you can add the checking if the element is in view on scroll so you don't have to fire the function all the time with the interval, only when the user scrolls.