| BACK |

JavaScript

アナログ時計

リアルタイムで動くアナログ時計です。

ご利用の前に「利用規定」を必ず読んでおいてください。
スクリプトを利用した場合、無条件に同意したものとみなします。


更新履歴
2001.09.09
Ver.0.03 -> Ver0.04 記述の癖を少し直しました。
2001.08.09
Ver.0.02 -> Ver0.03 Netscape6対応他
2001.03.11
Ver.0.01 -> Ver0.02
画像サイズによる表示位置補正をしました。
画像の変更などの設定が簡単になりました。
2001.02.07
Ver.0.01 公開

動作確認済ブラウザ

Internet Explorer 5.01 (Windows)
Netscape Communicator 4.7 (Windows)
Netscape 6.01 (Windows)


設置方法
  1. </HEAD>の直前行付近に以下のソースをコピーします。
<!-- ========= for アナログ時計 ========= -->
<style type="text/css">
<!--
.posabs { position:absolute;left:-200px;top:0px; }
-->
</style>
<!-- ==================================== -->

  1. </BODY>の直前行付近に以下のソースをコピーします。
  2. 時計のサイズ、表示位置、画像ファイル名、画像サイズなど、赤字部分で設定します。
    画像ファイルは別途ご用意ください。
<!-- ======================================================================
                            アナログ時計 Ver.0.04
                   http://homepage3.nifty.com/masas/sdir/
                 Copyright(c)2001 Masa, All Rights Reserved.
======================================================================= -->
<script type="text/javascript" language="JavaScript">
<!--
// ---------------------------------------------------------------------------
//                   時計の大きさや画像の設定 (ここから)
// ---------------------------------------------------------------------------
var POS_X_CENTER = 300;  // 時計の中心X座標(大きいほどページ右へ)
var POS_Y_CENTER = 200;  // 時計の中心Y座標(大きいほどページ下へ)
var R_FRAME = 70;        // 時計の枠の半径

var LENGTH_HOUR = R_FRAME * 0.7;  // 短針(時)の長さ (枠の半径に対する割合)
var LENGTH_MIN  = R_FRAME * 0.9;  // 長針(分)の長さ (枠の半径に対する割合)
var LENGTH_SEC  = R_FRAME * 0.8;  // 秒針の長さ (枠の半径に対する割合)

var MAX_HOUR_IMG = 3;  // 短針(時)を何個の画像を並べて描くか
var MAX_MIN_IMG  = 4;  // 長針(分)を何個の画像を並べて描くか
var MAX_SEC_IMG  = 4;  // 秒針を何個の画像を並べて描くか

