Firefox/Projects/Multitouch Polish/DOM Events/Examples: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 7: Line 7:
if (lastused >= 4) return;
if (lastused >= 4) return;
if (assignedFingers[event.streamId]) {
if (assignedFingers[event.streamId]) {
divId = assignedFingers[event.streamId];
  divId = assignedFingers[event.streamId];
} else {
} else {
divId = "trackingdiv" + (++lastused);
  divId = "trackingdiv" + (++lastused);
assignedFingers[event.streamId] = divId;
  assignedFingers[event.streamId] = divId;
}
}
document.getElementById(divId).style.left = event.clientX + 'px';
  document.getElementById(divId).style.left = event.clientX + 'px';
document.getElementById(divId).style.top  = event.clientY + 'px';
  document.getElementById(divId).style.top  = event.clientY + 'px';
}
}
document.addEventListener("MozTouchMove", touchMove, false);
document.addEventListener("MozTouchMove", touchMove, false);
Line 70: Line 70:
function touchmove(e) {
function touchmove(e) {


   var im1 = document.getElementById("image1");
   var img1 = document.getElementById("image1");
   var im2 = document.getElementById("image2");
   var img2 = document.getElementById("image2");
   var diagonal, sidesize;
   var diagonal, sidesize;
    
    
   if (fingerIds[0] == e.streamId) { // finger 1
   if (fingerIds[0] == e.streamId) { // finger 1
X1 = e.clientX;
    X1 = e.clientX;
Y1 = e.clientY;
    Y1 = e.clientY;


   } else if (fingerIds[1] == e.streamId) { // finger 2
   } else if (fingerIds[1] == e.streamId) { // finger 2
     diagonal = dist(X1, e.clientX, Y1, e.clientY);
     diagonal = dist(X1, e.clientX, Y1, e.clientY);
sidesize = diagonal / Math.sqrt(2);
    sidesize = diagonal / Math.sqrt(2);
im1.style.left = ((e.clientX < X1) ? e.clientX : X1) + "px"
    img1.style.left = ((e.clientX < X1) ? e.clientX : X1) + "px"
im1.style.top  = ((e.clientY < Y1) ? e.clientY : Y1) + "px"
    img1.style.top  = ((e.clientY < Y1) ? e.clientY : Y1) + "px"
im1.style.width  = sidesize + "px"
    img1.style.width  = sidesize + "px"
im1.style.height = sidesize + "px"
    img1.style.height = sidesize + "px"


   } else if (fingerIds[2] == e.streamId) { // finger 3
   } else if (fingerIds[2] == e.streamId) { // finger 3
     X2 = e.clientX;
     X2 = e.clientX;
Y2 = e.clientY;
    Y2 = e.clientY;


   } else if (fingerIds[3] == e.streamId) { // finger 4
   } else if (fingerIds[3] == e.streamId) { // finger 4
     diagonal = dist(X2, e.clientX, Y2, e.clientY);
     diagonal = dist(X2, e.clientX, Y2, e.clientY);
sidesize = diagonal / Math.sqrt(2);
    sidesize = diagonal / Math.sqrt(2);
im2.style.left = ((e.clientX < X2) ? e.clientX : X2) + "px"
    img2.style.left = ((e.clientX < X2) ? e.clientX : X2) + "px"
im2.style.top  = ((e.clientY < Y2) ? e.clientY : Y2) + "px"
    img2.style.top  = ((e.clientY < Y2) ? e.clientY : Y2) + "px"


im2.style.width  = sidesize + "px"
    img2.style.width  = sidesize + "px"
im2.style.height = sidesize + "px"
    img2.style.height = sidesize + "px"
   }
   }


}</pre>
}</pre>

Revision as of 20:37, 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"	
  }

}