(function(global) { var numMap = [ [1, 2, 3, 4, 5, 6], [2,3], [1, 2, 4, 5, 7], [1, 2, 3, 4, 7], [2, 3, 6, 7], [1, 3, 4, 6, 7], [1, 3, 4, 5, 6, 7], [1, 2, 3], [1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 6, 7] ], pointArr, drawSegment, getPointArr, drawNum; // 获取对称点 getSymPoint = function(arr, axisX) { var index = axisX ? 1 : 0, result; result = arr.map(function(val, i) { var temp = val.slice(); temp[index] = -temp[index]; return temp; }); return result; }; // 获取各段LED灯的绘制点 getPointArr = function(w, h, thick) { var pointArr = [[], [], [], [], [], [], []]; // 第6段的绘制点 pointArr[5].push( [-w/2, -h/2], [-w/2 + thick, -h/2 + thick], [-w/2 + thick, -thick/2], [-w/2 + thick/2, 0], [-w/2, -thick/2] ); // 第2段的绘制点 pointArr[1] = getSymPoint(pointArr[5]); // 第5段的绘制点 pointArr[4] = getSymPoint(pointArr[5], true); // 第3段的绘制点 pointArr[2] = getSymPoint(pointArr[1], true) // 第1段的绘制点 pointArr[0].push(pointArr[5][0], pointArr[5][1]); pointArr[0] = pointArr[0].concat(getSymPoint(pointArr[0].slice().reverse())); // 第4段的绘制点 pointArr[3] = getSymPoint(pointArr[0], true); // 第7段的绘制点 pointArr[6].push(pointArr[5][2], pointArr[5][3], pointArr[4][2]); pointArr[6] = pointArr[6].concat(getSymPoint(pointArr[6].slice().reverse())); return pointArr; }; pointArr = getPointArr(40, 80, 10); drawSegment = function(cxt, num, active) { var arr = pointArr[num - 1], i, len; cxt.save(); cxt.beginPath(); for (i = 0, len = arr.length; i < len; i++) { cxt.lineTo.apply(cxt, arr[i]); } cxt.closePath(); if (active) { cxt.fillStyle = "#ff0000"; } else { cxt.fillStyle = "rgba(192, 192, 192, 0.1)"; } cxt.fill(); cxt.lineWidth = 2; cxt.stroke(); cxt.restore(); }; drawNum = function(cxt, num) { var map = numMap[num], i; for (i = 1; i <= 7; i++) { if (map.indexOf(i) !== -1) { drawSegment(cxt, i, true); } else { drawSegment(cxt, i); } } }; global.drawNum = drawNum; })(window); (function(global) { var canvas = document.getElementById('num-canvas'), cxt = canvas.getContext('2d'), sWidth = 400, sHeight = 100, padding = 20, drawNum = global.drawNum, second, showTime, getTimeNum, timeId; // 定义canvas画布大小 canvas.setAttribute('width', sWidth); canvas.setAttribute('height', sHeight); // 获取当前时间 getTimeNum = function() { var dateObj = new Date(), temp = [], result = [], i; temp.push( dateObj.getHours(), dateObj.getMinutes(), dateObj.getSeconds() ); for (i = 0; i < temp.length; i++) { result.push(Math.floor(temp[i] / 10)); result.push(temp[i] % 10); } return result; }; // 显示时间,刷新频率1s showTime = function showTime() { var timeArr, x, i, len; if (second !== new Date().getSeconds()) { timeArr = getTimeNum(); cxt.save(); cxt.clearRect(0, 0, sWidth, sHeight); cxt.translate(0, sHeight/2); for (i = 0, len = timeArr.length; i < len; i++) { x = i % 2 ? 45 : 45 + padding; cxt.translate(x, 0); drawNum(cxt, timeArr[i]); } cxt.restore(); second = new Date().getSeconds(); } timeId = setTimeout(showTime, 100); }; showTime(); })(window);
<div class="canvas-block"> <canvas id="num-canvas"></canvas> </div>