A Processing.js sketch that highlights multiple things:
- How to use a mostly transparent circle as a cursor
- Detecting mouse events, such as hovering over a circle and taking action upon mouse clicks
<!doctype html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>No Cursor</title> | |
<script src="http://cloud.github.com/downloads/processing-js/processing-js/processing-1.4.1.min.js"></script> | |
<style> | |
#sketch { | |
text-align: center; | |
} | |
</style> | |
</head> | |
<body> | |
<div id="sketch"><canvas data-processing-sources="noCursor.pde"></canvas></div> | |
</body> | |
</html> |
int circleX, circleY; | |
int circleSize = 200; | |
float mouseHoverDist; | |
int numClicks = 0; | |
PFont f; | |
void setup() { | |
size(window.innerWidth, window.innerHeight); | |
smooth(); | |
// turn off the cursor | |
noCursor(); | |
// set circle to center of the screen | |
circleX = width/2; | |
circleY = height/2; | |
f = createFont("sans-serif", 32); | |
textFont(f, 18); | |
} | |
void draw() { | |
background(150); | |
// calculates the distance between mouse location and circle position | |
mouseHoverDist = dist(mouseX, mouseY, circleX, circleY); | |
// if the distance is within the circle | |
fill(mouseHoverDist < circleSize/2 ? color(255, 0, 0, 100) : color(0, 255, 0, 100)); | |
ellipse(circleX, circleY, circleSize, circleSize); | |
fill(255); | |
text("Number of clicks: " + numClicks, 10, height-20); | |
// always run at the end of the loop so it's visible over any other elements | |
drawCursor(); | |
} | |
void drawCursor() { | |
noStroke(); | |
// if you use other ellipseModes, this will ensure | |
// the center point of the circle is where your mouse is | |
ellipseMode(CENTER); | |
// mostly transparent circle (alpha value = 50) | |
fill(255, 50); | |
// circle moves with you mouse X and Y | |
ellipse(mouseX, mouseY, 20, 20); | |
} | |
// where one click mouse events happen | |
void mousePressed() { | |
// if the mouse is over the circle and you've clicked the mouse | |
// print that you've clicked the circle and increment the number of clicks recorded | |
if (mouseHoverDist < circleSize/2) numClicks++; | |
} |