Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用触摸事件将加载的.SVG移动到精确的屏幕坐标(使用快照)_Javascript_Matrix_Svg_Transformation - Fatal编程技术网

Javascript 如何使用触摸事件将加载的.SVG移动到精确的屏幕坐标(使用快照)

Javascript 如何使用触摸事件将加载的.SVG移动到精确的屏幕坐标(使用快照),javascript,matrix,svg,transformation,Javascript,Matrix,Svg,Transformation,我正在使用快照库,我想移动我加载到页面中的元素。我想将对象移动(或“平移”)到来自触摸事件的精确屏幕坐标(以使对象跟随我的手指)。它们可以是screenX、pageX或clientX(和y)。不幸的是,在我看来,Snap.svg只使用这些“转换字符串”和矩阵,这意味着我只能相对于元素的初始位置而不是精确的屏幕坐标移动元素 问这个问题的一个简单方法是,如何将加载的.SVG移动到精确的屏幕位置,而不是相对位置 因为我没有绘制这些图像,而是加载了它们,所以我无法访问它们的“cx”或“cy”属性。这是我

我正在使用快照库,我想移动我加载到页面中的元素。我想将对象移动(或“平移”)到来自触摸事件的精确屏幕坐标(以使对象跟随我的手指)。它们可以是screenX、pageX或clientX(和y)。不幸的是,在我看来,Snap.svg只使用这些“转换字符串”和矩阵,这意味着我只能相对于元素的初始位置而不是精确的屏幕坐标移动元素

问这个问题的一个简单方法是,如何将加载的.SVG移动到精确的屏幕位置,而不是相对位置

因为我没有绘制这些图像,而是加载了它们,所以我无法访问它们的“cx”或“cy”属性。这是我的问题




感谢您的帮助。

看起来很熟悉,您可以获取对象的边界框并使用它,使用getBBox(),然后使用快照touchevents,如touchstart

Snap.load("https://dl.dropboxusercontent.com/u/57988096/ss4.svg", function (f) {
    s.append(f);
    cap = Snap.select('#Capper');
});

function move(dx,dy) {
    cap.transform('t' + (xcord - dx) + ',' + (ycord - dy ) );
}

document.onclick = function ( ev ) {
    var bb = cap.getBBox();
    move( bb.x + bb.width/2, bb.y + bb.height/2 ); // get the centre point of the object to move
}

Snap.load("https://dl.dropboxusercontent.com/u/57988096/ss4.svg", function (f) {
    s.append(f);
    cap = Snap.select('#Capper');
});

function move(dx,dy) {
    cap.transform('t' + (xcord - dx) + ',' + (ycord - dy ) );
}

document.onclick = function ( ev ) {
    var bb = cap.getBBox();
    move( bb.x + bb.width/2, bb.y + bb.height/2 ); // get the centre point of the object to move
}