processing实现27款精美时钟集合显示时间代码
代码语言:html
所属分类:其他
代码描述:processing实现27款精美时钟集合显示时间代码,每个时钟都是一个对象,可以修改属性。
代码标签: processing 精美 时钟 显示 时间 代码 集合
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> * { margin: 0; box-sizing: border-box; overflow: hidden; } body { background: #16756f; width: 100%; height: 100vh; display: flex; justify-content: center; align-items: center; } body #circle { width: 650px; height: 650px; background-color: transparent; position: absolute; border: solid 30px #3fb2ab; border-radius: 50%; z-index: -1; } body canvas { box-shadow: 0.2em 0.2em 2em #0008; border: none; outline: none; } </style> </head> <body translate="no"> <div id="circle"></div> <canvas id="canvas"></canvas> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/processing.1.4.8.js"></script> <script > var sketchProc = function(processingInstance) { with (processingInstance) { size(600, 600); frameRate(60); smooth(); var scenes, scene = 0; var clicked = false, hover = false; mouseClicked = function () { clicked = true; }; //buttons var Button = (function() { var Button = function(args) { this.x = args.x; this.y = args.y; this.w = args.w || 100; this.h = args.h || 50; this.content = args.content; this.textSize = args.textSize || 24; this.func = args.func; this.backColor = args.backColor || color(240); this.textColor = color(25); }; Button.prototype = { over: function() { return (mouseX > this.x && mouseX < this.x + this.w && mouseY > this.y && mouseY < this.y + this.h); }, draw: function() { noStroke(); if(this.over()) { hover = true; } fill(this.backColor, this.over() ? 150 : 220); rect(this.x, this.y, this.w, this.h); pushStyle(); textAlign(CENTER, CENTER); textSize(this.textSize); fill(this.textColor); text(this.content, this.x + this.w / 2, this.y + this.h / 2); popStyle(); if(clicked && this.over()) { this.func(); document.getElementById("circle").style.display = (scene === 0 ? "block" : "none"); } } }; return Button; })(); var buttons = { start: new Button({ content: "Start", x: 250, y: 500, func: function() { scene = 1; } }), next: new Button({ content: ">", x: 540, y: 275, w: 50, textSize: 30, func: function() { scene = (scene + 1) % scenes.length; } }), previous: new Button({ content: "<", x: 10, y: 275, w: 50, textSize: 30, func: function() { scene = (scene - 1) % scenes.length; } }) }; //Clock objects var BasicAnalogClock = (function() { BasicAnalogClock = function(args) { this.x = args.x; this.y = args.y; this.diameter = args.diameter || 200; this.radius = this.diameter / 2; this.ticks = args.ticks || 0; //options are 0, 4, or 12 this.showText = args.showText || false; this.textSize = this.radius * 0.12; this.font = args.font || "Trebuchet MS"; this.roman = args.roman || false; this.romans = ["I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"]; this.shadow = args.shadow || { from: -45, to: 135 }; this.hour = 0; this.minute = 0; this.second = 0; //colors this.outerColor = args.outerColor || color(128, 217, 212); this.innerColor = args.innerColor || color(240); this.centerColor = args.centerColor || color(40); this.tickColor = args.tickColor || color(40); this.hourColor = args.hourColor || color(40); this.minuteColor = args.minuteColor || color(40); this.secondColor = args.secondColor || color(240, 0, 0); this.textColor = args.textColor || color(40); this.shadowColor = args.shadowColor || color(40, 10); }; BasicAnalogClock.prototype = { draw: function() { pushMatrix(); translate(this.x, this.y); pushStyle(); //clock face noStroke(); fill(this.outerColor); ellipse(0, 0, this.diameter, this.diameter); fill(this.innerColor); ellipse(0, 0, this.diameter * 0.9, this.diameter * 0.9); //tick marks stroke(this.tickColor); strokeWeight(this.radius * 0.01); for (var i = 0; i < this.ticks; i++){ line( sin(radians(i * (360/this.ticks))) * this.radius * 0.85, cos(radians(i * (360/this.ticks))) * this.radius * 0.85, sin(radians(i * (360/this.ticks))) * this.radius * 0.9, cos(radians(i * (360/this.ticks))) * this.radius * 0.9); } if(this.showText) { textAlign(CENTER, CENTER); fill(this.textColor); textSize(this.textSize); if(this.roman) { //if roman numbers... pushMatrix(); for(var i = 0; i < 12; i++) { rotate(radians(30)); text(this.romans[i], 0, -this.radius * 0.75); } popMatrix(); } else { //if general numbers... for(var i = 0; i < 12; i++){ text(i+1, -sin(radians(210+i*30))*this.radius * 0.75, cos(radians(210+i*30))*this.radius * 0.75); } } } //hour hand stroke(this.hourColor); strokeWeight(this.radius * 0.04); line( 0, 0, sin(radians((this.hour * 30) + (this.minute / 2))) * this.diameter * 0.25, -cos(radians((this.hour * 30) + (this.minute / 2))) * this.diameter * 0.25); //minute hand stroke(this.minuteColor); strokeWeight(this.radius * 0.02); line( 0, 0, sin(radians(this.minute * 6)) * this.diameter * 0.35, -cos(radians(this.minute * 6)) * this.diameter * 0.35); //second hand stroke(this.secondColor); strokeWeight(this.radius * 0.01); line( 0, 0, sin(radians(this.second * 6)) * this.diameter * 0.42, -cos(radians(this.second * 6)) * this.diameter * 0.42); //center circle noStroke(); fill(this.centerColor); ellipse(0, 0, this.radius * 0.07, this.radius * 0.07); //shadow over clock noStroke(); fill(this.shadowColor); arc(0, 0, this.diameter, this.diameter, radians(this.shadow.from), radians(this.shadow.to)); popStyle(); popMatrix(); }, update: function() { this.hour = hour(); this.minute = minute(); this.second = second(); }, tick: function() { this.draw(); this.update(); } }; return BasicAnalogClock; })(); var DetailedAnalogClock = (function() { DetailedAnalogClock = function(args) { this.x = args.x; this.y = args.y; this.diameter = args.diameter || 200; this.radius = this.diameter / 2; this.size = args.size || { date: this.radius * 0.12, hours: this.radius * 0.15 }; this.font = args.font || "Trebuchet MS"; this.roman = args.roman || false; this.romans = ["I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"]; this.showShadow = args.showShadow || false; this.shadow = args.shadow || { from: -45, to: 135 }; this.timer = 0; this.hour = 0; this.minute = 0; this.second = 0; this.day = 0; //colors this.outerColor = args.outerColor || color(40); this.innerColor = args.innerColor || color(255); this.tickColor = args.tickColor || color(40); this.hourColor = args.hourColor || color(40); this.minuteColor = args.minuteColor || color(40); this.secondColor = args.secondColor || color(219, 135, 57); this.dateColor = args.dateColor || color(240); this.dateBackColor = args.dateBackColor || this.outerColor; this.textColor = args.textColor || color(40); this.shadowColor = args.shadowColor || color(40, 10); }; DetailedAnalogClock.prototype = { pad: function(n) { //returns the number with a leading 0 if it's only a single digit return n < 10 ? "0" + n : n; }, draw: function() { pushMatrix(); translate(this.x, this.y); pushStyle(); noStroke(); //clock face //outer fill(this.outerColor); ellipse(0, 0, this.diameter, this.diameter); //inner fill(this.innerColor, 220); ellipse(0, 0, this.diameter * 0.9, this.diameter * 0.9); //inner fill(this.innerColor); ellipse(0, 0, this.diameter * 0.85, this.diameter * 0.85); //date part of clock fill(this.dateBackColor, 150); rect(-this.radius * 0.12, this.radius * 0.27, this.radius * 0.24, this.radius * 0.21, 10); //date textFont(createFont(this.font)); textAlign(CENTER, CENTER); textSize(this.size.date); fill(this.dateColor); text(this.pad(this.day), 0, this.radius * 0.38); //tick marks and numbers strokeCap(SQUARE); stroke(this.tickColor); strokeWeight(this.radius * 0.01); textAlign(CENTER, CENTER); fill(this.textColor); textSize(this.size.hours); for (var i = 0; i < 12; i++) { line( sin(radians(i * 30)) * this.radius * 0.55, cos(radians(i * 30)) * this.radius * 0.55, sin(radians(i * 30)) * this.radius * 0.65, cos(radians(i * 30)) * this.radius * 0.65); //if general numbers... if(!this.roman) { text(i+1, -sin(radians(210+i*30))*this.radius * 0.76, cos(radians(210+i*30))*this.radius * 0.76); } } //if roman numbers... if(this.roman) { pushMatrix(); for (var i = 0; i < 12; i++) { rotate(radians(30)); textSize(this.size.hours); text(this.romans[i], 0, -this.radius * 0.76); } popMatrix(); } strokeWeight(this.radius * 0.007); for (var i = 0; i < 60; i++) { line( sin(radians(i * 6)) * this.radius * 0.65, cos(radians(i * 6)) * this.radius * 0.65, sin(radians(i * 6)) * this.radius * 0.60, cos(radians(i * 6)) * this.radius * 0.60); } //center circle noStroke(); fill(this.outerColor, 20); ellipse(0, 0, this.radius * 0.25, this.radius * 0.25); //hour hand stroke(this.hourColor); strokeWeight(this.radius * 0.04); line( sin(radians((this.hour * 30) + (this.minute / 2))) * this.diameter * -0.05, -cos(radians((this.hour * 30) + (this.minute / 2))) * this.diameter * -0.05, sin(radians((this.hour * 30) + (this.minute / 2))) * this.diameter * 0.25, -cos(radians((this.hour * 30) + (this.minute / 2))) * this.diameter * 0.25); //minute hand stroke(this.minuteColor); strokeWeight(this.radius * 0.02); line( sin(radians(this.minute * 6)) * this.diameter * -0.05, -cos(radians(this.minute * 6)) * this.diameter * -0.05, sin(radians(this.minute * 6)) * this.diameter * 0.35, -cos(radians(this.minute * 6)) * this.diameter * 0.35); //second hand stroke(this.secondColor); strokeWeight(this.radius * 0.01); line( sin(radians(this.second * 6)) * this.diameter * -0.1, -cos(radians(this.second * 6)) * this.diameter * -0.1, sin(radians(this.second * 6)) * this.diameter * 0.42, -cos(radians(this.second * 6)) * this.diameter * 0.42); //center circle noStroke(); fill(this.secondColor); ellipse(0, 0, this.radius * 0.07, this.radius * 0.07); //shadow over clock if(this.showShadow) { noStroke(); fill(this.shadowColor); arc(0, 0, this.diameter, this.diameter, radians(this.shadow.from), radians(this.shadow.to)); } popStyle(); popMatrix(); }, update: function() { if(this.timer++ % 10 === 0) { this.hour = hour(); this.minute = minute(); this.second = second(); this.day = day(); } }, tick: function() { this.draw(); this.update(); } }; return DetailedAnalogClock; })(); var TriClock = (function() { TriClock = function(args) { this.x = args.x; this.y = args.y; this.diameter = args.diameter || 200; this.radius = this.diameter / 2; this.tickRadius = this.diameter * 0.37; this.hour = 0; this.minute = 0; this.second = 0; //colors this.outerColor = args.outerColor || color(235, 38, 58, 200); this.innerColor = args.innerColor || color(50); this.triangleColor = args.triangleColor || color(235, 38, 58, 50); this.tickMajorColor = args.tickMajorColor || color(235, 38, 58, 150); this.tickMinorColor = args.tickMinorColor || color(84, 84, 84, 200); this.tickLinesColor = args.tickLinesColor || color(255, 10); this.hourColor = args.hourColor || color(250, 70); this.minuteColor = args.minuteColor || color(250, 70); this.secondColor = args.secondColor || color(250, 70); }; TriClock.prototype = { draw: function() { pushMatrix(); translate(this.x, this.y); pushStyle(); //clock face noStroke(); //outer fill(this.outerColor); ellipse(0, 0, this.diameter, this.diameter); //inner fill(this.innerColor); ellipse(0, 0, this.diameter * 0.9, this.diameter * 0.9); //lines between ticks strokeWeight(1); stroke(this.tickLinesColor); for (var i = 0; i < 6; i++){ line( sin(radians(i * 30)) * this.tickRadius, cos(radians(i * 30)) * this.tickRadius, -sin(radians(i * 30)) * this.tickRadius, -cos(radians(i * 30)) * this.tickRadius); } //tick marks noStroke(); fill(this.tickMinorColor); for (var i = 0; i < 60; i++){ ellipse( sin(radians(i * 6)) * this.tickRadius, cos(radians(i * 6)) * this.tickRadius, this.radius * 0.015, this.radius * 0.015); } fill(this.tickMajorColor); for (var i = 0; i < 12; i++){ ellipse( sin(radians(i * 30)) * this.tickRadius, cos(radians(i * 30)) * this.tickRadius, this.radius * 0.08, this.radius * 0.08); } //triangle noStroke(); fill(this.triangleColor); triangle( sin(radians(this.hour * 30)) * this.tickRadius, -cos(radians(this.hour * 30)) * this.tickRadius, sin(radians(this.minute * 6)) * this.tickRadius, -cos(radians(this.minute * 6)) * this.tickRadius, sin(radians(this.second * 6)) * this.tickRadius, -cos(radians(this.second * 6)) * this.tickRadius ); //hour hand fill(this.innerColor, 150); stroke(this.hourColor); strokeWeight(this.radius * 0.01); ellipse( sin(radians(this.hour * 30)) * this.tickRadius, -cos(radians(this.hour * 30)) * this.tickRadius, this.radius * 0.2, this.radius * 0.2); //minute hand stroke(this.minuteColor); strokeWeight(this.radius * 0.01); ellipse( sin(radians(this.minute * 6)) * this.tickRadius, -cos(radians(this.minute * 6)) * this.tickRadius, this.radius * 0.15, this.radius * 0.15); //second hand stroke(this.secondColor); strokeWeight(this.radius * 0.01); ellipse( sin(radians(this.second * 6)) * this.tickRadius, -cos(radians(this.second * 6)) * this.tickRadius, this.radius * 0.1, this.radius * 0.1); popStyle(); popMatrix(); }, update: function() { this.hour = hour(); this.minute = minute(); this.second = second(); }, tick: function() { this.draw(); this.update(); } }; return TriClock; })(); var FruitClock = (function() { FruitClock = function(args) { this.x = args.x; this.y = args.y; this.diameter = args.diameter || 200; this.radius = this.diameter / 2; this.pips = []; this.pipRadius = this.radius * 0.07; this.showTicks = args.showTicks || false; this.showPips = args.showPips || false; this.timer = 0; this.hour = 0; this.minute = 0; this.second = 0; //colors this.outerColor = args.outerColor || color(240, 92, 34); this.innerColor = args.innerColor || color(246, 134, 87); this.pipColor = args.pipColor || color(245, 124, 72); this.leafColor = args.leafColor || color(112, 189, 99); this.tickColor = args.tickColor || color(171, 57, 9); this.centerColor = args.centerColor || color(245, 124, 72); this.hourColor = args.hourColor || color(171, 57, 9); this.minuteColor = args.minuteColor || color(219, 73, 12); this.secondColor = args.secondColor || color(249, 165, 129); this.setup(); }; FruitClock.prototype = { setup: function() { if(this.showPips) { //adds pips within the current radius of the fruit for(var i = 0; i < 20; i++) { var a = Math.random() * 360; var r = (this.radius * 0.85 - this.pipRadius / 2) * sqrt(random()); var x = r * cos(radians(a)); var y = r * sin(radians(a)); this.pips.push({ x: x, y: y, diameter: random(this.pipRadius * 0.8, this.pipRadius) }); } } }, draw: function() { pushMatrix(); translate(this.x, this.y); pushStyle(); //leaf at top of orange noFill(); stroke(this.leafColor); strokeWeight(this.radius * 0.06); line( 0, -this.radius * 0.9, this.radius * 0.05, -this.radius * 1.2 ); noStroke(); fill(this.leafColor); beginShape(); vertex(0, -this.radius * 0.9); bezierVertex( this.radius * 0.01, -this.radius * 1.0, this.radius * 0.04, -this.radius * 1.15, -this.radius * 0.15, -this.radius * 1.3 ); bezierVertex( -this.radius * 0.19, -this.radius * 1.15, -this.radius * 0.19, -this.radius * 1.0, 0, -this.radius * 0.9 ); endShape(CLOSE); //clock face noStroke(); fill(this.outerColor); ellipse(0, 0, this.diameter, this.diameter); fill(this.innerColor); ellipse(0, 0, this.diameter * 0.9, this.diameter * 0.9); //display pips fill(this.pipColor); for(var i = 0; i < this.pips.length; i++) { ellipse(this.pips[i].x, this.pips[i].y, this.pips[i].diameter, this.pips[i].diameter); } //tick marks if(this.showTicks) { stroke(this.tickColor, 100); strokeWeight(this.radius * 0.01); for (var i = 0; i < 12; i++){ line( sin(radians(i * 30)) * this.radius * 0.82, cos(radians(i * 30)) * this.radius * 0.82, sin(radians(i * 30)) * this.radius * 0.90, cos(radians(i * 30)) * this.radius * 0.90); } } //hour hand strokeCap(SQUARE); stroke(this.hourColor); strokeWeight(this.radius * 0.05); line( 0, 0, sin(radians((this.hour * 30) + (this.minute / 2))) * this.diameter * 0.35, -cos(radians((this.hour * 30) + (this.minute / 2))) * this.diameter * 0.35); //minute hand stroke(this.minuteColor); strokeWeight(this.radius * 0.04); line( 0, 0, sin(radians(this.minute * 6)) * this.diameter * 0.40, -cos(radians(this.minute * 6)) * this.diameter * 0.40); //second hand stroke(this.secondColor); strokeWeight(this.radius * 0.03); line( 0, 0, sin(radians(this.second * 6)) * this.diameter * 0.44, -cos(radians(this.second * 6)) * this.diameter * 0.44); //center circle noStroke(); fill(this.centerColor); ellipse(0, 0, this.radius * 0.11, this.radius * 0.10); popStyle(); popMatrix(); }, update: function() { if(this.timer++ % 10 === 0) { this.hour = hour(); this.minute = minute(); this.second = second(); } }, tick: function() { this.draw(); this.update(); } }; return FruitClock; })(); var ArcClock = (function() { ArcClock = function(args) { this.x = args.x; this.y = args.y; this.diameter = args.diameter || 200; this.radius = this.diameter / 2; this.hourColor = args.hourColor || color(39, 175, 97); this.minuteColor = args.minuteColor || color(254, 183, 55); this.secondColor = args.secondColor || color(220, 84, 62); this.hourBackColor = args.hourBackColor || color(55, 71, 79); this.minuteBackColor = args.minuteBackColor || color(69, 90, 100); this.secondBackColor = args.secondBackColor || color(84, 110, 122); this.centerColor = args.centerColor || color(38, 50, 56); this.textColor = args.textColor || color(240); this.textSize = args.textSize || this.diameter * 0.10; this.font = args.font || "Trebuchet MS"; this.hour = 0; this.minute = 0; this.second = 0; }; ArcClock.prototype = { pad: function(n) { //returns the number with a leading 0 if it's only a single digit return n < 10 ? "0" + n : n; }, draw: function() { pushMatrix(); translate(this.x, this.y); pushStyle(); //seconds noStroke(); fill(this.secondBackColor); ellipse(0, 0, this.diameter, this.diameter); //arc fill(this.secondColor); arc(0, 0, this.diameter, this.diameter, radians(-90), radians((this.second * 6) - 90)); //minutes fill(this.minuteBackColor); ellipse(0, 0, this.diameter * 0.88, this.diameter * 0.88); //arc fill(this.minuteColor); arc(0, 0, this.diameter * 0.88, this.diameter * 0.88, radians(-90), radians((this.minute * 6) - 90)); //hour fill(this.hourBackColor); ellipse(0, 0, this.diameter * 0.72, this.diameter * 0.72); //arc fill(this.hourColor); arc(0, 0, this.diameter * 0.72, this.diameter * 0.72, radians(-90), radians(((this.hour % 12) * 30 + (this.minute / 2)) - 90)); //center fill(this.centerColor); ellipse(0, 0, this.diameter * 0.52, this.diameter * 0.52); //digital time in center of clock textFont(createFont(this.font)); textAlign(CENTER, CENTER); .........完整代码请登录后点击上方下载按钮下载查看
网友评论0