var FRAMEIMGNAME    = "frame.gif";   // 枠の画像ファイル名
var FRAMEIMGWIDTH   = 11;            // 枠の画像の幅
var FRAMEIMGHEIGHT  = 12;            // 枠の画像の高さ
var CENTERIMGNAME   = "center.gif";  // 中心の画像ファイル名
var CENTERIMGWIDTH  = 11;            // 中心の画像の幅
var CENTERIMGHEIGHT = 12;            // 中心の画像の高さ
var HOURIMGNAME     = "hour.gif";    // 短針(時)の画像ファイル名
var HOURIMGWIDTH    = 11;            // 短針(時)の画像の幅
var HOURIMGHEIGHT   = 12;            // 短針(時)の画像の高さ
var MINIMGNAME      = "minute.gif";  // 長針(分)の画像ファイル名
var MINIMGWIDTH     = 11;            // 長針(分)の画像の幅
var MINIMGHEIGHT    = 12;            // 長針(分)の画像の高さ
var SECIMGNAME      = "second.gif";  // 秒針の画像ファイル名
var SECIMGWIDTH     = 11;            // 秒針の画像の幅
var SECIMGHEIGHT    = 12;            // 秒針の画像の高さ
// ------------------------------------------------------------------------
//                   時計の大きさや画像の設定 (ここまで)
// ------------------------------------------------------------------------
function moveImage(id, x, y)
{
  if (document.layers) {
    document.layers[id].left = x;
    document.layers[id].top = y;
  } else if (document.all) {
    document.all[id].style.left = x+"px";
    document.all[id].style.top = y+"px";
  } else if (document.getElementById) {
    document.getElementById(id).style.left = x+"px";
    document.getElementById(id).style.top = y+"px";
  }
}
function init()
{
  // 各針のドット位置(半径)の算出
  for (j = 0; j < MAX_HOUR_IMG; j++) {
    r_hourimg[j] = Math.round(LENGTH_HOUR / MAX_HOUR_IMG) * (j + 1)
  }
  for (i = 0; i < MAX_MIN_IMG; i++) {
    r_minimg[i] = Math.round(LENGTH_MIN / MAX_MIN_IMG) * (i + 1)
  }
    for (k = 0; k < MAX_SEC_IMG; k++) {
    r_secimg[k] = Math.round(LENGTH_SEC / MAX_SEC_IMG) * (k + 1)
  }
  // 枠を描く(hidden)
  for (i = 0; i < 12; i++) {
    document.write('<div id="fram'+i+'" class="posabs">');
    document.write('<img src="'+FRAMEIMGNAME+'" width="'+FRAMEIMGWIDTH+'" height="'+FRAMEIMGHEIGHT+'"><\/div>');
  }
  // 時(短針)描画 (hidden)
  for (j = 0; j < MAX_HOUR_IMG; j++) {
    document.write('<div id="himg'+j+'" class="posabs">');
    document.write('<img src="'+HOURIMGNAME+'" width="'+HOURIMGWIDTH+'" height="'+HOURIMGHEIGHT+'"><\/div>');
  }
  // 分(長針)描画 (hidden)
  for (i = 0; i < MAX_MIN_IMG; i++) {
    document.write('<div id="mimg'+i+'" class="posabs">');
    document.write('<img src="'+MINIMGNAME+'" width="'+MINIMGWIDTH+'" height="'+MINIMGHEIGHT+'"><\/div>');
  }
  // 秒(秒針)描画 (hidden)
  for (k = 0; k < MAX_SEC_IMG; k++) {
    document.write('<div id="simg'+k+'" class="posabs">');
    document.write('<img src="'+SECIMGNAME+'" width="'+SECIMGWIDTH+'" height="'+SECIMGHEIGHT+'"><\/div>');
  }
  // 中心点を描く
  document.write('<div id="cent" class="posabs">');
  document.write('<img src="'+CENTERIMGNAME+'" width="'+CENTERIMGWIDTH+'" height="'+CENTERIMGHEIGHT+'"><\/div>');

  setInterval("mainProc()", 1000);
}
function moveClock(deg_h, deg_m, deg_s)
{
  // 時(短針)描画
  for (j = 0; j < MAX_HOUR_IMG; j++) {
    hourpx = POS_X_CENTER + r_hourimg[j] * Math.cos(deg_h * Math.PI / 180) - Math.floor(HOURIMGWIDTH / 2);
    hourpy = POS_Y_CENTER + r_hourimg[j] * Math.sin(deg_h * Math.PI / 180) - Math.floor(HOURIMGHEIGHT / 2);
    moveImage("himg"+j, hourpx, hourpy);
  }
  // 分(長針)描画
  for (i = 0; i < MAX_MIN_IMG; i++) {
    minpx = POS_X_CENTER + r_minimg[i] * Math.cos(deg_m * Math.PI / 180) - Math.floor(MINIMGWIDTH / 2);
    minpy = POS_Y_CENTER + r_minimg[i] * Math.sin(deg_m * Math.PI / 180) - Math.floor(MINIMGHEIGHT / 2);
    moveImage("mimg"+i, minpx, minpy);
  }
  // 秒(秒針)描画
  for (k = 0; k < MAX_SEC_IMG; k++) {
    secpx = POS_X_CENTER + r_secimg[k] * Math.cos(deg_s * Math.PI / 180) - Math.floor(SECIMGWIDTH / 2);
    secpy = POS_Y_CENTER + r_secimg[k] * Math.sin(deg_s * Math.PI / 180) - Math.floor(SECIMGHEIGHT / 2);
    moveImage("simg"+k, secpx, secpy);
  }
  if (firstdraw) {
    for (i = 0; i < 12; i++) {
      framepx = POS_X_CENTER + R_FRAME * Math.cos(360/12*i * Math.PI / 180) - Math.floor(FRAMEIMGWIDTH / 2);
      framepy = POS_Y_CENTER + R_FRAME * Math.sin(360/12*i * Math.PI / 180) - Math.floor(FRAMEIMGHEIGHT / 2);
      moveImage("fram"+i, framepx, framepy);
    }
    moveImage("cent", POS_X_CENTER - Math.floor(CENTERIMGWIDTH/2), POS_Y_CENTER - Math.floor(CENTERIMGHEIGHT/2));
    firstdraw = 0;
  }
}
// 時・分を獲得、角度に換算、描画関数をコール
function mainProc()
{
  // 時刻の獲得
  dd = new Date(); 
  hour = dd.getHours(); 
  if (hour > 12) { hour -= 12; }
  minute = dd.getMinutes(); 
  second = dd.getSeconds(); 
  // 角度換算
  deg_hour = (hour / 12 * 360) + (30 / 60 * minute) - 90;
  deg_minute = (minute / 60 * 360) - 90;
  deg_second = (second / 60 * 360) - 90;
  // 描画関数コール
  moveClock(deg_hour, deg_minute, deg_second);
}
var firstdraw = 1;
r_minimg = new Array();
r_hourimg = new Array();
r_secimg = new Array();
if (document.all || document.layers || document.getElementById) {
  init();
}
// -->
</script>
<!-- =================== End of アナログ時計 =================== -->



Copyright © 2001-2002 Masa, All Rights Reserved.