The task is to add a class with a delay to the elements that are in the utility of the parent block. If you just scroll down without stopping. That looks supposedly good. But if it stops and scrolls again, the script begins to be reworked from the first element. How to make it continue to work out, and did not start to work out again? Sample code below:
$('.viewport').scroll( function(){ $('.element').each( function(i, e){ var bottom_of_object = $(this).position().top + $(this).outerHeight(), bottom_of_window = $('.viewport').scrollTop() + $('.viewport').height(); if( bottom_of_window > bottom_of_object){ setTimeout(function() { $(e).css('opacity', '1'); }, i * 1000); } }); }); * { box-sizing: border-box } body { background: #95B8D1; font-family: "Pt Sans", sans-serif; } .wrapper { max-width: 600px; margin: 50px auto; min-height: 100vh } .viewport { height: 400px; overflow-x: hidden; overflow-y: auto; color: #747474; background: #fff; font-size: 18px; padding: 20px; } .element { width: 45%; float: left; margin: 5px; opacity: 0; transition: 500ms; } <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="wrapper"> <div class="viewport"> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> <div class="element">Lorem ipsum dolor sit amet, id ius aperiri reformidans mediocritatem. Ei cum quando vocibus, id numquam labores veritus usu.</div> </div> </div>
scrollevent runs multiple times. Add the second lineconsole.log('0');and look in the console. Your function is executed dozens of times. - Jean-Claudeeachmethod on thescroll, which iterates through all the elements. I guess at thescrollevent it is necessary to check the visibility of the elements, it is visible - not to touch, not visible - to show. - Jean-Claude