wekker.css fájl tartalma.
body {font-family: Arial, Helvetica, sans-serif; font-size: 100.01%; margin: 0; background-color: #ccc; } #container {width: 950px; margin-top: 15px; margin-right: auto; margin-left: auto;} .wekkercanvas{width: 260px; margin-right: auto; margin-left: auto; padding:15px;background-color: white;}
wekker.html fájl tartalma.
<!DOCTYPE html> <html lang="hu"> <head> <meta charset="UTF-8"> <title>Wekker óra mutatókkal.</title> <link href="wekker.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="container"> <div class="wekkercanvas"> <canvas id="wekker" width="250" height="250" style="border:2px solid lime;"></canvas> </div> <script type="text/javascript" language="javascript" src="wekker.js"></script> </div> </body> </html>
wekker.js fájl tartalma.
// Canvas Komplett óra megjelenítése: ------------------------- var id = document.getElementById("wekker"); var owek = id.getContext("2d"); var Y=120; // Perceket alkotó kör top központja (függőlegesen) var X=120; // Perceket alkotó kör left központja (vízszintesen) var Ysz=110; // Óra számait alkotó kör központja, top érték. var Xsz=115; // Óra számait alkotó kör központja, left érték. var Mkp= 4; // Mutatók kezdő pozícióját növelő érték + 4. // Következő értékek megadhatók: 0-a vagy nagyobb értékkel. Példa: 3.58 var Pvp=4.14; // Percmutató végpozícióját növelő érték + 4.14. var Ovp=3.3; // Óramutató végpozícióját növelő érték + 3.3. var MPvp=4; // Másodpercmutató végpozícióját növelő érték + 4. // Perceket jelölő pontok. --------------------------------------------------------------- var pontr=110; // A kör sugara, melyen a perceket jelölő pontok, elhelyezkednek. var fok=0; // Azon fok, mely sin és cos értékét határozza meg. for (i=0; i < 360;) { pontMsF=Math.sin(fok * Math.PI / 180); pontMcF=Math.cos(fok * Math.PI / 180); szlLeft=X+pontr*pontMsF; szlTop =Y-pontr*pontMcF; // Számlapon a percek pontjainak megjelenítése. owek.beginPath(); owek.fillStyle = "rgb(0,0,250)"; // Perceket jelőlő pontok színe owek.fillRect(szlLeft, szlTop, 3,3); // Adott perc pozícióban, négyszöget vagy kört határozunk meg. owek.closePath() fok=fok+6; // fok értékét minden lefutás végén, +6 fokkal növeljük. i=i+6; } // Perceket jelölő pontok, vége. --------------------------------------------------------- // Óraszámok elhelyezése. ----------------------------------------------------------------- var oraszamok=12; var szamok=12; var Krsz=95; // A kör sugara, melyen a számok elhelyezkednek. var foksz=0; // Azon fok, mely a számok sin és cos értékét határozza meg. // Óra számai és azok pozíciói következnek. for (i=0; i < 360; ) { szamMsF=Math.sin(foksz * Math.PI / 180); szamMcF=Math.cos(foksz * Math.PI / 180); szT=Ysz-Krsz*szamMcF; szL=Xsz+Krsz*szamMsF; // Canvas óraszámok kiíratása. var szamLeft=szL; var szamTop=szT+16; // Canvasnál: Top értéket betűmérettel, azaz, +16-al növelni kell, a számok elhelyezkedéséhez. owek.beginPath(); owek.fillStyle = "rgb(0,0,0)"; owek.font = "15px Arial"; owek.fillText(szamok,szamLeft,szamTop); owek.closePath() foksz=foksz+30; // fok értékét minden lefutás végén +30 fokkal növeljük (12x30=360) oraszamok=oraszamok+1; szamok=oraszamok-12; i=i+30; } // Óraszámok elhelyezésének, vége. --------------------------------------------------------------- // Mutatók ------------------------------------------------------------------------------------------- var cx = 120; // Mutató központi pozíciója, left. var cy = 120; // Mutató központi pozíciója, top. //Következő lépés, a mutató pozícionálása, az eltelt másodperceknek megfelelően. function KomplettWekker() { var ido = new Date (); var masodperc = ido.getSeconds(); var mp = -1.57 + Math.PI * masodperc/30; var perc = ido.getMinutes(); var p = -1.57 + Math.PI * perc/30; var ora = ido.getHours(); var o = -1.57 + Math.PI * ora/6 + Math.PI*parseInt(ido.getMinutes())/360; // ----- Percmutató pozíciói. ---------------------------------------------------------- pkLeft= cx+Mkp * (Math.cos(p) * 0); // Percmutató kezdő left pozíciója. pkTop = cy+Mkp * (Math.sin(p) * 0); // Percmutató kezdő top pozíciója. pvLeft= cx+Pvp * (Math.cos(p) * 20); // Percmutató végének left pozíciója. pvTop = cy+Pvp * (Math.sin(p) * 20); // Percmutató végének top pozíciója. // ----- Percmutató pozíciók vége. ----------------------------------------------------- // ----- Óramutató pozíciói. ---------------------------------------------------------- okLeft= cx+Mkp * (Math.cos(o) * 0); // Óramutató kezdő left pozíciója. okTop = cy+Mkp * (Math.sin(o) * 0); // Óramutató kezdő top pozíciója. ovLeft= cx+Ovp * (Math.cos(o) * 20); // Óramutató végének left pozíciója. ovTop = cy+Ovp * (Math.sin(o) * 20); // Óramutató végének top pozíciója. // ----- Óramutató pozíciók vége. ----------------------------------------------------- // ----- Másodpercmutató pozíciói. ---------------------------------------------------------- mpkLeft= cx+Mkp * (Math.cos(mp) * 0); // Másodpercmutató kezdő left pozíciója. mpkTop = cy+Mkp * (Math.sin(mp) * 0); // Másodpercmutató kezdő top pozíciója. mpvLeft= cx+MPvp * (Math.cos(mp) * 20); // Másodpercmutató végének left pozíciója. mpvTop = cy+MPvp * (Math.sin(mp) * 20); // Másodpercmutató végének top pozíciója. // ----- Másodpercmutató pozíciók vége. ----------------------------------------------------- // Telikört helyezünk el, melynek átmérője egyenlő vagy nagyobb a leghosszabb mutató által bejárt körrel. owek.beginPath(); owek.arc(cx,cy,83.5,0,2*Math.PI); owek.fillStyle = "yellow"; owek.fill(); owek.closePath() // -------------------------------------------------------------------------- // Canvas Óramutató meghatározás: ------------------------------------------------------------------------------ owek.beginPath(); owek.lineWidth=4; // Vonal vastagság. owek.moveTo(ovLeft, ovTop); // Vonal, kezdő pozíciója. left,top. owek.lineTo(okLeft, okTop); // Vonal, vég pozíciója. left,top. owek.closePath() owek.strokeStyle = "blue"; // Vonal színe. owek.stroke(); // Canvas Óramutató meghatározás vége: ------------------------------------------------------------------------------ // Canvas Percmutató meghatározás: ---------------------------------------------------------------------- owek.beginPath(); owek.lineWidth=4; // Vonal vastagság. owek.moveTo(pvLeft, pvTop); // Vonal, kezdő pozíciója. left,top. owek.lineTo(pkLeft, pkTop); // Vonal, vég pozíciója. left,top. owek.closePath() owek.strokeStyle = "black"; // Vonal színe. owek.stroke(); owek.beginPath(); owek.arc(mpkLeft,mpkTop,8,0,2*Math.PI); owek.fillStyle = "black"; owek.fill(); owek.closePath() // Canvas Percmutató meghatározás vége: ----------------------------------------------------------------- // Canvas másodpercmutató meghatároz--------------------------------------------------------------------- owek.beginPath(); owek.lineWidth=2; // Vonal vastagság. owek.moveTo(mpvLeft, mpvTop); // Vonal, kezdő pozíciója. left,top. owek.lineTo(mpkLeft, mpkTop); // Vonal, vég pozíciója. left,top. owek.closePath() owek.strokeStyle = "red"; // Vonal színe. owek.stroke(); owek.beginPath(); owek.arc(mpkLeft,mpkTop,6,0,2*Math.PI); owek.fillStyle = "red"; owek.fill(); owek.closePath() // Canvas másodpercmutató meghatározás vége:------------------------------------------------------------- setTimeout('KomplettWekker()', 50); } window.onload = KomplettWekker;