イカ娘時計 Windows7用ガジェット 試作

この記事http://jamberry.at.webry.info/201011/article_252.html見て触発されて作ってみたでゲソw
Javascriptの勉強がてらに作ったので、新能力とか無いでゲソ
たぶんsilverlightを入れないと動かない場合があるじゃなイカ


<Windows7用ガジェット> ikaclock.zip
・zipファイルですが拡張子を.gadgetに変更するとインストールできます
・中身見て好き勝手に改造して下さいwww

<サンプル表示> (クリックで別window)
IE8、Firefox(3.6)、Safari(5.02)、Chrome(7.0)で確認済み

<サンプル表示のソース>
IE、Chrome以外で一部”<”が”&lt”に化けます>

<html>
<head>
  <title>Ika Clock</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
  <meta http-equiv="Content-Language" content="ja"></meta>


  <!-- windows7ガジェット用 -->
  <style type="text/css">
    body  {
      margin: 0;
      width:150px; height:150px;
      background: url(frame.png);
    }
  </style>

  <!-- IEの場合 canvas描画はuuCanvasを用いる -->
  <!--[if IE ]>
  <script src="uuCanvas.js"></script>
  <![endif]-->

  <script type="text/javascript">

    // グローバル変数
    var ctx;
    var clockWidth, clockHeight, centerX, centerY, bodyX, bodyY;
    var img_back, img_body, img_sec, img_min, img_hour;
    var timerid;

    // 画像を得る
    img_back = new Image();
    img_body = new Image();
    img_sec = new Image();
    img_min = new Image();
    img_hour = new Image();

    // 背景の画像
    img_back.src = "ika_clock_back.png";
    // 中心の画像
    img_body.src = "ika_clock_body.png";
    // 秒針の画像
    img_sec.src = "ika_clock_sec.png";
    // 分針の画像
    img_min.src = "ika_clock_min.png";
    // 時針の画像
    img_hour.src = "ika_clock_hour.png";

    // 針を描画
    function draw_clockhand( deg, draw_type ) {
      var rad;

      deg = deg - 90; // 90度左へ回転する
      // ラジアンに変換 
      rad = deg * Math.PI / 180;

      ctx.setTransform(Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), centerX, centerY );

      // 図形を描画 */
      switch( draw_type ) {
        case 0:
          ctx.drawImage(img_hour, 0, 0 );
          break;
        case 1:
          ctx.drawImage(img_min, 0, 0 );
          break;
        case 2:
          ctx.drawImage(img_sec, 0, 0 );
          break;

      }
    }

    // 時計の描画処理
    function drawClock() {
      var now, hour, min, sec;
      var hour_deg, min_deg, sec_deg;

      // 背景を描画
      ctx.setTransform( 1, 0, 0, 1, 0, 0);
      ctx.drawImage(img_back, 0, 0);

      // 現在時刻を得る
      now = new Date();
      hour = now.getHours() % 12;
      min  = now.getMinutes();
      sec  = now.getSeconds();

      // 時計の針の角度を計算する
      hour = hour + min / 60; // 時は分に応じて少し進める
      hour_deg = 360 * hour / 12;
      min_deg  = 360 * min / 60;
      sec_deg  = 360 * sec / 60;

      // 時針を描画する
      draw_clockhand( hour_deg, 0);
      // 分針を描画する
      draw_clockhand( min_deg, 1);
      // 秒針を描画する
      draw_clockhand( sec_deg, 2);

      // 中心の画像を描画
      ctx.setTransform( 1, 0, 0, 1, 0, 0);
      ctx.drawImage( img_body, centerX - ( bodyW/2 ), centerY -( bodyH/2 ) );

    }

    // Imageオブジェクト 幅・高さ 取得関数
    function getImageDimensions( img ) {
      var wk;
      var width, height;

      // IEの場合
      if( navigator.userAgent.indexOf("MSIE") != -1) {
        wk = document.createElement('img');
        wk.style.position = 'absolute';
        wk.style.visibility = 'hidden';
        wk.style.top = '0px';
        wk.style.left = '0px';
        document.body.appendChild( wk );
        wk.src = img.src;
        width = wk.offsetWidth;
        height = wk.offsetHeight;
        wk.parentNode.removeChild( wk );
      }
      else {
        width = img.width;
        height = img.height;
      }
      return { width:width, height:height };
    }

    // 初期設定サブルーチン
    function draw_init() {
      // 変数初期化
      centerX = getImageDimensions(img_back).width / 2;
      centerY = getImageDimensions(img_back).height / 2;
      bodyW = getImageDimensions(img_body).width; 
      bodyH = getImageDimensions(img_body).height; 

    }

    // 描画のための初期設定 IE以外
    function load() {
      var canvas;

      // IEなら処理しない
      if(navigator.userAgent.indexOf("MSIE") != -1){ return; }

      // canvasを得る
      canvas = document.getElementById("canvas");
      // コンテキストを得る
      ctx = canvas.getContext("2d");

      // canvasの大きさ=時計の大きさ
      clockWidth  = canvas.width;
      clockHeight = canvas.height;

      // 初期化
      draw_init();
      // 毎秒時計を描画するように設定する
      timerid = setInterval(drawClock, 1000);

    }

    // 描画のための初期設定 IE用
    window.xcanvas = function( uu, canvasNodes ) {

      // コンテキストを得る
      ctx = canvasNodes[0].getContext("2d");

      // canvasの大きさ=時計の大きさ
      clockWidth  = canvasNodes[0].width;
      clockHeight = canvasNodes[0].height;

      // 初期化
      draw_init();
      // 毎秒時計を描画するように設定する
      timerid = setInterval(drawClock, 1000);

    }


  </script>

</head>

<body onload="load();">
  <canvas id="canvas" class="silverlight flash vml" width="150" height="150" style="position:fixed; top:0px; left:0px;">IEの場合silverligが必要です</canvas>
</body>
</html>

メール:doku38@gmail.com