2016-06-01 3 views
0

Я хочу создать аналоговые часы с использованием JavaScript. Теперь у меня есть часы работы и часы, которые поступают из базы данных.как сделать часы JavaScript по значениям базы данных

Так что я хочу показать рабочее время в некотором цвете и в нерабочее время в другом цвете. Как мне это сделать?

Из базы данных у меня есть время начала и окончания времени

Например:

ОТ ВРЕМЕНИ: 00: 00: 00

END TIME: 11: 59: 00

Это то, что часы: Clock

<canvas id="canvas" width="400" height="400" 
style="background-color:Blue"> 
</canvas> 

<script> 
var canvas = document.getElementById("canvas"); 
var ctx = canvas.getContext("2d"); 
var radius = canvas.height/2; 
ctx.translate(radius, radius); 
radius = radius * 0.90 
setInterval(drawClock, 1000); 

function drawClock() { 
    drawFace(ctx, radius); 
    drawNumbers(ctx, radius); 
    drawTime(ctx, radius); 
} 

function drawFace(ctx, radius) { 
    var grad; 
    ctx.beginPath(); 
    ctx.arc(0, 0, radius, 0, 2*Math.PI); 
    ctx.fillStyle = 'white'; 
    ctx.fill(); 
    grad = ctx.createRadialGradient(0,0,radius*0.95, 0,0,radius*1.05); 
    grad.addColorStop(0, '#333'); 
    grad.addColorStop(0.5, 'white'); 
    grad.addColorStop(1, '#333'); 
    ctx.strokeStyle = grad; 
    ctx.lineWidth = radius*0.1; 
    ctx.stroke(); 
    ctx.beginPath(); 
    ctx.arc(0, 0, radius*0.1, 0, 2*Math.PI); 
    ctx.fillStyle = '#333'; 
    ctx.fill(); 
} 

function drawNumbers(ctx, radius) { 
    var ang; 
    var num; 
    ctx.font = radius*0.15 + "px arial"; 
    ctx.textBaseline="middle"; 
    ctx.textAlign="center"; 
    for(num = 1; num < 13; num++){ 
    ang = num * Math.PI/6; 
    ctx.rotate(ang); 
    ctx.translate(0, -radius*0.85); 
    ctx.rotate(-ang); 
    ctx.fillText(num.toString(), 0, 0); 
    ctx.rotate(ang); 
    ctx.translate(0, radius*0.85); 
    ctx.rotate(-ang); 
    } 
} 

function drawTime(ctx, radius){ 
    var now = new Date(); 
    var hour = now.getHours(); 
    var minute = now.getMinutes(); 
    var second = now.getSeconds(); 
    //hour 
    hour=hour%12; 
    hour=(hour*Math.PI/6)+ 
    (minute*Math.PI/(6*60))+ 
    (second*Math.PI/(360*60)); 
    drawHand(ctx, hour, radius*0.5, radius*0.07); 
    //minute 
    minute=(minute*Math.PI/30)+(second*Math.PI/(30*60)); 
    drawHand(ctx, minute, radius*0.8, radius*0.07); 
    // second 
    second=(second*Math.PI/30); 
    drawHand(ctx, second, radius*0.9, radius*0.02); 
} 

function drawHand(ctx, pos, length, width) { 
    ctx.beginPath(); 
    ctx.lineWidth = width; 
    ctx.lineCap = "round"; 
    ctx.moveTo(0,0); 
    ctx.rotate(pos); 
    ctx.lineTo(0, -length); 
    ctx.stroke(); 
    ctx.rotate(-pos); 
} 
</script> 

ответ

1

Как насчет API, подобного этому для функции drawClock?

drawClock(currentTime, offHours) 


function isOffHours() { 
    // Always working 
    return false 
} 
setInterval(function() { 
    drawClock(new Date(), isOffHours()) 
}, 1000) 

Таким образом, сама функция рисования часов не добираются, чтобы решить, сколько времени, рендеринг часть приложения является лучше не ведая.

Это потребовало бы вам изменить сигнатуру функции drawTime тоже:

drawTime(ctx, radius, time) { 
    var hour = time.getHours(); 
    var minute = time.getMinutes(); 
    var second = time.getSeconds(); 
    ... 
} 

EDIT: проверить эту скрипку https://jsfiddle.net/gf8g8790/2/

+0

Мой Знание JavaScript не так хорошо, так что я не знаю, как я буду в состоянии использовать это – Rajan

+0

Здравствуйте @Rajan проверьте это: https://jsfiddle.net/gf8g8790/1/ для примера о том, как это сделать. Тем не менее, вам все равно нужно найти способ включения времени включения/выключения из вашей базы данных на веб-страницу. Надеюсь, это поможет. –

+1

Это действительно долгие часы работы. Btw –

Смежные вопросы