How to animate an anchor call?

0

The links are inside a div and the buttons that call them are outside this div, everything is working, I would just like to put an animation in this transition. P.S. The transition is horizontal.

<style type="text/css">

    html, body {margin: 0; padding: 0;}

#telass{
top: 100px;
left: 0;
width:100%;
height: 80%;
overflow-x: scroll;
overflow-y: hidden;
white-space: nowrap;

display: inline-block;
vertical-align: middle;
position: absolute;

}

.tela{
  top: 100px;
  width: 100%;
  height: 200px;
  display: inline-block;
  vertical-align: top;
  height: 1000px;
}
#tela1{
    background-color: red;
}
#tela2{
    background-color: blue;
}
#tela3{
    background-color: yellow;
}

</style>

<script src="js.js"></script>

<a href="#tela1">Tela 1</a>
<a href="#tela2">Tela 2</a>
<a href="#tela3"> Tela 3</a>
<div id="telass">
 <div id = "tela1" class="tela">
 <p>Tela 1</p>

 </div>
 <div id = "tela2" class="tela">
 <p>Tela 2</p>

 </div>
 <div id = "tela3" class="tela">
    <h1>Tela 3</h1>
 </div>

    
asked by anonymous 28.06.2016 / 22:01

3 answers

4
  

This answer was so interesting, visually, that I will just translate it.

You can do this using only CSS, as suggested by @ Bacco.

To do this, you should use : target , which is meant to connect with some element of your page. This definition is somewhat familiar with the anchor definition as well.

The example I liked is this:

/*
 *Styling
 */

html,body {
        width: 100%;
        height: 100%;
        position: relative; 
}
body {
    overflow: hidden;
}

header {
    background: #fff; 
    position: fixed; 
    left: 0; top: 0; 
    width:100%;
    height: 3.5rem;
    z-index: 10; 
}

nav {
    width: 100%;
    padding-top: 0.5rem;
}

nav ul {
    list-style: none;
    width: inherit; 
    margin: 0; 
}


ul li:nth-child( 3n + 1), #main .panel:nth-child( 3n + 1) {
    background: rgb( 0, 180, 255 );
}

ul li:nth-child( 3n + 2), #main .panel:nth-child( 3n + 2) {
    background: rgb( 255, 65, 180 );
}

ul li:nth-child( 3n + 3), #main .panel:nth-child( 3n + 3) {
    background: rgb( 0, 255, 180 );
}

ul li {
    display: inline-block; 
    margin: 0 8px;
    margin: 0 0.5rem;
    padding: 5px 8px;
    padding: 0.3rem 0.5rem;
    border-radius: 2px; 
    line-height: 1.5;
}

ul li a {
    color: #fff;
    text-decoration: none;
}

.panel {
    width: 100%;
    height: 500px;
    z-index:0; 
    -webkit-transform: translateZ( 0 );
    transform: translateZ( 0 );
    -webkit-transition: -webkit-transform 0.6s ease-in-out;
    transition: transform 0.6s ease-in-out;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;

}

.panel h1 {
    font-family: sans-serif;
    font-size: 64px;
    font-size: 4rem;
    color: #fff;
    position:relative;
    line-height: 200px;
    top: 33%;
    text-align: center;
    margin: 0;
}

/*
 *Scrolling
 */

a[ id= "servicios" ]:target ~ #main article.panel {
    -webkit-transform: translateY( 0px);
    transform: translateY( 0px );
}

a[ id= "galeria" ]:target ~ #main article.panel {
    -webkit-transform: translateY( -500px );
    transform: translateY( -500px );
}
a[ id= "contacto" ]:target ~ #main article.panel {
    -webkit-transform: translateY( -1000px );
    transform: translateY( -1000px );
}
<a id="servicios"></a>
    <a id="galeria"></a>
    <a id="contacto"></a>
    <header class="nav">
        <nav>
            <ul>
                <li><a href="#servicios"> Servicios </a> </li>
                <li><a href="#galeria"> Galeria </a> </li>
                <li><a href="#contacto">Contacta  nos </a> </li>
            </ul>
        </nav>
    </header>

    <section id="main">
        <article class="panel" id="servicios">
            <h1> Nuestros Servicios</h1>
        </article>

        <article class="panel" id="galeria">
            <h1> Mustra de nuestro trabajos</h1>
        </article>

        <article class="panel" id="contacto">
            <h1> Pongamonos en contacto</h1>
        </article>
    </section>

And to change the effect of the animation, you can use CSS Transform as shown in the example

Original JSFiddle sample.

    
29.06.2016 / 21:59
0

Good "an animation" is quite comprehensive ... But come on, for a side animation you basically need the library jquery 1.5.2 , and put the script below before closing the body ... this will do with that when clicking the links, a smooth scroll occurs between them:

<script>// <![CDATA[
  $(document).ready(function() {
  function filterPath(string) {
  return string
  .replace(/^\//,'')
  .replace(/(index|default).[a-zA-Z]{3,4}$/,'')
  .replace(/\/$/,'');
  }
  $('a[href*=#]').each(function() {
  if ( filterPath(location.pathname) == filterPath(this.pathname)
  && location.hostname == this.hostname
  && this.hash.replace(/#/,'') ) {
  var $targetId = $(this.hash), $targetAnchor = $('[name=' + this.hash.slice(1) +']');
  var $target = $targetId.length ? $targetId : $targetAnchor.length ? $targetAnchor : false;
  if ($target) {
  var targetOffset = $target.offset().left;
  $(this).click(function() {
  $('#telass').animate({scrollLeft: targetOffset}, 300);
  return false;
  });
  }
  }
  });
  }); // ]]>
  </script>
    
29.06.2016 / 19:47
0

I made a sample method to animate the anchor, see: HTML:

<a href="#tela1" class="btn">Tela 1</a>
<a href="#tela2" class="btn">Tela 2</a>
<a href="#tela3" class="btn">Tela 3</a>

JavaScript:

$(function(){
    $('.btn').on('click', function (event) {
      var el = $(this).attr('href');
      var tela = [];
      var larg = $(el).width();
       tela['#tela1'] = 0;
       for (var i=2; i <= $('#telass div').length; i++) {
          tela['#tela'+i] = larg;
          larg += larg;
       }
     $('#telass').animate({scrollLeft:tela[el]}, 800);
     });
});

See JSFiddle Running

    
29.06.2016 / 21:40