スクロールダウンで見せるBefore After変化!Webページを動的に演出しよう

スクロールダウンを促すための下向き矢印と、
JavaScriptで実装するbefore after効果を組み合わせたサンプルをいくつか紹介します。
これらのサンプルはブログで紹介する際に、コードスニペットやデモとして利用できます。

矢印の組み合わせ

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Scroll Down Before After</title>
    <style>
        body {
            font-family: Arial, sans-serif;
        }
        .scroll-down-arrow {
            position: absolute;
            bottom: 20px;
            left: 50%;
            transform: translateX(-50%);
            font-size: 24px;
            color: #333;
            cursor: pointer;
            animation: bounce 1.5s infinite;
        }
        @keyframes bounce {
            0%, 20%, 50%, 80%, 100% {
                transform: translateY(0);
            }
            40% {
                transform: translateY(-10px);
            }
            60% {
                transform: translateY(-5px);
            }
        }
        .image-container {
            position: relative;
            width: 100%;
            max-width: 600px;
            margin: 50px auto;
        }
        .image {
            width: 100%;
            position: absolute;
            top: 0;
            left: 0;
            transition: opacity 0.5s;
        }
        .after {
            opacity: 0;
        }
        .before {
            opacity: 1;
        }
    </style>
</head>
<body>

<div class="image-container">
    <img src="before.jpg" alt="Before Image" class="image before">
    <img src="after.jpg" alt="After Image" class="image after">
</div>
<div class="scroll-down-arrow">&#x25BC;</div>

<script>
    const arrow = document.querySelector('.scroll-down-arrow');
    const afterImage = document.querySelector('.after');

    arrow.addEventListener('click', () => {
        window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' });
        afterImage.style.opacity = 1;
    });

    window.addEventListener('scroll', () => {
        if (window.scrollY > 200) {
            afterImage.style.opacity = 1;
        } else {
            afterImage.style.opacity = 0;
        }
    });
</script>

</body>
</html>

フェードイン・アウトする矢印

このサンプルでは、矢印がフェードイン・アウトすることで、視覚的にスクロールを促します。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Scroll Down Animation</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f5f5f5;
}
.scroll-indicator {
text-align: center;
color: #333;
}
.scroll-text {
font-size: 24px;
margin-bottom: 10px;
}
.arrow {
font-size: 32px;
animation: fadeInOut 2s infinite;
}
@keyframes fadeInOut {
0%, 100% {
opacity: 0;
}
50% {
opacity: 1;
}
}
</style>
</head>
<body>

<div class="scroll-indicator">
<div class="scroll-text">Scroll</div>
<div class="arrow">&#x25BC;</div>
</div>

</body>
</html>

左右に揺れる矢印

こちらのサンプルでは、矢印が左右に揺れるアニメーションを通じてスクロールを促します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Scroll Down Animation</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #f5f5f5;
        }
        .scroll-indicator {
            text-align: center;
            color: #333;
        }
        .scroll-text {
            font-size: 24px;
            margin-bottom: 10px;
        }
        .arrow {
            font-size: 32px;
            animation: shake 1.5s infinite;
        }
        @keyframes shake {
            0%, 100% {
                transform: translateX(0);
            }
            25% {
                transform: translateX(-10px);
            }
            75% {
                transform: translateX(10px);
            }
        }
    </style>
</head>
<body>

<div class="scroll-indicator">
    <div class="scroll-text">Scroll</div>
    <div class="arrow">&#x25BC;</div>
</div>

</body>
</html>

解説

フェードイン・アウトする矢印

@keyframes fadeInOut

矢印がフェードイン(不透明度が0から1へ)、フェードアウト(不透明度が1から0へ)するアニメーション。

arrow

矢印のアニメーションを適用

左右に揺れる矢印

@keyframes shake

矢印が左右に揺れるアニメーション。矢印が左に10px、右に10px動く。

arrow

矢印のアニメーションを適用。

縦に連続した矢印のアニメーション

このサンプルでは、複数の矢印が連続して縦に表示され、
下向きに順番にフェードイン・アウトするアニメーションを実現します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Scroll Down Animation</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #f5f5f5;
        }
        .scroll-indicator {
            text-align: center;
            color: #333;
        }
        .arrow {
            font-size: 32px;
            margin: 5px 0;
            opacity: 0;
            animation: fadeInOut 2s infinite;
        }
        .arrow:nth-child(2) {
            animation-delay: 0.2s;
        }
        .arrow:nth-child(3) {
            animation-delay: 0.4s;
        }
        @keyframes fadeInOut {
            0%, 100% {
                opacity: 0;
            }
            50% {
                opacity: 1;
            }
        }
    </style>
</head>
<body>

<div class="scroll-indicator">
    <div class="arrow">&#x25BC;</div>
    <div class="arrow">&#x25BC;</div>
    <div class="arrow">&#x25BC;</div>
</div>

</body>
</html>

矢印が下から上へ移動するアニメーション

このサンプルでは、矢印が下から上へ移動することで、視覚的にスクロールを促します。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Scroll Down Animation</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f5f5f5;
}
.scroll-indicator {
text-align: center;
color: #333;
}
.scroll-text {
font-size: 24px;
margin-bottom: 10px;
}
.arrow {
font-size: 32px;
animation: moveUpDown 1.5s infinite;
}
@keyframes moveUpDown {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-20px);
}
}
</style>
</head>
<body>

<div class="scroll-indicator">
<div class="scroll-text">Scroll</div>
<div class="arrow">&#x25BC;</div>
</div>

</body>
</html>

矢印が上下にスライドするアニメーション

このサンプルでは、矢印が上下にスライドするアニメーションを使って、ユーザーにスクロールを促します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Scroll Down Animation</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #f5f5f5;
        }
        .scroll-indicator {
            text-align: center;
            color: #333;
        }
        .scroll-text {
            font-size: 24px;
            margin-bottom: 10px;
        }
        .arrow {
            font-size: 32px;
            animation: slideUpDown 1s infinite;
        }
        @keyframes slideUpDown {
            0%, 100% {
                transform: translateY(0);
            }
            50% {
                transform: translateY(10px);
            }
        }
    </style>
</head>
<body>

<div class="scroll-indicator">
    <div class="scroll-text">Scroll</div>
    <div class="arrow">&#x25BC;</div>
</div>

</body>
</html>

解説

フェードイン・アウトする縦長矢印

矢印が一つずつフェードイン・アウトし、下向きにスクロールを促すアニメーション。

下から上へ移動する矢印

矢印が下から上へ移動することで、スクロールの方向を示します。

上下にスライドする矢印

矢印が上下に動くことで、視覚的にスクロールを誘導します。

まとめ

これらのサンプルは、ウェブページ上でスクロールを誘導するための効果的な方法を示しています。
デザインやアニメーションのパラメータを調整することで、
ウェブサイトのスタイルやテーマに合わせたカスタマイズが可能です。