1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【スライド】画像をアニメーションで切り替えたい!オシャレに!【縦 横 斜め】

Last updated at Posted at 2022-01-24

画像をアニメーションで切り替えたい!オシャレに! の詳細記事となります。

今回は【縦 横 斜めにスライドする】アニメーションです。
実際の挙動は以下のようになります。(以下は横にスライドする挙動です。)

CSSの mask-image を利用しての実装になります。
早速実装です!

1. HTMLの追加

<div class="animate js-animate" data-is-animated="false">
  <div class="animate_item" data-animate-number="1">
    <img src="image_1-1.jpg">
  </div>
  <div class="animate_item" data-animate-number="2">
    <img src="image_1-2.jpg">
  </div>
</div>

まずHTMLで、 切り替え前の画像 切り替え後の画像 を用意します。
それぞれ、上なのか下なのかがわかるようにdata属性を割り当てその外側にも状態管理用のdata属性を記載します。

image_1-1
image_1-1.jpg

image_1-2
image_1-2.jpg

2. CSSの追加

.animate {
  position: relative;
}

.animate_item {
  position: absolute;
}

[data-is-animated="true"] [data-animate-number="1"] img,
[data-is-animated="false"] [data-animate-number="2"] img {
  position: relative;
  z-index: 2;
  animation: slide-animation 0.6s;
  mask-image: linear-gradient(90deg,#000 0%,#000 0%,transparent 0%,transparent 100%);
  -webkit-mask-image: linear-gradient(90deg,#000 0%,#000 0%,transparent 0%,transparent 100%);
  mask-size: auto 100%;
  mask-repeat: no-repeat;
  mask-position: 0 0;
  animation-fill-mode: forwards;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-position: 0 0;
}

[data-is-animated="true"] [data-animate-number="2"] img,
[data-is-animated="false"] [data-animate-number="1"] img {
  position: relative;
  z-index: 1;
  animation: inherit;
}

CSSではそれぞれの 切り替え前の画像 切り替え後の画像 に対して、表示するときのアニメーションなどの記載をします。

(slide-animation... どこに書いてあります...?)

@keyframes slide-animation {
  @for $i from 0 to 100 {
    $i% {
      mask-image: linear-gradient(90deg,#000 0%,#000 $i%,transparent $i%,transparent 100%);
      -webkit-mask-image: linear-gradient(90deg,#000 0%,#000 $i%,transparent $i%,transparent 100%);
    }
  }
}

普通に書くと4行×100のとてつもないキーフレームを書くことになるので、postcssなど、CSSプリプロセッサを利用してeachやforで書くと良いと思います。

横ではなく、縦・斜めにするには

linear-gradient の指定を変更します。
現在 90deg となっている箇所を変更することで調整可能です。

斜め


完成!

画像を可愛い猫にしてみました。
こんなにオシャレに!(猫がかわいい)画像切り替えが!(アゴを乗せるのが好きみたいです...)簡単に!(ラグドールちゃんですね)できちゃいました!(かわいいなぁ...)

スライダー系のプラグインでは1番目と2番目に表示される画像の位置は、スライドしながらスライドすると思います。(語彙力)
こちらは位置はそのままでスライドするのです。(語彙力)
なので、少し違った見え方になって良いですね。

あとは必要に応じてCSSでのレイアウトや、JavaScriptでのタイミングを調整すれば色々な見せ方ができると思います。

最後に

mask-position | Can I use...
実案件で利用できるかは上記を踏まえてご利用ください。

その他のアニメーション切り替え記事はこちら

【ブラシ】画像をアニメーションで切り替えたい!オシャレに!【塗りつぶし】
【斜め】画像をアニメーションで切り替えたい!オシャレに!【グリッド】
【フリップ】画像をアニメーションで切り替えたい!オシャレに!【くるっと】

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?