Skip to content

Instantly share code, notes, and snippets.

@FlandreDaisuki
Last active June 23, 2018 21:45
Show Gist options
  • Save FlandreDaisuki/64d2516f2eeb73f73d66f5c354fd297a to your computer and use it in GitHub Desktop.
Save FlandreDaisuki/64d2516f2eeb73f73d66f5c354fd297a to your computer and use it in GitHub Desktop.
self-hosted clock

安裝方式

  1. 安裝 node
  2. 新增一個資料夾放入index.js
  3. 到資料夾下安裝 node-canvas
$ npm i canvas
  1. 執行 node index.js 就可以到 localhost:8888 重整了
const http = require('http');
const Canvas = require('canvas')
const canvas = new Canvas(150, 150)
const ctx = canvas.getContext('2d')
// https://developer.mozilla.org/docs/Web/API/Canvas_API/Tutorial/Basic_animations
function drawClock(){
var now = new Date();
ctx.save();
ctx.clearRect(0,0,150,150);
ctx.translate(75,75);
ctx.scale(0.4,0.4);
ctx.rotate(-Math.PI/2);
ctx.strokeStyle = "black";
ctx.fillStyle = "white";
ctx.lineWidth = 8;
ctx.lineCap = "round";
// Hour marks
ctx.save();
for (var i=0;i<12;i++){
ctx.beginPath();
ctx.rotate(Math.PI/6);
ctx.moveTo(100,0);
ctx.lineTo(120,0);
ctx.stroke();
}
ctx.restore();
// Minute marks
ctx.save();
ctx.lineWidth = 5;
for (i=0;i<60;i++){
if (i%5!=0) {
ctx.beginPath();
ctx.moveTo(117,0);
ctx.lineTo(120,0);
ctx.stroke();
}
ctx.rotate(Math.PI/30);
}
ctx.restore();
var sec = now.getSeconds();
var min = now.getMinutes();
var hr = now.getHours();
hr = hr>=12 ? hr-12 : hr;
ctx.fillStyle = "black";
// write Hours
ctx.save();
ctx.rotate( hr*(Math.PI/6) + (Math.PI/360)*min + (Math.PI/21600)*sec )
ctx.lineWidth = 14;
ctx.beginPath();
ctx.moveTo(-20,0);
ctx.lineTo(80,0);
ctx.stroke();
ctx.restore();
// write Minutes
ctx.save();
ctx.rotate( (Math.PI/30)*min + (Math.PI/1800)*sec )
ctx.lineWidth = 10;
ctx.beginPath();
ctx.moveTo(-28,0);
ctx.lineTo(112,0);
ctx.stroke();
ctx.restore();
// Write seconds
ctx.save();
ctx.rotate(sec * Math.PI/30);
ctx.strokeStyle = "#D40000";
ctx.fillStyle = "#D40000";
ctx.lineWidth = 6;
ctx.beginPath();
ctx.moveTo(-30,0);
ctx.lineTo(83,0);
ctx.stroke();
ctx.beginPath();
ctx.arc(0,0,10,0,Math.PI*2,true);
ctx.fill();
ctx.beginPath();
ctx.arc(95,0,10,0,Math.PI*2,true);
ctx.stroke();
ctx.fillStyle = "rgba(0,0,0,0)";
ctx.arc(0,0,3,0,Math.PI*2,true);
ctx.fill();
ctx.restore();
ctx.beginPath();
ctx.lineWidth = 14;
ctx.strokeStyle = '#325FA2';
ctx.arc(0,0,142,0,Math.PI*2,true);
ctx.stroke();
ctx.restore();
}
http.createServer(function (request, response) {
drawClock();
response.writeHead(200, {'Content-Type': 'image/png'});
response.end(canvas.toBuffer());
}).listen(8888);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment