P5.js Clock
How do I make an p5.js clock?
What is a p5.js clock? How do you make a p5.js clock? This script and codes were developed by Ruslan Marin on 07 December 2022, Wednesday.
P5.js Clock - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>p5.js Clock</title>
</head>
<body> <div id="canvasContainer"><div> <script src='https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.6/p5.min.js'></script> <script src="js/index.js"></script>
</body>
</html>
P5.js Clock - Script Codes JS Codes
var sketchProc = function(p5) { var hhR; var hhTheta = 0; var hhX; var hhY = 0; var mmR; var mmTheta = 0; var mmX; var mmY = 0; var ssR; var ssTheta = 0; var ssX; var ssY = 0; var ssmR; var ssmTheta = 0; var ssmX; var ssmY = 0; var msR; var msTheta = 0; var msX; var msY = 0; var tickR; var tickSize = 5; var calculateNextFrame = function() { var time = new Date(); msTheta = 2*Math.PI / 1000 * time.getMilliseconds(); msX = msR * Math.cos(msTheta); msY = msR * Math.sin(msTheta); ssTheta = 2*Math.PI / 60 * time.getSeconds(); ssX = ssR * Math.cos(ssTheta); ssY = ssR * Math.sin(ssTheta); ssmTheta = 2*Math.PI / 60 * time.getSeconds() + msTheta / 60; ssmX = ssmR * Math.cos(ssmTheta); ssmY = ssmR * Math.sin(ssmTheta); mmTheta = 2*Math.PI / 60 * time.getMinutes() + ssTheta / 60; mmX = mmR * Math.cos(mmTheta); mmY = mmR * Math.sin(mmTheta); hhTheta = 2*Math.PI / 12 * time.getHours() + mmTheta / 12; hhX = hhR * Math.cos(hhTheta); hhY = hhR * Math.sin(hhTheta); }; var drawTicks = function() { var tickTheta = 0; var tickX = tickR; var tickY = 0; var d = tickSize; p5.fill(0,255,0); for (var i = 0; i < 60; i++) { tickTheta = 2*Math.PI / 60 * i; tickX = tickR * Math.cos(tickTheta); tickY = tickR * Math.sin(tickTheta); d = i % 5 === 0 ? tickSize * 2 : tickSize; p5.ellipse(tickX, tickY, d, d); } }; var drawCenter = function() { p5.fill(255, 255, 0); p5.ellipse(0,0,10,10); }; var drawHand = function(x, y) { p5.stroke(255,255,0); p5.line(0, 0, x, y); p5.stroke(0); }; var drawMs = function() { p5.fill(0); p5.ellipse(msX, msY, tickSize * 3, tickSize * 3); }; var drawDigitalTime = function() { var time = new Date(); var hh = (hh = time.getHours()) > 9 ? hh : "0" + hh; var mm = (mm = time.getMinutes()) > 9 ? mm : "0" + mm; var ss = (ss = time.getSeconds()) > 9 ? ss : "0" + ss; var ms = (ms = time.getMilliseconds()) > 99 ? ms : ms > 9 ? "0" + ms : "00" + ms; var formattedTime = + hh + ":" + mm + ":" + ss + "." + ms; p5.fill(0, 255, 0); p5.textAlign(p5.LEFT, p5.TOP); p5.textSize(24); p5.text(formattedTime, 5, 5); p5.textSize(18); p5.push(); p5.translate(p5.width/2, p5.height/2); p5.rotate(-Math.PI/2); p5.translate(hhX, hhY); p5.rotate(Math.PI/2); p5.textAlign(p5.CENTER, p5.CENTER); p5.fill(0); p5.ellipse(0, 0, 24, 24); p5.fill(0, 255, 0); p5.text(hh, 0, 0); p5.pop(); p5.push(); p5.translate(p5.width/2, p5.height/2); p5.rotate(-Math.PI/2); p5.translate(mmX, mmY); p5.rotate(Math.PI/2); p5.textAlign(p5.CENTER, p5.CENTER); p5.fill(0); p5.ellipse(0, 0, 24, 24); p5.fill(0, 255, 0); p5.text(mm, 0, 0); p5.pop(); }; p5.setup = function() { p5.frameRate(30); p5.createCanvas(400,400); p5.colorMode(p5.RGB); hhX = hhR = p5.width / 5; mmX = mmR = p5.width / 3; ssX = ssR = p5.width / 3; ssmX = ssmR = p5.width / 3; msX = msR = p5.width / 2 - p5.width / 8; tickR = p5.width / 2 - p5.width / 8; }; p5.draw = function(){ p5.background(0); calculateNextFrame(); p5.push(); p5.translate(p5.width/2, p5.height/2); p5.rotate(-Math.PI/2); drawTicks(); drawCenter(); drawHand(hhX, hhY); drawHand(mmX, mmY); drawHand(ssX, ssY); drawHand(ssmX, ssmY); drawMs(); p5.fill(255,255,0); p5.arc(0, 0, ssR * 2, ssR * 2, ssTheta, ssmTheta); p5.pop(); drawDigitalTime(); };
};
new p5(sketchProc, document.getElementById("canvasContainer"));
Developer | Ruslan Marin |
Username | marinru |
Uploaded | December 07, 2022 |
Rating | 3 |
Size | 2,414 Kb |
Views | 24,288 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
SimplePager | 4,584 Kb |
Vue.js User Input | 1,565 Kb |
Sidescroller with p5.js | 2,455 Kb |
KO Components Demo | 2,994 Kb |
Vue.js Attribute Binding | 1,531 Kb |
Phone Call Links | 1,217 Kb |
Vue.js Conditional Visibility | 1,520 Kb |
A Pen by Ruslan Marin | 1,561 Kb |
Component State | 3,702 Kb |
Component Props | 3,113 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
Simple jQuery Slider | Jurbank | 2,874 Kb |
Hovers with popups | Zacharyolson | 2,380 Kb |
AngularJS Datalist Directive | M-e-conroy | 2,366 Kb |
Login-ng-modal | Heedoo | 3,566 Kb |
Wikipedia Viewer | Odylic | 2,333 Kb |
Sticky menu on scroll | Senff | 2,869 Kb |
Growing Root - Scroll control - CANVAS | Cjonasw | 2,342 Kb |
Free css icon set v2 - one div | Ben_jammin | 0 Kb |
CSS Piano | Dannystyle | 5,138 Kb |
Simple checkbox style | Vncnz | 2,628 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!