<title>canvasshiyw1120时钟</title>
<canvas id="clock" height="200px" width="200px"></canvas>
border: 1px solid #cccccc;
var dom = document.getElementById('clock');
var ctx = dom.getContext('2d');
var width = ctx.canvas.width;
var height = ctx.canvas.height;
function drawBackground() {
ctx.arc(0, 0, r - ctx.lineWidth /2, 0, 2 * Math.PI, false);
var hourNumbers = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2];
ctx.font = 18*rem+"px Arial";
ctx.textAlign = "center";
ctx.textBaseline = "middle";
hourNumbers.forEach(function(number, i) {
var rad = 2 * Math.PI / 12 * i;
var x = Math.cos(rad) * (r - 30*rem);
var y = Math.sin(rad) * (r - 30*rem);
ctx.fillText(number, x, y);
for (var i = 0; i < 60; i++) {
var rad = 2 * Math.PI / 60 * i;
var x = Math.cos(rad) * (r - 18*rem);
var y = Math.sin(rad) * (r - 18*rem);
ctx.arc(x, y, 2*rem, 0, 2 * Math.PI, false);
ctx.arc(x, y, 2*rem, 0, 2 * Math.PI, false);
function drawHour(hour, minute) {
var rad = 2 * Math.PI / 12 * hour;
var mrad = 2 * Math.PI / 12 / 60 * minute;
function drawMinute(minute) {
var rad = 2 * Math.PI / 60 * minute;
ctx.lineTo(0, -r + 30*rem);
function drawSecond(second) {
var rad = 2 * Math.PI / 60 * second;
ctx.moveTo(-2*rem, 20*rem);
ctx.lineTo(2*rem, 20*rem);
ctx.lineTo(1, -r + 16*rem);
ctx.lineTo(-1, -r + 16*rem);
ctx.arc(0, 0, 3*rem, 0, 2 * Math.PI, false);
ctx.clearRect(0, 0, width, height);
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
setInterval(draw01, 1000);
-webkit-box-sizing: border-box;
-webkit-box-pack: center;
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-perspective: 1000px;
background-position: center;
-webkit-transition: -webkit-transform .7s cubic-bezier(0.4, 0.2, 0.2, 1);
transition: -webkit-transform .7s cubic-bezier(0.4, 0.2, 0.2, 1);
-o-transition: transform .7s cubic-bezier(0.4, 0.2, 0.2, 1);
transition: transform .7s cubic-bezier(0.4, 0.2, 0.2, 1);
transition: transform .7s cubic-bezier(0.4, 0.2, 0.2, 1), -webkit-transform .7s cubic-bezier(0.4, 0.2, 0.2, 1);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
background: -webkit-linear-gradient(45deg, #cedce7 0%,#596a72 100%);
background: -o-linear-gradient(45deg, #cedce7 0%,#596a72 100%);
background: linear-gradient(45deg, #cedce7 0%,#596a72 100%);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-transition: -webkit-transform .7s cubic-bezier(0.4, 0.2, 0.2, 1);
transition: -webkit-transform .7s cubic-bezier(0.4, 0.2, 0.2, 1);
-o-transition: transform .7s cubic-bezier(0.4, 0.2, 0.2, 1);
transition: transform .7s cubic-bezier(0.4, 0.2, 0.2, 1);
transition: transform .7s cubic-bezier(0.4, 0.2, 0.2, 1), -webkit-transform .7s cubic-bezier(0.4, 0.2, 0.2, 1);
-webkit-transform: translateY(-50%) translateZ(60px) scale(0.94);
transform: translateY(-50%) translateZ(60px) scale(0.94);
-webkit-box-sizing: border-box;
outline: 1px solid transparent;
-webkit-perspective: inherit;
-webkit-transform: rotateY(180deg);
transform: rotateY(180deg);
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-transform: rotateY(0deg);
transform: rotateY(0deg);
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-transform: rotateY(0deg);
transform: rotateY(0deg);
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-transform: rotateY(-180deg);
transform: rotateY(-180deg);
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
color: rgba(255,255,255,0.7);
font-family: 'Montserrat';
@media screen and (max-width: 64rem){
width: calc(33.333333% - 2rem);
@media screen and (max-width: 48rem){
@media screen and (max-width: 32rem){
<div class="col" ontouchstart="this.classList.toggle('hover');">
<div class="front" style="background-image: url(img/1.jpg)">
<canvas id="canvas" width="500" height="500" style="background:#000;"></canvas>
window.onload = function(){
var canvas = document.getElementById('canvas'),
context = canvas.getContext('2d'),
centerX = canvas.width/2,
centerY = canvas.height/2,
context.strokeStyle = "#fff";
context.arc(centerX, centerY, 100 , -Math.PI/2, -Math.PI/2 +n*rad, false);
context.strokeStyle = "red";
context.arc(centerX, centerY, 100 , 0, Math.PI*2, false);
context.strokeStyle = "#fff";
context.font = "40px Arial";
context.strokeText(n.toFixed(0)+"%", centerX-25, centerY+10);
window.requestAnimationFrame(drawFrame);
context.clearRect(0, 0, canvas.width, canvas.height);
if(speed > 100) speed = 0;
var phone = document.getElementById("phone_1"),
iframe = document.getElementById("frame_1");
function updateView(view) {
phone.className = "phone view_" + view;
function updateIframe() {
iframe.src = document.getElementById("iframeURL").value;
phone.style.width = document.getElementById("iframeWidth").value + "px";
phone.style.height = document.getElementById("iframeHeight").value + "px";
document.getElementById("wrapper").style.perspective = (
document.getElementById("iframePerspective").checked ? "1000px" : "none"
document.getElementById("controls").addEventListener("change", function() {
document.getElementById("views").addEventListener("click", function(evt) {
updateView(evt.target.value);
font-family: 'Open Sans', sans-serif;
background-color: #FFFAF6;
transition: all 0.5s ease;
transform: rotateX(50deg) rotateY(0deg) rotateZ(-50deg);
box-shadow: -3px 3px 0 #BBB, -6px 6px 0 #BBB, -9px 9px 0 #BBB, -12px 12px 0 #BBB, -14px 10px 20px #666;
transform: rotateX(0deg) rotateY(-60deg) rotateZ(0deg);
box-shadow: 5px 1px 0 #BBB, 9px 2px 0 #BBB, 12px 3px 0 #BBB, 15px 4px 0 #BBB, 0 7px 20px #999;
transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg);
box-shadow: 0px 3px 0 #BBB, 0px 4px 0 #BBB, 0px 5px 0 #BBB, 0px 7px 0 #BBB, 0px 10px 20px #666;
@media (max-width:900px) {
transform: scale(0.8, 0.8);
@media (max-width:700px) {
transform: scale(0.6, 0.6);
@media (max-width:500px) {
transform: scale(0.4, 0.4);
<div class="phone view_1" id="phone_1">
<iframe src="http://www.runcodex.com" id="frame_1"></iframe>
<label for="iframeURL">URL:</label>
<input type="text" id="iframeURL" placeholder="https://m.runcodex.com" value="https://m.runcodex.com" />
<label for="iframeWidth">Width:</label>
<input type="number" id="iframeWidth" placeholder="400" value="400" />
<label for="iframeHeight">Height:</label>
<input type="number" id="iframeHeight" placeholder="650" value="650" />
<label for="iframePerspective">Add perspective:</label>
<input type="checkbox" id="iframePerspective" checked="true" />
<button value="1">View 1 - Laying</button>
<button value="2">View 2 - Side</button>
<button value="3">View 3 - Front</button>