以前に書いた記事「指定した期限までの時間をカウントダウンする処理」の数字を画像にしたバージョンです。
サンプルコード
HTML
以下のような0~9までを縦に並べた画像を使用し、topの値を変更して数値を切り替えます。
<div id="countdown-unit"> <div><img src="num.gif" width="20" height="220" id="day-thousand"></div> <div><img src="num.gif" width="20" height="220" id="day-hundred"></div> <div><img src="num.gif" width="20" height="220" id="day-ten"></div> <div><img src="num.gif" width="20" height="220" id="day-one"></div> <div><img src="day.gif" width="20" height="22"></div> <div><img src="num.gif" width="20" height="220" id="hour-ten"></div> <div><img src="num.gif" width="20" height="220" id="hour-one"></div> <div><img src="time.gif" width="20" height="22"></div> <div><img src="num.gif" width="20" height="220" id="minute-ten"></div> <div><img src="num.gif" width="20" height="220" id="minute-one"></div> <div><img src="time.gif" width="20" height="22"></div> <div><img src="num.gif" width="20" height="220" id="second-ten"></div> <div><img src="num.gif" width="20" height="220" id="second-one"></div> <div><img src="time.gif" width="20" height="22"></div> <div><img src="num.gif" width="20" height="220" id="flame-ten"></div> <div><img src="num.gif" width="20" height="220" id="flame-one"></div> </div>
CSS
#countdown-unit div {
position: relative;
float: left;
width: 20px;
height: 22px;
overflow: hidden;
}
#countdown-unit div img {
position: absolute;
top: 0;
left: 0;
}
JavaScript
// 期限の設定
var gYear = 2020, // 年
gMonth = 7, // 月
gDay = 24, // 日
gHour = 0, // 時
gMinute = 0, // 分
gSecond = 0; // 秒
var goal = new Date(gYear, gMonth-1, gDay, gHour, gMinute, gSecond);
// 画像の高さの設定
var numHeight = 22;
// 使用する変数
var currentTime, period,
cDay, cDayHundred, cDayTen, cDayOne,
cHour, cHourTen, cHourOne,
cMinute, cMinuteTen, cMinuteOne,
cSecond, cSecondTen, cSecondOne,
cFlame, cFlameTen, cFlameOne,
insert = "";
// カウント用画像の指定
var dayThousand = document.getElementById('day-thousand'),
dayHundred = document.getElementById('day-hundred'),
dayTen = document.getElementById('day-ten'),
dayOne = document.getElementById('day-one'),
hourTen = document.getElementById('hour-ten'),
hourOne = document.getElementById('hour-one'),
minuteTen = document.getElementById('minute-ten'),
minuteOne = document.getElementById('minute-one'),
secondTen = document.getElementById('second-ten'),
secondOne = document.getElementById('second-one'),
flameTen = document.getElementById('flame-ten'),
flameOne = document.getElementById('flame-one');
// カウントダウンの処理
function countdown() {
// 現在から期限日までの差を取得
currentTime = new Date();
period = goal.getTime() - currentTime.getTime();
// 期限を過ぎていない時
if(period >= 0) {
// 日数を取得
cDay = Math.floor(period / (1000 * 60 * 60 * 24));
period -= (cDay * (1000 * 60 * 60 * 24));
// 桁数を4桁に揃える
cDay = String(cDay);
while(cDay.length < 4) {
cDay = '0' + cDay;
}
// 画像の切り替え
dayThousand.style.top = (- cDay.substr(0, 1) * numHeight) + 'px';
dayHundred.style.top = (- cDay.substr(1, 1) * numHeight) + 'px';
dayTen.style.top = (- cDay.substr(2, 1) * numHeight) + 'px';
dayOne.style.top = (- cDay.substr(3, 1) * numHeight) + 'px';
// 時間を取得
cHour = Math.floor(period / (1000 * 60 * 60));
period -= (cHour * (1000 * 60 * 60));
// 桁数を2桁に揃える
cHour = String(cHour);
while(cHour.length < 2) {
cHour = '0' + cHour;
}
// 画像の切り替え
hourTen.style.top = (- cHour.substr(0, 1) * numHeight) + 'px';
hourOne.style.top = (- cHour.substr(1, 1) * numHeight) + 'px';
// 分を取得
cMinute = Math.floor(period / (1000 * 60));
period -= (cMinute * (1000 * 60));
// 桁数を2桁に揃える
cMinute = String(cMinute);
while(cMinute.length < 2) {
cMinute = '0' + cMinute;
}
// 画像の切り替え
minuteTen.style.top = (- cMinute.substr(0, 1) * numHeight) + 'px';
minuteOne.style.top = (- cMinute.substr(1, 1) * numHeight) + 'px';
// 秒を取得
cSecond = Math.floor(period / (1000));
period -= (cSecond * (1000));
// 桁数を2桁に揃える
cSecond = String(cSecond);
while(cSecond.length < 2) {
cSecond = '0' + cSecond;
}
// 画像の切り替え
secondTen.style.top = (- cSecond.substr(0, 1) * numHeight) + 'px';
secondOne.style.top = (- cSecond.substr(1, 1) * numHeight) + 'px';
// フレーム
cFlame = Math.floor(period / (10));
// 桁数を2桁に揃える
cFlame = String(cFlame);
while(cFlame.length < 2) {
cFlame = '0' + cFlame;
}
// 画像の切り替え
flameTen.style.top = (- cFlame.substr(0, 1) * numHeight) + 'px';
flameOne.style.top = (- cFlame.substr(1, 1) * numHeight) + 'px';
// カウントダウンの処理を再実行
setTimeout(countdown, 10);
// 期限を過ぎた時
} else {
}
}
// 処理の実行
countdown();
コメントが承認されるまで時間がかかります。