1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

Touch: long-press initiate lasso

This commit is contained in:
Nick O'Leary 2014-05-13 00:42:24 +01:00
parent aa4bf4d640
commit 0e8f0735cc

View File

@ -39,6 +39,7 @@ RED.view = function() {
dirty = false, dirty = false,
lasso = null, lasso = null,
showStatus = false, showStatus = false,
touchStartTime = 0,
clickTime = 0, clickTime = 0,
clickElapsed = 0, clickElapsed = 0,
startTouchDistance = 0, startTouchDistance = 0,
@ -72,7 +73,14 @@ RED.view = function() {
.on("mousemove", canvasMouseMove) .on("mousemove", canvasMouseMove)
.on("mousedown", canvasMouseDown) .on("mousedown", canvasMouseDown)
.on("mouseup", canvasMouseUp) .on("mouseup", canvasMouseUp)
.on("touchend",canvasMouseUp) .on("touchend", function() {
clearTimeout(touchStartTime);
touchStartTime = null;
if (lasso) {
outer_background.attr("fill","#fff");
}
canvasMouseUp.call(this);
})
.on("touchcancel", canvasMouseUp) .on("touchcancel", canvasMouseUp)
.on("touchstart", function(){ .on("touchstart", function(){
if (d3.event.touches.length>1) { if (d3.event.touches.length>1) {
@ -94,12 +102,41 @@ RED.view = function() {
] ]
startTouchDistance = Math.sqrt((a*a)+(b*b)); startTouchDistance = Math.sqrt((a*a)+(b*b));
} else { } else {
var touch0 = d3.event.touches.item(0);
startTouchCenter = [touch0.pageX,touch0.pageY];
startTouchDistance = 0; startTouchDistance = 0;
var point = d3.touches(this)[0];
touchStartTime = setTimeout(function() {
lasso = vis.append('rect')
.attr("ox",point[0])
.attr("oy",point[1])
.attr("rx",2)
.attr("ry",2)
.attr("x",point[0])
.attr("y",point[1])
.attr("width",0)
.attr("height",0)
.attr("class","lasso");
touchStartTime = null;
outer_background.attr("fill","#f3f3f3");
},1000);
canvasMouseDown(); canvasMouseDown();
} }
}) })
.on("touchmove", function(){ .on("touchmove", function(){
if (d3.event.touches.length<2) { if (d3.event.touches.length<2) {
if (touchStartTime) {
var touch0 = d3.event.touches.item(0);
var dx = (touch0.pageX-startTouchCenter[0]);
var dy = (touch0.pageY-startTouchCenter[1]);
var d = Math.sqrt(dx*dx+dy*dy);
if (d > 7) {
clearTimeout(touchStartTime);
touchStartTime = null;
}
} else if (lasso) {
d3.event.preventDefault();
}
canvasMouseMove.call(this); canvasMouseMove.call(this);
} else { } else {
var touch0 = d3.event.touches.item(0); var touch0 = d3.event.touches.item(0);