Firefox/Projects/Multitouch Polish/DOM Events/Examples: Difference between revisions
< Firefox | Projects | Multitouch Polish | DOM Events
(Created page with '== Drawing canvas == <code></code> <pre>var canvasctx = null; function fadeOut() { canvasctx.fillStyle = 'rgba(255,255,255,.15)'; canvasctx.fillRect(0,0,1100,600); } wind…') |
No edit summary |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
== Tracking divs == | |||
<pre>var assignedFingers = {}; | |||
var lastused = 0; | |||
function touchMove(event) { | |||
var divId; | |||
if (lastused >= 4) return; | |||
if (assignedFingers[event.streamId]) { | |||
divId = assignedFingers[event.streamId]; | |||
} else { | |||
divId = "trackingdiv" + (++lastused); | |||
assignedFingers[event.streamId] = divId; | |||
} | |||
document.getElementById(divId).style.left = event.clientX + 'px'; | |||
document.getElementById(divId).style.top = event.clientY + 'px'; | |||
} | |||
document.addEventListener("MozTouchMove", touchMove, false); | |||
document.addEventListener("MozTouchRelease", function() { lastused--; }, false);</pre> | |||
== Drawing canvas == | == Drawing canvas == | ||
<pre>var canvasctx = null; | <pre>var canvasctx = null; | ||
| Line 22: | Line 40: | ||
canvasctx = document.getElementById("drawingcanvas").getContext('2d'); | canvasctx = document.getElementById("drawingcanvas").getContext('2d'); | ||
}, false);</pre> | }, false);</pre> | ||
== Image resizing == | |||
This example keeps the image ratio to a square by calculating the distance between the two fingers and using that as the diagonal size of the image | |||
<pre>document.addEventListener("MozTouchDown", touchdown, false); | |||
document.addEventListener("MozTouchRelease", touchrelease, false); | |||
document.addEventListener("MozTouchMove", touchmove, false); | |||
var X1, Y1, X2, Y2; | |||
var fingersTracked = 0; | |||
var fingerIds = [-1,-1,-1,-1]; | |||
function touchdown(e) { | |||
if (fingersTracked < 4) | |||
fingerIds[fingersTracked] = e.streamId; | |||
fingersTracked++; | |||
} | |||
function touchrelease(e) { | |||
fingersTracked--; | |||
} | |||
function dist(x1,x2,y1,y2) { | |||
return Math.sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) ); | |||
} | |||
function touchmove(e) { | |||
var img1 = document.getElementById("image1"); | |||
var img2 = document.getElementById("image2"); | |||
var diagonal, sidesize; | |||
if (fingerIds[0] == e.streamId) { // finger 1 | |||
X1 = e.clientX; | |||
Y1 = e.clientY; | |||
} else if (fingerIds[1] == e.streamId) { // finger 2 | |||
diagonal = dist(X1, e.clientX, Y1, e.clientY); | |||
sidesize = diagonal / Math.sqrt(2); | |||
img1.style.left = ((e.clientX < X1) ? e.clientX : X1) + "px" | |||
img1.style.top = ((e.clientY < Y1) ? e.clientY : Y1) + "px" | |||
img1.style.width = sidesize + "px" | |||
img1.style.height = sidesize + "px" | |||
} else if (fingerIds[2] == e.streamId) { // finger 3 | |||
X2 = e.clientX; | |||
Y2 = e.clientY; | |||
} else if (fingerIds[3] == e.streamId) { // finger 4 | |||
diagonal = dist(X2, e.clientX, Y2, e.clientY); | |||
sidesize = diagonal / Math.sqrt(2); | |||
img2.style.left = ((e.clientX < X2) ? e.clientX : X2) + "px" | |||
img2.style.top = ((e.clientY < Y2) ? e.clientY : Y2) + "px" | |||
img2.style.width = sidesize + "px" | |||
img2.style.height = sidesize + "px" | |||
} | |||
}</pre> | |||
== Image crop == | |||
The code for the image crop is just about resizing as well, except that we let a free aspect ratio resize of the div. | |||
<pre>function touchmove(e) { | |||
var t = document.getElementById("cropbox"); | |||
if (fingerIds[0] == e.streamId) { // finger 1 | |||
t.style.left = e.clientX + "px"; | |||
t.style.top = e.clientY + "px"; | |||
X = e.clientX; | |||
Y = e.clientY; | |||
} else if (fingerIds[1] == e.streamId) { // finger 2 | |||
t.style.width = (e.clientX - X) + "px" | |||
t.style.height = (e.clientY - Y) + "px" | |||
} | |||
} | |||
</pre> | |||
== Pong == | |||
Omitting the code for rendering the graphics and the game logic, the part that controls the game pads is really simple: the contact point that is moving on the left side of the game area sets the position for the first player, and the contact point on the right side is the second player | |||
<pre>function touchmove(e) { | |||
if (e.clientX < screen.width / 2) | |||
//we subtract padsize/2 to center the pad on the touch point | |||
player1 = e.clientY - padsize/2; | |||
else | |||
player2 = e.clientY - padsize/2; | |||
}</pre> | |||
Latest revision as of 20:52, 19 August 2009
Tracking divs
var assignedFingers = {};
var lastused = 0;
function touchMove(event) {
var divId;
if (lastused >= 4) return;
if (assignedFingers[event.streamId]) {
divId = assignedFingers[event.streamId];
} else {
divId = "trackingdiv" + (++lastused);
assignedFingers[event.streamId] = divId;
}
document.getElementById(divId).style.left = event.clientX + 'px';
document.getElementById(divId).style.top = event.clientY + 'px';
}
document.addEventListener("MozTouchMove", touchMove, false);
document.addEventListener("MozTouchRelease", function() { lastused--; }, false);
Drawing canvas
var canvasctx = null;
function fadeOut() {
canvasctx.fillStyle = 'rgba(255,255,255,.15)';
canvasctx.fillRect(0,0,1100,600);
}
window.setInterval(fadeOut,180);
function listenTo(event) {
canvasctx.fillStyle='rgba(0,0,0,1)';
canvasctx.beginPath();
canvasctx.arc(event.clientX, event.clientY, 20, 0, Math.PI*2, 1);
canvasctx.fill();
canvasctx.closePath();
}
document.addEventListener("MozTouchMove", listenTo, false);
document.addEventListener("DOMContentLoaded", function() {
canvasctx = document.getElementById("drawingcanvas").getContext('2d');
}, false);
Image resizing
This example keeps the image ratio to a square by calculating the distance between the two fingers and using that as the diagonal size of the image
document.addEventListener("MozTouchDown", touchdown, false);
document.addEventListener("MozTouchRelease", touchrelease, false);
document.addEventListener("MozTouchMove", touchmove, false);
var X1, Y1, X2, Y2;
var fingersTracked = 0;
var fingerIds = [-1,-1,-1,-1];
function touchdown(e) {
if (fingersTracked < 4)
fingerIds[fingersTracked] = e.streamId;
fingersTracked++;
}
function touchrelease(e) {
fingersTracked--;
}
function dist(x1,x2,y1,y2) {
return Math.sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );
}
function touchmove(e) {
var img1 = document.getElementById("image1");
var img2 = document.getElementById("image2");
var diagonal, sidesize;
if (fingerIds[0] == e.streamId) { // finger 1
X1 = e.clientX;
Y1 = e.clientY;
} else if (fingerIds[1] == e.streamId) { // finger 2
diagonal = dist(X1, e.clientX, Y1, e.clientY);
sidesize = diagonal / Math.sqrt(2);
img1.style.left = ((e.clientX < X1) ? e.clientX : X1) + "px"
img1.style.top = ((e.clientY < Y1) ? e.clientY : Y1) + "px"
img1.style.width = sidesize + "px"
img1.style.height = sidesize + "px"
} else if (fingerIds[2] == e.streamId) { // finger 3
X2 = e.clientX;
Y2 = e.clientY;
} else if (fingerIds[3] == e.streamId) { // finger 4
diagonal = dist(X2, e.clientX, Y2, e.clientY);
sidesize = diagonal / Math.sqrt(2);
img2.style.left = ((e.clientX < X2) ? e.clientX : X2) + "px"
img2.style.top = ((e.clientY < Y2) ? e.clientY : Y2) + "px"
img2.style.width = sidesize + "px"
img2.style.height = sidesize + "px"
}
}
Image crop
The code for the image crop is just about resizing as well, except that we let a free aspect ratio resize of the div.
function touchmove(e) {
var t = document.getElementById("cropbox");
if (fingerIds[0] == e.streamId) { // finger 1
t.style.left = e.clientX + "px";
t.style.top = e.clientY + "px";
X = e.clientX;
Y = e.clientY;
} else if (fingerIds[1] == e.streamId) { // finger 2
t.style.width = (e.clientX - X) + "px"
t.style.height = (e.clientY - Y) + "px"
}
}
Pong
Omitting the code for rendering the graphics and the game logic, the part that controls the game pads is really simple: the contact point that is moving on the left side of the game area sets the position for the first player, and the contact point on the right side is the second player
function touchmove(e) {
if (e.clientX < screen.width / 2)
//we subtract padsize/2 to center the pad on the touch point
player1 = e.clientY - padsize/2;
else
player2 = e.clientY - padsize/2;
}