Browser event and coordinates: Difference between revisions
From JSXGraph Wiki
No edit summary |
No edit summary |
||
(11 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
This example shows how to add a point whenever the user clicks on the board. The function getMouseCoords extracts the click coordinates from the event object and returns a JXG.Coords object with the point's coordinates on the board | This example shows how to add a point whenever the user clicks on the board. The function getMouseCoords extracts the click coordinates from the event object and returns a JXG.Coords object with the point's coordinates on the board. The for loop in the event listener is to check if there is already a point as we don't want to create a point in this case. | ||
<jsxgraph width="400" height="400"> | <jsxgraph width="400" height="400"> | ||
var getMouseCoords = function(e) { | var getMouseCoords = function(e, i) { | ||
var cPos = board. | var cPos = board.getCoordsTopLeftCorner(e, i), | ||
absPos = JXG.getPosition(e), | absPos = JXG.getPosition(e, i), | ||
dx = absPos[0]-cPos[0], | dx = absPos[0]-cPos[0], | ||
dy = absPos[1]-cPos[1]; | dy = absPos[1]-cPos[1]; | ||
Line 10: | Line 10: | ||
return new JXG.Coords(JXG.COORDS_BY_SCREEN, [dx, dy], board); | return new JXG.Coords(JXG.COORDS_BY_SCREEN, [dx, dy], board); | ||
}, | }, | ||
down = function(e) { | |||
var | var canCreate = true, i, coords, el; | ||
for ( | if (e[JXG.touchProperty]) { | ||
if(JXG.isPoint(board.objects[ | // index of the finger that is used to extract the coordinates | ||
i = 0; | |||
} | |||
coords = getMouseCoords(e, i); | |||
for (el in board.objects) { | |||
if(JXG.isPoint(board.objects[el]) && board.objects[el].hasPoint(coords.scrCoords[1], coords.scrCoords[2])) { | |||
canCreate = false; | |||
break; | break; | ||
} | } | ||
} | } | ||
if ( | if (canCreate) { | ||
board.create('point', [coords.usrCoords[1], coords.usrCoords[2]]); | board.create('point', [coords.usrCoords[1], coords.usrCoords[2]]); | ||
} | } | ||
Line 27: | Line 32: | ||
board = JXG.JSXGraph.initBoard('jxgbox', {boundingbox: [-5,5,5,-5], axis: true}); | board = JXG.JSXGraph.initBoard('jxgbox', {boundingbox: [-5,5,5,-5], axis: true}); | ||
board. | board.on('down', down); | ||
</jsxgraph> | </jsxgraph> | ||
Line 33: | Line 38: | ||
<source lang="javascript"> | <source lang="javascript"> | ||
var getMouseCoords = function(e) { | var getMouseCoords = function(e, i) { | ||
var cPos = board. | var cPos = board.getCoordsTopLeftCorner(e, i), | ||
absPos = JXG.getPosition(e), | absPos = JXG.getPosition(e, i), | ||
dx = absPos[0]-cPos[0], | dx = absPos[0]-cPos[0], | ||
dy = absPos[1]-cPos[1]; | dy = absPos[1]-cPos[1]; | ||
Line 41: | Line 46: | ||
return new JXG.Coords(JXG.COORDS_BY_SCREEN, [dx, dy], board); | return new JXG.Coords(JXG.COORDS_BY_SCREEN, [dx, dy], board); | ||
}, | }, | ||
down = function(e) { | |||
var | var canCreate = true, i, coords, el; | ||
coords = getMouseCoords(e); | |||
if (e[JXG.touchProperty]) { | |||
// index of the finger that is used to extract the coordinates | |||
i = 0; | |||
} | |||
coords = getMouseCoords(e, i); | |||
for ( | for (el in board.objects) { | ||
if(JXG.isPoint(board.objects[ | if(JXG.isPoint(board.objects[el]) && board.objects[el].hasPoint(coords.scrCoords[1], coords.scrCoords[2])) { | ||
canCreate = false; | |||
break; | break; | ||
} | } | ||
} | } | ||
if ( | if (canCreate) { | ||
board.create('point', [coords.usrCoords[1], coords.usrCoords[2]]); | board.create('point', [coords.usrCoords[1], coords.usrCoords[2]]); | ||
} | } | ||
Line 58: | Line 68: | ||
board = JXG.JSXGraph.initBoard('jxgbox', {boundingbox: [-5,5,5,-5], axis: true}); | board = JXG.JSXGraph.initBoard('jxgbox', {boundingbox: [-5,5,5,-5], axis: true}); | ||
board. | board.on('down', down); | ||
</source> | </source> | ||
[[Category:Examples]] | [[Category:Examples]] |
Latest revision as of 08:05, 6 August 2013
This example shows how to add a point whenever the user clicks on the board. The function getMouseCoords extracts the click coordinates from the event object and returns a JXG.Coords object with the point's coordinates on the board. The for loop in the event listener is to check if there is already a point as we don't want to create a point in this case.
The JavaScript Code
var getMouseCoords = function(e, i) {
var cPos = board.getCoordsTopLeftCorner(e, i),
absPos = JXG.getPosition(e, i),
dx = absPos[0]-cPos[0],
dy = absPos[1]-cPos[1];
return new JXG.Coords(JXG.COORDS_BY_SCREEN, [dx, dy], board);
},
down = function(e) {
var canCreate = true, i, coords, el;
if (e[JXG.touchProperty]) {
// index of the finger that is used to extract the coordinates
i = 0;
}
coords = getMouseCoords(e, i);
for (el in board.objects) {
if(JXG.isPoint(board.objects[el]) && board.objects[el].hasPoint(coords.scrCoords[1], coords.scrCoords[2])) {
canCreate = false;
break;
}
}
if (canCreate) {
board.create('point', [coords.usrCoords[1], coords.usrCoords[2]]);
}
},
board = JXG.JSXGraph.initBoard('jxgbox', {boundingbox: [-5,5,5,-5], axis: true});
board.on('down', down);