<div class="inner">
<div class="block js-fade fade-in">その場でフェードイン</div>
<div class="block js-fade fade-in-down">上から下にフェードイン</div>
<div class="block js-fade fade-in-up">下から上にフェードイン</div>
<div class="block js-fade fade-in-left">左から右にフェードイン</div>
<div class="block js-fade fade-in-right">右から左にフェードイン</div>
</div>
/* インナーのCSS */
.inner {
max-width: calc(1000px + 20px * 2);
width: 100%;
margin: 300px auto 500px;
}
/* ブロックのCSS */
.block {
display: flex;
justify-content: center;
align-items: center;
aspect-ratio: 1 / 1;
max-width: 300px;
max-height: 300px;
width: 100%;
height: 100%;
margin: 0 auto;
background-color: #5cc0ef;
font-size: 16px;
line-height: 1.5;
color: #fff;
opacity: 0;
&:not(:first-child) {
margin-top: 300px;
}
}
/* フェードインのCSS */
.active.fade-in {
/* 1s でアニメーションスピードを管理 */
animation: fadeIn 1s ease-in forwards;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.active.fade-in-down {
opacity: 0;
/* 1s でアニメーションスピードを管理 */
animation: fadeInDown 1s ease-in forwards;
}
@keyframes fadeInDown {
from {
opacity: 0;
/* transform でアニメーションの方向を管理 */
transform:translate3d(0, -70px, 0);
}
to {
opacity: 1;
transform:translateZ(0);
}
}
.active.fade-in-up {
opacity: 0;
/* 1s でアニメーションスピードを管理 */
animation: fadeInUp 1s ease-in forwards;
}
@keyframes fadeInUp {
from {
opacity: 0;
/* transform でアニメーションの方向を管理 */
transform:translate3d(0, 70px, 0);
}
to {
opacity: 1;
transform:translateZ(0);
}
}
.active.fade-in-left {
opacity: 0;
/* 1s でアニメーションスピードを管理 */
animation: fadeInLeft 1s ease-in forwards;
}
@keyframes fadeInLeft {
from {
opacity: 0;
/* transform でアニメーションの方向を管理 */
transform:translate3d(-70px, 0, 0);
}
to {
opacity: 1;
transform:translateZ(0);
}
}
.active.fade-in-right {
opacity: 0;
/* 1s でアニメーションスピードを管理 */
animation: fadeInRight 1s ease-in forwards;
}
@keyframes fadeInRight {
from {
opacity: 0;
/* transform でアニメーションの方向を管理 */
transform:translate3d(70px, 0, 0);
}
to {
opacity: 1;
transform:translateZ(0);
}
}
View Compiled
jQuery(function ($) {
/* ウィンドウをスクロールしたら実行 */
$(window).scroll(function() {
/* 指定した要素(.js-fade)を繰り返し実行 */
$('.js-fade').each(function() {
/* .js-fade の場所を取得 */
var target = $(this).offset().top;
/* 現在のスクロール位置を取得 */
var scroll = $(window).scrollTop();
/* 画面(ブラウザ)の縦の長さを取得 */
var screen_height = $(window).height();
/* 対象の要素が基準を超えたらフェードイン */
if (scroll > target - screen_height / 2 - 100){
$(this).addClass('active');
}
});
});
});
This Pen doesn't use any external CSS resources.