< 記事共通の特徴 >

全デモのソース一式がダウンロード可能です。
ソース一式はローカル環境ですぐに使える構成になっています。

CSSによるスムーズモーションの実現

animateを使わないスムーズモーション02
(直線出現:画面内出現)


animateを使わないスムーズモーション01
(直線出現)

直線出現モーション

解説

用途・理由

animateによるモーションは少し処理が重いため、CSSによりモーションを設定したい。

CSSによるスムーズモーション

CSSではスムーズモーションの実行はできないため、
javascriptにより class/id を追加/削除し、適用されるスタイルを変更することにより実行します。
(参考:「CSSによるスムーズモーションの実現」)

※ hover時は、javascriptを使用せずにスムーズモーションを行えますが
※ 対象要素に適用されるCSSが変化(例:sample_class -> sample_class + sample_class:hover)することが起因であり
※ CSS自身が実行している訳ではありません。

CSSによる直線移動

CSSによる直線移動は、下記2つのスタイル定義を用いて実現できます。
.move_from_left {
  /* 移動にかける時間を設定(登場の速度) */
  -webkit-transition: all 1.6s ease;
  transition:         all 1.6s ease;
  /* 移動後の位置 */
  position: relative;
  left: 0;
}
.move_from_left.ready {
  /* 移動前の位置 */
  left: -1000px;
}
※ transition / -webkit-transition により変化を 0/1 ではなく、漸次的にすることで、スムーズモーションを実現しています。
※ transition / -webkit-transition と同様の設定が2つあるのは、複数ブラウザ対応のためです。
※ transition / -webkit-transition の一方の設定は各ブラウザで無視されます。

スムーズモーションの実行

Javascriptにより適用されるスタイルを変化させることでモーションを実行します。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
  $('.block_design').removeClass('ready');
});
</script>
※ ready クラスを削除することにより、left の設定値が -1000 から 0 になります。
※ この変化が transition / -webkit-transition 設定により漸次的に行われることから、左から右へのスムーズな動きになります。

画面外から登場させる時の注意点

画面の外から移動させて登場させたい場合は、overflow:hidden を設定するべきです。
この設定を行わない場合、登場前の要素が見えてしまう事があります。
html, body {
  width: 100%;
  overflow: hidden;
}
※ 試しにデモを取得して、overflow設定を消してみてください。かなり横長のページになります。

まとめ

上記ポイントをまとめると、下記のようなコードになります。
<!DOCTYPE html>
<head>
  <title>animateを使わないスムーズモーション1(直線出現1)</title>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<style>
  html, body {
    width: 100%;
    overflow: hidden;
  }
  .move_from_left {
    /* 移動にかける時間を設定(登場の速度) */
    -webkit-transition: all 1.6s ease;
    transition:         all 1.6s ease;
    /* 移動後の位置 */
    position: relative;
    left: 0;
  }
  .move_from_left.ready {
    /* 移動前の位置 */
    left: -1000px;
  }
</style>
</head>
<body>
  <div class="move_from_left ready">-- Hello --&gt</div><!-- move_from_left -->
</body>
<script>
$(document).ready(function() {
  $('.move_from_left').removeClass('ready');
});
</script>
</html>

CSSによるスムーズモーションの実現

animateを使わないスムーズモーション02
(直線出現:画面内出現)