我想在拉斐尔的文件坐标中得到鼠标事件的坐标。我希望这些都是准确的,即使我已经使用了setViewBox。
请参阅http://jsfiddle.net/CEnBN/
下面创建一个10x10绿色的盒子,然后放大-该框的中心在视图的起源。
var paper = Raphael(10, 50, 320, 200);
var rect = paper.rect(0, 0, 10, 10);
rect.attr('fill', 'green');
rect.mousedown(function (event, a, b) {
$('#here').text([a, b]);
console.log(event);
});
paper.setViewBox(5, 5, 10, 10);我想收到的点击坐标,反映他们的位置在盒子里。即。其范围应从(5-10,5-10)不等。
注意:很久以后,我迁移到了D3.js --这通常会让我更快乐。
发布于 2013-03-12 12:55:06
编辑:使用clientX/Y的鼠标事件简化-删除需要获取元素偏移量
这是我想出来的。基本上,通过使用文件的客户端重排和鼠标事件的clientX/Y,将鼠标位置更正为相对于纸张。然后将校正后的位置与客户的宽度/高度进行比较,然后根据原始纸张的尺寸计算结果:
var paper = Raphael(10, 50, 320, 200);
var rect = paper.rect(0, 0, 10, 10);
rect.attr('fill', 'green');
rect.mousedown(function (event, a, b) {
// get bounding rect of the paper
var bnds = event.target.getBoundingClientRect();
// adjust mouse x/y
var mx = event.clientX - bnds.left;
var my = event.clientY - bnds.top;
// divide x/y by the bounding w/h to get location %s and apply factor by actual paper w/h
var fx = mx/bnds.width * rect.attrs.width
var fy = my/bnds.height * rect.attrs.height
// cleanup output
fx = Number(fx).toPrecision(3);
fy = Number(fy).toPrecision(3);
$('#here').text('x: ' + fx + ', y: ' + fy);
});
paper.setViewBox(5, 5, 10, 10);更新的小提琴链接如下:http://jsfiddle.net/CEnBN/3/
更紧凑的鼠标下功能版本:
rect.mousedown(function (event, a, b) {
var bnds = event.target.getBoundingClientRect();
var fx = (event.clientX - bnds.left)/bnds.width * rect.attrs.width
var fy = (event.clientY - bnds.top)/bnds.height * rect.attrs.height
$('#here').text('x: ' + fx + ', y: ' + fy);
});发布于 2013-03-07 04:01:02
您需要抵消结果,如下所示:
var posx, posy;
var paper = Raphael("canvas", 320, 200);
var rect = paper.rect(0, 0, 10, 10);
rect.attr('fill', 'green');
rect.mousedown(function (e, a, b) {
posx = e.pageX - $(document).scrollLeft() - $('#canvas').offset().left;
posy = e.pageY - $(document).scrollTop() - $('#canvas').offset().top;
$('#here').text([posx, posy]);
console.log(e);
});
paper.setViewBox(5, 5, 10, 10);我为Raphaeljs添加了一个目标元素,看看这是你的小提琴手的更新
发布于 2014-02-12 11:00:20
gthmb的答案很好,但遗漏了一个细节--纸上矩形的位置。只有当矩形位于位置(0,0)时,此版本才能工作。为了支持翻译的情况,将矩形的位置添加到结果中:
function mouseEvent_handler(e) {
var bnds = event.target.getBoundingClientRect();
var bbox = this.getBBox();
var fx = (event.clientX - bnds.left)/bnds.width * rect.attrs.width + bbox.x;
var fy = (event.clientY - bnds.top)/bnds.height * rect.attrs.height + bbox.y;
$('#here').text('x: ' + fx + ', y: ' + fy);
}这里是小提琴的修改版本:http://jsfiddle.net/zJu8b/1/
https://stackoverflow.com/questions/15257059
复制相似问题