【プログラミング勉強】HTML/CSS/JavaScriptで画面内に入った要素をランダムな順番、ランダムな色で出現させるソースコードを紹介!

プログラミングを独学で勉強をされている方、初心者の方、基礎を学習している方にとって、実際に何かを作ることは、プログラミングスキルを向上させることに繋がります。当サイトでは、それらの方々や、プログラミング言語を何から学んだらいいの?という方におすすめの、HTML、CSS、JavaScriptを中心としたソースコードのデモを紹介しています。今回は、画面内に入った要素をランダムな順番、ランダムな色で出現させるソースコードを紹介します。

当記事を読むメリット

まずは、純粋なJavaScriptで実装されているので、jQueryなどの外部ライブラリの読み込みが不要なことです。
また、「画面内に入ってからアニメーションを発動」させたり、「アニメーションの発動を1回までにする」という技術は実際の案件でもよく使うので、その実装をすることもできます。
純粋なJavaScriptでの実装!
画面内に入ってからアニメーションを発動させる方法がわかる!
アニメーションの発動を1回までにする方法がわかる!

実装をした際の表示

HTMLとCSSで基本的なレイアウトを作り、JavaScriptを使って要素が画面内に入ってきた時に、アニメーションが発生するようにします。具体的には、15個の要素が最初非表示になっていて、画面内に入ってくると15個の四角形の要素が1つずつランダムにフェードインします。さらに要素の色もページを読み込む度に違う色で表示されます。実際にページを再読み込みして確かめてみてください!

ランダムな順番でフェードイン

スクロールして要素がフェードインしてくるというサイトはよく見るのですが、要素がランダムにフェードインしてくるというサイトはあまり見たことがないので、ランダムな順番でフェードインしてくるというのは読者の目を引くかもしれません。

要素のランダムな色の変化

四角形が現れる際、それぞれにランダムな色が割り当てられます。JavaScriptで Math.random() 関数を使用して、色をランダムに生成し、それを四角形に適用します。この処理により、ページを読み込む度に毎回異なる色彩を見せるので、読者に新鮮な印象を与える効果があります。

ソースコード例

ここでは、上記で説明した動的なウェブページを作成するための基本的なソースコードを示します。

HTMLソースコード例

表示される要素(.flex-item)は15個ありますが、ここは好きな数にしてみてください。

<div class="flex-container">
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
	<div class="flex-item"></div>
</div>

CSSソースコード例

padding-topとwidthの部分を同じにすることで画面の幅が変わっても正方形を保つことができるようにしています。

.flex-container {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}
.flex-item {
    padding-top: calc(20% - 8px);
    width: calc(20% - 8px);
    opacity: 0;
    transition: all 0.5s;
}

JavaScriptソースコード例

document.addEventListener('DOMContentLoaded', () => {
    // 全ての「.flex-item」を取得し「items」という変数に格納
    const items = document.querySelectorAll('.flex-item');
    // checkVisibilityという関数を定義
    const checkVisibility = () => {
        // それぞれの「.flex-item」に対して
        items.forEach(item => {
            // それぞれの「.flex-item」が画面内にあり、まだアニメーションが適用されていない(.flex-itemに.animatedというクラスがない)場合
            if (item.getBoundingClientRect().top < window.innerHeight && !item.classList.contains('animated')) {
                // それぞれの「.flex-item」にランダムな背景色を指定
                item.style.backgroundColor = `rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`;
                
                // ランダムな時間差でそれぞれの「.flex-item」を表示していく
                setTimeout(() => {
                    item.style.opacity = 1;
                }, Math.random() * 1000);
                // 「.animated」クラスを付与し、再びアニメーションが発生しないようにする
                item.classList.add('animated'); 
            }
        });
    };

    // スクロールイベントとロードイベントそれぞれで関数を発動する
    window.addEventListener('scroll', checkVisibility);
    window.addEventListener('load', checkVisibility);
});

まとめ

今回は要素がランダムな順番、ランダムな色で出現するという内容でしたが、ランダムの色の部分を無しにして、画像をランダムに表示させる、また、メニューの項目をランダムに表示させる、というふうにしても良さそうですね!

いろいろ応用ができるような内容にもなっていますので、ぜひ今回の記事を参考に、ご自身のスキルアップに繋げていただければと思います!

>お問い合わせはこちら

お問い合わせはこちら