LoginSignup
0
0

More than 1 year has passed since last update.

スクロールで下からフェードインする動きを実装したら、ページ内リンクがずれる

Posted at

JQueryでページスクロールしたら、要素がふわっとフェードインするJQueryを実装した。

HTML
<div class="fadeIn">test</div>
<div class="fadeIn">test</div>
scroll.js
 $(window).on('load scroll', function (){

    var box = $('.fadeIn');
    var animated = 'animated';

    box.each(function(){

      var boxOffset = $(this).offset().top;
      var scrollPos = $(window).scrollTop();
      var wh = $(window).height();

      //画面内のどの位置で処理を実行するかで「100」の値を変更
      if(scrollPos > boxOffset - wh + 100 ){
        $(this).addClass(animated);
      }
    });
  });
CSS
.fadeIn {
  transition: 1.5s;
  opacity: 0;
  transform:translatey(100px);
}

.fadeIn.animated {
  opacity: 1;
  transform:translatey(0px);
}

これで、HTMLでfadeInのクラスが付与された「test」という文字が
スクロールするとふわっと下からフェードインするようになります。
JQueryでスクロールするとfadeInというクラスにanimatedというクラスが追加されるようにしてあるので、
CSSで指定している●pxの部分が、フェードインする動きの幅になるイメージです。

transformを使った方が良い

transform:translatey(●px);ですが、
最初はmargin-topにしていました。

CSS
.fadeIn {
  transition: 1.5s;
  opacity: 0;
  margin-top: 100px;
}

.fadeIn.animated {
  opacity: 1;
  margin-top: 0px;
}

こんな感じで。

そしたら、ページ内リンクの位置がズレる・・・!
margin-topであった100pxがスクロールすることでanimatedクラスが追加されて、なくなってしまうからですね。。

transformはあまり使ったことありませんでしたが
勉強になりました◎

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0