診療時間の表で、該当曜日の上にブタさんが顔を出している絵を追加しました。
ブタさんは、HTML5のCanvas機能で描きました。
(下記ソースの72〜173行目)
吹き出しの「・・・でブー!」は御愛嬌。
現在時刻はサーバー時計を参照しています。
今回も、ローカルテスト用Webサーバー環境が役立ちました。
以下はサーバーの時計を進めて行きながら、クライアントでの表示を確認したものです。







「ブタさん吹き出し表示」部分のソースはこちら
<html>
<head>
<meta charset="UTF-8">
<?php
date_default_timezone_set('Asia/Tokyo');
$y = date("Y");
$g = date("m");
$d = date("d");
$w = date("w");
$h = date("G");
$m = date("i");
$s = date("s");
?>
</head>
<body onload="Init();">
<canvas id="today_canvas" width="580px" height="62px"></canvas>
<script type="text/javascript">
n_Flag = 0;
timer = 1;
var canvas = document.getElementById("today_canvas");
var ctx = canvas.getContext('2d');
function Init(){
h = <?php echo $h ?>;
m = <?php echo $m ?>;
s = <?php echo $s ?>;
balloon();
CheckTime();
}
function CheckTime(){
if (s==60) { s=0;m++;}
if (m==60) { m=0;h++;}
if (h==24) { h=0; }
n_Time=h+":"+m+":"+s;
if (n_Time=="23:59:59") {
n_Flag = 1; // 23時59分59秒にフラグを立てる
}
if (n_Time=="0:0:0") {
if (n_Flag==1) { // 重複リロード防止
// 0時0分0秒なら再表示
window.location.reload();
n_Flag = 0;
}
}
s=s+1;
clearTimeout(timer);
timer=setTimeout("CheckTime()",1000);
}
// balloon関数 start
function balloon(){
y = <?php echo $y ?>;
g = <?php echo $g ?>;
d = <?php echo $d ?>;
_yobi = <?php echo $w ?>;
// _yobi = 0; // ■テスト
var week_name = new Array("日","月","火","水","木","金","土");
var wn = week_name[_yobi];
var weekly_disp_DB = new Array(245,216,278,1,62,123,184,245); //バルーンの開始位置
var _disp = weekly_disp_DB[_yobi];
var weekly_buta_DB = new Array(534,162,224,286,348,410,472,534); //ブタさんの表示位置
var _buta = weekly_buta_DB[_yobi];
var _width = 280;
var _height = 14;
var weekly_pos_DB = new Array(270,20,20,270,270,270,270,270); //吹き出し点の位置
var _pos = weekly_pos_DB[_yobi];
var weekly_muki_DB = new Array(1,0,0,1,1,1,1,1); //吹き出しの向き(0:左、1:右)
var _muki = weekly_muki_DB[_yobi];
var weekly_moji_DB = new Array(254,224,288,10,71,132,193,254); //文字の開始位置
var _moji = weekly_moji_DB[_yobi];
ctx.clearRect(0,0,580,54);
// ブタさんの胴体
ctx.beginPath();
ctx.fillStyle = "rgb(255,204,204)";
ctx.moveTo(_buta- 2,62);
ctx.quadraticCurveTo(_buta-2,30,_buta+22,30);
ctx.quadraticCurveTo(_buta+46,30,_buta+46,62);
ctx.closePath();
ctx.fill();
// ブタさんの顔
ctx.beginPath();
ctx.fillStyle = "rgb(255,170,204)";
ctx.moveTo(_buta+22,20);
ctx.quadraticCurveTo(_buta+43,20,_buta+45,40);
ctx.quadraticCurveTo(_buta+45,60,_buta+22,60);
ctx.quadraticCurveTo(_buta- 1,60,_buta- 1,40);
ctx.quadraticCurveTo(_buta+ 1,20,_buta+22,20);
ctx.closePath();
ctx.fill();
// 耳と鼻
ctx.beginPath();
ctx.fillStyle = "rgb(255, 85,221)";
ctx.moveTo(_buta+10,23); // 右耳
ctx.quadraticCurveTo(_buta+ 9,22,_buta+ 7,20);
ctx.quadraticCurveTo(_buta ,23,_buta- 1,28);
ctx.quadraticCurveTo(_buta+ 3,34,_buta+ 5,35);
ctx.quadraticCurveTo(_buta+ 6,23,_buta+ 9,22);
ctx.moveTo(_buta+34,23); // 左耳
ctx.quadraticCurveTo(_buta+35,22,_buta+37,20);
ctx.quadraticCurveTo(_buta+44,23,_buta+45,28);
ctx.quadraticCurveTo(_buta+41,34,_buta+39,35);
ctx.quadraticCurveTo(_buta+38,23,_buta+35,22);
ctx.moveTo(_buta+22,34); // 鼻
ctx.quadraticCurveTo(_buta+30,34,_buta+31,42);
ctx.quadraticCurveTo(_buta+31,49,_buta+22,49);
ctx.quadraticCurveTo(_buta+14,49,_buta+13,42);
ctx.quadraticCurveTo(_buta+13,34,_buta+22,34);
ctx.closePath();
ctx.fill();
// 鼻穴
ctx.beginPath();
ctx.fillStyle = "rgb(255,170,204)";
ctx.moveTo(_buta+19,39); // 鼻穴右
ctx.quadraticCurveTo(_buta+21,39,_buta+21,42);
ctx.quadraticCurveTo(_buta+21,45,_buta+19,45);
ctx.quadraticCurveTo(_buta+17,45,_buta+17,42);
ctx.quadraticCurveTo(_buta+17,39,_buta+19,39);
ctx.moveTo(_buta+25,39); // 鼻穴左
ctx.quadraticCurveTo(_buta+27,39,_buta+27,42);
ctx.quadraticCurveTo(_buta+27,45,_buta+25,45);
ctx.quadraticCurveTo(_buta+23,45,_buta+23,42);
ctx.quadraticCurveTo(_buta+23,39,_buta+25,39);
ctx.closePath();
ctx.fill();
// 目と口
ctx.beginPath();
ctx.fillStyle = "rgb(127,0,0)";
ctx.arc(_buta+ 8,40,2.5,0,Math.PI*2,true); // 右目
ctx.arc(_buta+36,40,2.5,0,Math.PI*2,true); // 左目
ctx.moveTo(_buta+13,50); // 口
ctx.quadraticCurveTo(_buta+13,56,_buta+22,56);
ctx.quadraticCurveTo(_buta+31,56,_buta+31,50);
ctx.closePath();
ctx.fill();
// 前足
ctx.beginPath();
ctx.fillStyle = "rgb(255,150,204)";
ctx.moveTo(_buta- 2,62); // 右足
ctx.quadraticCurveTo(_buta-2,50,_buta+5,50);
ctx.quadraticCurveTo(_buta+12,50,_buta+12,62);
ctx.moveTo(_buta+32,62); // 右足
ctx.quadraticCurveTo(_buta+32,50,_buta+39,50);
ctx.quadraticCurveTo(_buta+46,50,_buta+46,62);
ctx.closePath();
ctx.fill();
// 前足のヒヅメ
ctx.beginPath();
ctx.fillStyle = "rgb(127,0,0)";
ctx.moveTo(_buta-2,62); // 右足のヒヅメ
ctx.quadraticCurveTo(_buta-2,56,_buta-1,56);
ctx.quadraticCurveTo(_buta-1,56,_buta+11,56);
ctx.quadraticCurveTo(_buta+12,56,_buta+12,62);
ctx.quadraticCurveTo(_buta+12,62,_buta+6,62);
ctx.quadraticCurveTo(_buta+6,62,_buta+5,57);
ctx.quadraticCurveTo(_buta+4,62,_buta+4,62);
ctx.quadraticCurveTo(_buta+4,62,_buta-2,62);
ctx.moveTo(_buta+32,62); // 左足のヒヅメ
ctx.quadraticCurveTo(_buta+32,56,_buta+33,56);
ctx.quadraticCurveTo(_buta+33,56,_buta+45,56);
ctx.quadraticCurveTo(_buta+46,56,_buta+46,62);
ctx.quadraticCurveTo(_buta+46,62,_buta+40,62);
ctx.quadraticCurveTo(_buta+40,62,_buta+39,57);
ctx.quadraticCurveTo(_buta+38,62,_buta+38,62);
ctx.quadraticCurveTo(_buta+38,62,_buta+32,62);
ctx.closePath();
ctx.fill();
// バルーン(吹き出し)を表示
ctx.beginPath();
ctx.moveTo(_disp+10,2);
ctx.lineTo(_disp+_width-10,2);
ctx.quadraticCurveTo(_disp+_width,2,_disp+_width,12);
ctx.lineTo(_disp+_width,_height+12);
ctx.quadraticCurveTo(_disp+_width,_height+22,_disp+_width-10,_height+22);
ctx.lineTo(_disp+_pos,_height+22);
if (_muki==0) {
ctx.quadraticCurveTo(_disp+5+_pos,_height+24,_disp+3+_pos-20,_height+34); // 左から吹き出し
ctx.quadraticCurveTo(_disp-10+_pos,_height+32,_disp-10+_pos,_height+22);
}else {
ctx.quadraticCurveTo(_disp+_pos,_height+24,_disp+3+_pos+5,_height+34); // 右から吹き出し
ctx.quadraticCurveTo(_disp-10+_pos+5,_height+32,_disp-10+_pos-2,_height+22);
}
ctx.lineTo(_disp+10,_height+22);
ctx.quadraticCurveTo(_disp,_height+22,_disp,_height+12);
ctx.lineTo(_disp,12);
ctx.quadraticCurveTo(_disp,2,_disp+10,2);
ctx.stroke();
ctx.fillStyle = 'rgb(229, 229, 229)'; // 灰色
ctx.fill();
ctx.font = "18px 'MS ゴシック'";
ctx.strokeStyle = "black";
ctx.fillStyle = "black"; // 黒
ctx.fillText("" + y + "年" + g + "月" + d + "日、" + wn +"曜日でブー!",_moji,25,360);
} // balloon end
</script>
</body>
</html>
関連記事: