[英]Move SVG Elements with arrow keys
我正在将svg文本元素动态地放在svg组中包装的模板上。 我需要用户具有单击/聚焦后分别使用键盘箭头键移动每个元素的功能。 我下面的当前代码有问题。 1.箭头键将元素移动一次,然后出现错误:意外的值translate(NaN,undefined)解析转换属性。 2.如果画布上有多个元素,它将全部移动它们,而不仅仅是被单击的元素。 任何帮助,将不胜感激。
$(".svg-canvas").on("click",".selectable",function() {
var el = $(this).attr("id");
keymove(el);
});
function keymove(el) {
$(document).keydown(function(e){
e.preventDefault();
if(e.keyCode == 39) {//right
console.log('right');
var xforms = $("#" + el).attr("transform");
var parts = /\((.*)\)$/.exec(xforms);
var parts2 = parts[1].split(",");
var x = parts2[4];
var y = parts2[5];
var tx = (++x);
$("#" + el).attr({transform:'translate('+ tx + ',' + y +')'});
}else if(e.keyCode == 37) {//left
console.log('left');
var xforms = $("#" + el).attr("transform");
var parts = /\((.*)\)$/.exec(xforms);
var parts2 = parts[1].split(",");
var x = parts2[4];
var y = parts2[5];
var tx = (--x);
$("#" + el).attr({transform:'translate('+ tx + ',' + y +')'});
}else if(e.keyCode == 38) {//up
console.log('up');
var xforms = $("#" + el).attr("transform");
var parts = /\((.*)\)$/.exec(xforms);
var parts2 = parts[1].split(",");
var x = parts2[4];
var y = parts2[5];
var ty = (--y);
$("#" + el).attr({transform:'translate('+ x + ',' + ty +')'});
}else if(e.keyCode == 40) {//down
console.log('down');
var xforms = $("#" + el).attr("transform");
var parts = /\((.*)\)$/.exec(xforms);
var parts2 = parts[1].split(",");
var x = parts2[4];
var y = parts2[5];
var ty = (++y);
$("#" + el).attr({transform:'translate('+ x + ',' + ty +')'});
}else{
return;
}
});
}
一旦将transform
属性设置为translate..
在这里: $("#" + el).attr({transform:'translate('+ tx + ',' + y +')'});
,则无法以matrix
模式获取该属性。
因此,当您尝试执行以下操作时: var xforms = $("#" + el).attr("transform");
您得到了translate(236,205)
所以解析是错误的。
解决方案是也以matrix
组合设置transform
值,因此您可以在下一个动作中读取它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.