Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Show div on scrollDown after 800px

Tags:

html

jquery

css

I want to show a hidden div when scrolling down after 800px from the top of the page. By now I have this example, but I guess it needs modification in order to achive what I am looking for.

EDIT:

[And when scrollUp and the height is less the 800px, this div should hide]

HTML:

<div class="bottomMenu">   <!-- content --> </div> 

css:

.bottomMenu {     width: 100%;     height: 60px;     border-top: 1px solid #000;     position: fixed;     bottom: 0px;     z-index: 100;     opacity: 0; } 

jQuery:

$(document).ready(function() {     $(window).scroll( function(){         $('.bottomMenu').each( function(i){             var bottom_of_object = $(this).position().top + $(this).outerHeight();             var bottom_of_window = $(window).scrollTop() + $(window).height();             if( bottom_of_window > bottom_of_object ){                 $(this).animate({'opacity':'1'},500);             }         });      }); }); 

Here is a Fiddle of my current code.

like image 768
AndrewS Avatar asked Apr 03 '13 21:04

AndrewS


People also ask

How do you check if an element is visible after scrolling?

To know whether the element is fully visible in viewport, you will need to check whether top >= 0, and bottom is less than the screen height. In a similar way you can also check for partial visibility, top is less than screen height and bottom >= 0. The Javascript code could be written as : window.

How do I fix a div on top when scrolling CSS?

Just replace #sticky_div's_name_here with the name of your div, i.e. if your div was <div id="example"> you would put #example { position: sticky; top: 0; } .

How do I display the content while scrolling in HTML?

First wrap whatever your text or content that you want to show on scroll, in one div so that you can show hide the div depending upon the scroll. Write two classes for your target div. Hope it will solve your problem.


2 Answers

You've got a few things going on there. One, why a class? Do you actually have multiple of these on the page? The CSS suggests you can't. If not you should use an ID - it's faster to select both in CSS and jQuery:

<div id=bottomMenu>You read it all.</div> 

Second you've got a few crazy things going on in that CSS - in particular the z-index is supposed to just be a number, not measured in pixels. It specifies what layer this tag is on, where each higher number is closer to the user (or put another way, on top of/occluding tags with lower z-indexes).

The animation you're trying to do is basically .fadeIn(), so just set the div to display: none; initially and use .fadeIn() to animate it:

$('#bottomMenu').fadeIn(2000); 

.fadeIn() works by first doing display: (whatever the proper display property is for the tag), opacity: 0, then gradually ratcheting up the opacity.

Full working example:

http://jsfiddle.net/b9chris/sMyfT/

CSS:

#bottomMenu {     display: none;     position: fixed;     left: 0; bottom: 0;     width: 100%; height: 60px;     border-top: 1px solid #000;     background: #fff;     z-index: 1; } 

JS:

var $win = $(window);  function checkScroll() {     if ($win.scrollTop() > 100) {         $win.off('scroll', checkScroll);         $('#bottomMenu').fadeIn(2000);     } }  $win.scroll(checkScroll); 
like image 44
Chris Moschini Avatar answered Nov 16 '22 00:11

Chris Moschini


If you want to show a div after scrolling a number of pixels:

Working Example

$(document).scroll(function() {   var y = $(this).scrollTop();   if (y > 800) {     $('.bottomMenu').fadeIn();   } else {     $('.bottomMenu').fadeOut();   } }); 

$(document).scroll(function() {   var y = $(this).scrollTop();   if (y > 800) {     $('.bottomMenu').fadeIn();   } else {     $('.bottomMenu').fadeOut();   } });
body {   height: 1600px; } .bottomMenu {   display: none;   position: fixed;   bottom: 0;   width: 100%;   height: 60px;   border-top: 1px solid #000;   background: red;   z-index: 1; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <p>Scroll down... </p> <div class="bottomMenu"></div>

Its simple, but effective.

Documentation for .scroll()
Documentation for .scrollTop()


If you want to show a div after scrolling a number of pixels,

without jQuery:

Working Example

myID = document.getElementById("myID");  var myScrollFunc = function() {   var y = window.scrollY;   if (y >= 800) {     myID.className = "bottomMenu show"   } else {     myID.className = "bottomMenu hide"   } };  window.addEventListener("scroll", myScrollFunc); 

myID = document.getElementById("myID");  var myScrollFunc = function() {   var y = window.scrollY;   if (y >= 800) {     myID.className = "bottomMenu show"   } else {     myID.className = "bottomMenu hide"   } };  window.addEventListener("scroll", myScrollFunc);
body {   height: 2000px; } .bottomMenu {   position: fixed;   bottom: 0;   width: 100%;   height: 60px;   border-top: 1px solid #000;   background: red;   z-index: 1;   transition: all 1s; } .hide {   opacity: 0;   left: -100%; } .show {   opacity: 1;   left: 0; }
<div id="myID" class="bottomMenu hide"></div>

Documentation for .scrollY
Documentation for .className
Documentation for .addEventListener


If you want to show an element after scrolling to it:

Working Example

$('h1').each(function () {     var y = $(document).scrollTop();     var t = $(this).parent().offset().top;     if (y > t) {         $(this).fadeIn();     } else {         $(this).fadeOut();     } }); 

$(document).scroll(function() {   //Show element after user scrolls 800px   var y = $(this).scrollTop();   if (y > 800) {     $('.bottomMenu').fadeIn();   } else {     $('.bottomMenu').fadeOut();   }    // Show element after user scrolls past    // the top edge of its parent    $('h1').each(function() {     var t = $(this).parent().offset().top;     if (y > t) {       $(this).fadeIn();     } else {       $(this).fadeOut();     }   }); });
body {   height: 1600px; } .bottomMenu {   display: none;   position: fixed;   bottom: 0;   width: 100%;   height: 60px;   border-top: 1px solid #000;   background: red;   z-index: 1; } .scrollPast {   width: 100%;   height: 150px;   background: blue;   position: relative;   top: 50px;   margin: 20px 0; } h1 {   display: none;   position: absolute;   bottom: 0; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <p>Scroll Down...</p> <div class="scrollPast">   <h1>I fade in when you scroll to my parent</h1>  </div> <div class="scrollPast">   <h1>I fade in when you scroll to my parent</h1>  </div> <div class="scrollPast">   <h1>I fade in when you scroll to my parent</h1>  </div> <div class="bottomMenu">I fade in when you scroll past 800px</div>

Note that you can't get the offset of elements set to display: none;, grab the offset of the element's parent instead.

Documentation for .each()
Documentation for .parent()
Documentation for .offset()


If you want to have a nav or div stick or dock to the top of the page once you scroll to it and unstick/undock when you scroll back up:

Working Example

$(document).scroll(function () {     //stick nav to top of page     var y = $(this).scrollTop();     var navWrap = $('#navWrap').offset().top;     if (y > navWrap) {         $('nav').addClass('sticky');     } else {         $('nav').removeClass('sticky');     } });  #navWrap {     height:70px } nav {     height: 70px;     background:gray; } .sticky {     position: fixed;     top:0; } 

$(document).scroll(function () {     //stick nav to top of page     var y = $(this).scrollTop();     var navWrap = $('#navWrap').offset().top;     if (y > navWrap) {         $('nav').addClass('sticky');     } else {         $('nav').removeClass('sticky');     } });
body {     height:1600px;     margin:0; } #navWrap {     height:70px } nav {     height: 70px;     background:gray; } .sticky {     position: fixed;     top:0; } h1 {     margin: 0; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <p>Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. Summus brains sit, morbo vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. Hi mindless mortuis soulless creaturas,   imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. Qui animated corpse, cricket bat max brucks terribilem incessu zomby. The voodoo sacerdos flesh eater, suscitat mortuos comedere carnem virus. Zonbi tattered for solum   oculi eorum defunctis go lum cerebro. Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.</p> <div id="navWrap">   <nav>     <h1>I stick to the top when you scroll down and unstick when you scroll up to my original position</h1>    </nav> </div> <p>Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. Summus brains sit, morbo vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. Hi mindless mortuis soulless creaturas,   imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. Qui animated corpse, cricket bat max brucks terribilem incessu zomby. The voodoo sacerdos flesh eater, suscitat mortuos comedere carnem virus. Zonbi tattered for solum   oculi eorum defunctis go lum cerebro. Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.</p>
like image 103
apaul Avatar answered Nov 15 '22 23:11

apaul