ニュースティッカーは、短いテキスト情報をスクロール表示するUI要素です。
ウェブページやテレビ画面などでよく見られ、ニュースの見出しや重要な情報を短いテキストで表示し、一定の時間間隔で順次切り替えて表示します。
今回は、そんなニュースティッカーをJavaScriptで作ってみます。
.setInterval()
JavaScriptの .setInterval()
は、一定の遅延間隔を置いて関数やコードスニペットを繰り返し呼び出すメソッドです。
// カウンターの初期値を0に設定
let counter = 0;
// 1秒ごとにカウンターをインクリメントする関数
function incrementCounter() {
counter++;
console.log(counter);
}
// 1秒ごとにincrementCounter()関数を実行する
const intervalID = setInterval(incrementCounter, 1000);
// 5秒後にsetIntervalを停止する
setTimeout(function() {
clearInterval(intervalID);
}, 5000);
例えば、1000ミリ秒(1秒)ごとに関数を実行するように設定することができます。
この機能は、定期的な更新やタイマーの作成など、周期的な処理を実行する場合に便利なメソッドで、.setInterval()
は一度呼び出されると、手動で停止するまで繰り返し処理を実行し続けます。
また、.setInterval()
の戻り値である「intervalID」を使用して、後で .clearInterval()
を呼び出すことで繰り返し処理を停止することができます。
ニュースティッカーのサンプル
早速、ニュースティッカーのサンプルです。
ニュースが自動的にスライド表示され、ユーザーが進むボタンと戻るボタンでニュースを切り替えることができます。
省スペースで、複数の情報を効果的に伝えることができます。
実装の手順と方法
コードの詳細の前に、実装の手順と方法について解説していきます。
まずは、HTMLを記述します。
<div id="news-ticker-container">
<div id="news-ticker">
<!-- ここにニュースが表示されます -->
</div>
<div id="controls">
<button id="prev">←</button>
<button id="next">→</button>
</div>
</div>
次に、JavaScriptのコードを記述します。
コードは <body>〜</body>
で、</body>
の閉じタグ(クロージングタグ)の前に記述しましょう。
var newsList = [
'ニュース1: 最新の情報です',
'ニュース2: 重要な発表です',
'ニュース3: 新商品のリリース情報です',
'ニュース4: 4つ目のニュースです',
];
var newsTicker = document.getElementById('news-ticker');
var newsIndex = 0;
function updateNewsTicker() {
// インデックスに対応するニュースを表示
newsTicker.textContent = newsList[newsIndex];
// 下から上にスライドするアニメーションを適用
newsTicker.style.animation = 'slide-up 0.5s ease-in-out';
}
// 初回表示のために最初のニュースを表示
updateNewsTicker();
// 5秒ごとにニュースを更新
var intervalId = setInterval(function() {
// アニメーションをリセット
newsTicker.style.animation = '';
// インデックスを更新 (もし最後のニュースだった場合は最初に戻る)
newsIndex = (newsIndex + 1) % newsList.length;
// 少し待ってからニュースを更新(アニメーションのリセットが完了するのを待つため)
setTimeout(updateNewsTicker, 100);
}, 5000);
// 進むボタンがクリックされたときの処理
document.getElementById('next').addEventListener('click', function() {
// アニメーションをリセット
newsTicker.style.animation = '';
// インデックスを更新 (もし最後のニュースだった場合は最初に戻る)
newsIndex = (newsIndex + 1) % newsList.length;
// 少し待ってからニュースを更新(アニメーションのリセットが完了するのを待つため)
setTimeout(updateNewsTicker, 100);
// インターバルをリセット
clearInterval(intervalId);
intervalId = setInterval(function() {
newsTicker.style.animation = '';
newsIndex = (newsIndex + 1) % newsList.length;
setTimeout(updateNewsTicker, 100);
}, 5000);
});
// 戻るボタンがクリックされたときの処理
document.getElementById('prev').addEventListener('click', function() {
// アニメーションをリセット
newsTicker.style.animation = '';
// インデックスを更新 (もし最初のニュースだった場合は最後に戻る)
newsIndex = (newsIndex - 1 + newsList.length) % newsList.length;
// 少し待ってからニュースを更新(アニメーションのリセットが完了するのを待つため)
setTimeout(updateNewsTicker, 100);
// インターバルをリセット
clearInterval(intervalId);
intervalId = setInterval(function() {
newsTicker.style.animation = '';
newsIndex = (newsIndex + 1) % newsList.length;
setTimeout(updateNewsTicker, 100);
}, 5000);
});
最後にCSSを書きましょう。これで見た目を整えたら完了です。
#news-ticker-container {
position: relative; /* コンテナの位置を設定 */
overflow: hidden; /* コンテンツがコンテナを超える場合に非表示にする */
height: 40px; /* コンテナの高さを設定 */
display: flex; /* フレックスボックスモデルを適用 */
justify-content: space-between; /* 主軸方向に空間を挿入して要素間隔を最大にする */
align-items: center; /* 交差軸方向に要素を中央揃えにする */
}
#news-ticker {
position: absolute; /* ティッカーの位置を設定 */
transition: transform 0.8s ease-in-out; /* transformプロパティの変化を0.8秒間で緩やかに適用する */
}
#controls {
position: absolute; /* コントロールの位置を設定 */
right: 0; /* コントロールを右側に配置 */
display: flex; /* フレックスボックスモデルを適用 */
align-items: center; /* 交差軸方向に要素を中央揃えにする */
justify-content: flex-end; /* 主軸の終端に要素を配置 */
gap: 10px; /* 各要素間のギャップを設定 */
}
#controls button {
height: 30px; /* ボタンの高さを設定 */
line-height: 30px; /* ボタン内のテキストの行高を設定 */
display: flex; /* フレックスボックスモデルを適用 */
align-items: center; /* 交差軸方向に要素を中央揃えにする */
}
@keyframes slide-up {
from {
transform: translateY(100%); /* アニメーション開始時、要素を下(Y軸方向)に100%移動 */
}
to {
transform: translateY(0); /* アニメーション終了時、要素の位置を初期状態(Y軸方向0%)に戻す */
}
}
これで完成です。
ざっくりとしたコードの解説
コードは、HTML・JavaScript・CSSの3種類です。ざっくりですが、順に解説していきます。
HTML
ニュースティッカーの表示と操作を行うための要素を含んでいます。
id名で「news-ticker-container」を持つ要素は、ニュースティッカー全体を包括するコンテナ要素です。この要素にはニュースティッカー本体と操作ボタンが含まれます。
そして、「news-ticker」の要素は、実際のニュースが表示される領域で、「controls」は、ニュースティッカーの操作を制御するための要素を包括します。ここには「前へ」や「次へ」といったボタンが配置しています。
<div id="news-ticker-container">
<div id="news-ticker">
<!-- ここにニュースが表示されます -->
</div>
<div id="controls">
<button id="prev">←</button>
<button id="next">→</button>
</div>
</div>
2つの button
タグは、ニュースティッカーの操作ボタンで、左向きと右向きの矢印が表示され、それぞれ前のニュースや次のニュースを表示させます。
JavaScript
変数newsList
には、表示するニュースのリストを格納し、newsTicker
はニュースを表示する要素を取得して、newsIndex
は現在表示されているニュースのインデックスを示します。
updateNewsTicker()
関数は、ニュースティッカーを更新するための関数です。指定されたインデックスのニュースを表示し、スライドアニメーションを適用します。
最初にupdateNewsTicker()
関数を呼び出して初回のニュース表示を行います。その後、setInterval()
を使用して5秒ごとにニュースを更新します。更新のたびにアニメーションをリセットし、インデックスを更新して次のニュースを表示します。
また、進むボタンと戻るボタンのクリックイベントに対してそれぞれの処理が定義されています。ボタンがクリックされると、アニメーションがリセットされ、対応する方向にインデックスが変更されます。そして、ニュースを更新し、インターバルもリセットして繰り返し処理が続けられます。
var newsList = [
'ニュース1: 最新の情報です',
'ニュース2: 重要な発表です',
'ニュース3: 新商品のリリース情報です',
'ニュース4: 4つ目のニュースです',
];
var newsTicker = document.getElementById('news-ticker');
var newsIndex = 0;
function updateNewsTicker() {
// インデックスに対応するニュースを表示
newsTicker.textContent = newsList[newsIndex];
// 下から上にスライドするアニメーションを適用
newsTicker.style.animation = 'slide-up 0.5s ease-in-out';
}
// 初回表示のために最初のニュースを表示
updateNewsTicker();
// 5秒ごとにニュースを更新
var intervalId = setInterval(function() {
// アニメーションをリセット
newsTicker.style.animation = '';
// インデックスを更新 (もし最後のニュースだった場合は最初に戻る)
newsIndex = (newsIndex + 1) % newsList.length;
// 少し待ってからニュースを更新(アニメーションのリセットが完了するのを待つため)
setTimeout(updateNewsTicker, 100);
}, 5000);
// 進むボタンがクリックされたときの処理
document.getElementById('next').addEventListener('click', function() {
// アニメーションをリセット
newsTicker.style.animation = '';
// インデックスを更新 (もし最後のニュースだった場合は最初に戻る)
newsIndex = (newsIndex + 1) % newsList.length;
// 少し待ってからニュースを更新(アニメーションのリセットが完了するのを待つため)
setTimeout(updateNewsTicker, 100);
// インターバルをリセット
clearInterval(intervalId);
intervalId = setInterval(function() {
newsTicker.style.animation = '';
newsIndex = (newsIndex + 1) % newsList.length;
setTimeout(updateNewsTicker, 100);
}, 5000);
});
// 戻るボタンがクリックされたときの処理
document.getElementById('prev').addEventListener('click', function() {
// アニメーションをリセット
newsTicker.style.animation = '';
// インデックスを更新 (もし最初のニュースだった場合は最後に戻る)
newsIndex = (newsIndex - 1 + newsList.length) % newsList.length;
// 少し待ってからニュースを更新(アニメーションのリセットが完了するのを待つため)
setTimeout(updateNewsTicker, 100);
// インターバルをリセット
clearInterval(intervalId);
intervalId = setInterval(function() {
newsTicker.style.animation = '';
newsIndex = (newsIndex + 1) % newsList.length;
setTimeout(updateNewsTicker, 100);
}, 5000);
});
このコードを使用すると、ニュースティッカーが自動的にニュースをスライド表示して、ユーザーがボタンをクリックすることでニュースを手動で切り替えることができます。
表示するニュースの追加は冒頭に追記しましょう。
CSS
CSSの「news-ticker-container」は、ニュースティッカー全体のコンテナを指定して、「#news-ticker」はニュースの表示領域を指定します。#controlsは操作ボタンを指定します。
これらのセレクタに対して、位置や表示方法、アニメーションなどのスタイルが設定されています。position: relative;
や position: absolute;
は要素の位置を指定し、overflow: hidden;はコンテンツがコンテナを超えた場合に非表示にします。
#news-ticker-container {
position: relative; /* コンテナの位置を設定 */
overflow: hidden; /* コンテンツがコンテナを超える場合に非表示にする */
height: 40px; /* コンテナの高さを設定 */
display: flex; /* フレックスボックスモデルを適用 */
justify-content: space-between; /* 主軸方向に空間を挿入して要素間隔を最大にする */
align-items: center; /* 交差軸方向に要素を中央揃えにする */
}
#news-ticker {
position: absolute; /* ティッカーの位置を設定 */
transition: transform 0.8s ease-in-out; /* transformプロパティの変化を0.8秒間で緩やかに適用する */
}
#controls {
position: absolute; /* コントロールの位置を設定 */
right: 0; /* コントロールを右側に配置 */
display: flex; /* フレックスボックスモデルを適用 */
align-items: center; /* 交差軸方向に要素を中央揃えにする */
justify-content: flex-end; /* 主軸の終端に要素を配置 */
gap: 10px; /* 各要素間のギャップを設定 */
}
#controls button {
height: 30px; /* ボタンの高さを設定 */
line-height: 30px; /* ボタン内のテキストの行高を設定 */
display: flex; /* フレックスボックスモデルを適用 */
align-items: center; /* 交差軸方向に要素を中央揃えにする */
}
@keyframes slide-up {
from {
transform: translateY(100%); /* アニメーション開始時、要素を下(Y軸方向)に100%移動 */
}
to {
transform: translateY(0); /* アニメーション終了時、要素の位置を初期状態(Y軸方向0%)に戻す */
}
}
アニメーションで使用している @keyframes
は、slide-upという名前のアニメーションを定義して、要素を上にスライドさせる効果を実現します。
これらのCSSコードを使用することで、ニュースティッカーのコンテナやニュース表示領域、操作ボタンなどの外観や動きをカスタマイズすることができます。
見た目のカスタマイズはCSSをいじってみてください。
さいごに
今回は、ニュースティッカーの作り方とコードについての内容でした。
表示する量やコンテンツによってアニメーション効果も加えてあげると、いい感じのUIになるので、ぜひ参考にしてカスタマイズしてみてください。