Kirasiris
Kirasiris

Reputation: 550

Links to Top and Bottom with CSS

Can somebody tell me what's a good way to create to links for jumping around the page?

I already have the one for to-go-top and works just fine but I'm having some troubles when creating the one for the to-go-bottom.

This is what I'm trying to do(obviously I have a different image for the bottom one):

enter image description here

<a href="#Top" name="Top" id="Top" class="cd-top cd-is-visible cd-fade-out" >Top</a>
<a href="#Bot" name="Bot" id="Bot" class="cd-bottom cd-is-visible cd-fade-out">Bottom</a>

and this is the CSS that I'm using:

/******************** Back to top and/or bottom ********************/
.cd-top {
  display: inline-block;
  height: 40px;
  width: 40px;
  position: fixed;
  top: 45%;
  right: 10px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.05);
  /* image replacement properties */
  overflow: hidden;
  text-indent: 100%;
  white-space: nowrap;
  background: #03a400 url(images/cd-top-arrow.svg) no-repeat center 50%;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: opacity .3s 0s, visibility 0s .3s;
  -moz-transition: opacity .3s 0s, visibility 0s .3s;
  transition: opacity .3s 0s, visibility 0s .3s;
}

.cd-top.cd-is-visible, .cd-top.cd-fade-out, .no-touch .cd-top:hover {
  -webkit-transition: opacity .3s 0s, visibility 0s 0s;
  -moz-transition: opacity .3s 0s, visibility 0s 0s;
  transition: opacity .3s 0s, visibility 0s 0s;
}
.cd-top.cd-is-visible {
  /* the button becomes visible */
  visibility: visible;
  opacity: 63;
}
.cd-top.cd-fade-out {
  /* if the user keeps scrolling down, the button is out of focus and becomes less visible */
  /*    opacity: .5; */
}
.cd-top:hover {
  background-color: #489148;
  opacity: 1;
}

.cd-bottom {
  display: inline-block;
  height: 40px;
  width: 40px;
  position: fixed;
  bottom: 45%;
  right: 10px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.05);
  /* image replacement properties */
  overflow: hidden;
  text-indent: 100%;
  white-space: nowrap;
  background: #03a400 url(images/cd-bottom-arrow.png) no-repeat center 50%;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: opacity .3s 0s, visibility 0s .3s;
  -moz-transition: opacity .3s 0s, visibility 0s .3s;
  transition: opacity .3s 0s, visibility 0s .3s;
}

Here is the Javascript that I'm using:

;jQuery(document).ready(function($){
    // browser window scroll (in pixels) after which the "back to top" link is shown
    var offset = 300,
        //browser window scroll (in pixels) after which the "back to top" link opacity is reduced
        offset_opacity = 1200,
        //duration of the top scrolling animation (in ms)
        scroll_top_duration = 700,
        //grab the "back to top" link
        $back_to_top = $('.cd-top');

        //grab the "back to bottom" link
        $back_to_bottom = $('.cd-bottom');      

    //hide or show the "back to top" link
    $(window).scroll(function(){
        ( $(this).scrollTop() > offset ) ? $back_to_top.addClass('cd-is-visible') : $back_to_top.removeClass('cd-is-visible cd-fade-out');
        if( $(this).scrollTop() > offset_opacity ) {
            $back_to_top.addClass('cd-fade-out');
        }
    });

    //smooth scroll to top
    $back_to_top.on('click', function(event){
        event.preventDefault();
        $('body,html').animate({
            scrollTop: 0 ,
            }, scroll_top_duration
        );
    });

    //hide or show the "back to bottom" link
    $(window).scroll(function(){
        ( $(this).scrollBottom() > offset ) ? $back_to_bottom.addClass('cd-is-visible') : $back_to_bottom.removeClass('cd-is-visible cd-fade-out');
        if( $(this).scrollBottom() > offset_opacity ) {
            $back_to_bottom.addClass('cd-fade-out');
        }
    });

    //smooth scroll to bottom
    $back_to_bottom.on('click', function(event){
        event.preventDefault();
        $('body,html').animate({
            scrollTop: 0 ,
            }, scroll_top_duration
        );
    });

});

For some reason I cannot make the second button appear on the screen.If somebody can tell me a better approach or tell where's my error I would be mora than grateful

Thanks in advance.

Upvotes: 0

Views: 878

Answers (1)

Jack
Jack

Reputation: 9388

Edit:

Clicking button isn't working because you've set scrollTop to 0. If you update it to the height of the page, it works. Here's an updated fiddle with a scrollable page: http://jsfiddle.net/twvn1z3s/7/


Assuming this is your entire CSS - You need to make small tweaks to your CSS. For instance, you define:

.cd-top.cd-is-visible where you set opacity/visibility, but not for the bottom button.

Modify the old rule to:

.cd-top.cd-is-visible,
.cd-bottom.cd-is-visible{
    /* the button becomes visible */
    visibility: visible;
    opacity: 1;
}

And it will appear. Once the bottom button is visible, you'll need to tweak the positioning of the buttons so they don't overlap (as they both have their offsets set to values that cause a slight overlap) - I set top to 30% here: http://jsfiddle.net/twvn1z3s/2/

Upvotes: 2

Related Questions