Javascript Can';无法在事件处理程序中获取计数器变量
我的函数draw_sf()绘制矩形,可以在拖放时移动。在删除(事件处理程序'dragend')后,我想将元素的新位置保存在数组中。但是我的计数器变量“k”在dragend函数中不起作用。k始终是我调用draw_sf()的次数。Javascript Can';无法在事件处理程序中获取计数器变量,javascript,html,canvas,drag-and-drop,kineticjs,Javascript,Html,Canvas,Drag And Drop,Kineticjs,我的函数draw_sf()绘制矩形,可以在拖放时移动。在删除(事件处理程序'dragend')后,我想将元素的新位置保存在数组中。但是我的计数器变量“k”在dragend函数中不起作用。k始终是我调用draw_sf()的次数。 那么如何保存矩形的实际位置呢?考虑将方法稍微更改为: k=0; var sf = new Array(); function draw_sf (type,sf_text,schriftgroesse,sf_width,sf_height,x0,y0,ports_top,p
那么如何保存矩形的实际位置呢?考虑将方法稍微更改为:
k=0;
var sf = new Array();
function draw_sf (type,sf_text,schriftgroesse,sf_width,sf_height,x0,y0,ports_top,ports_right,ports_bottom,ports_left) {
sf[k] = new Kinetic.Group({
draggable: true
});
sf[k]['x0']=x0;
sf[k]['y0']=y0;
m=0;
sf[k][m] = new Kinetic.Rect({
x: x0,
y: y0,
width: sf_width,
height: sf_height,
fill: '#EEE',
stroke: '#000',
strokeWidth: randbreite_sf
});
sf[k].add(sf[k][m]);
m++;
sf[k].on('dragend', function() {
var dx=parseFloat(document.getElementsByName("dx")[0].value);
var dy=parseFloat(document.getElementsByName("dy")[0].value);
sf[k]['x']=sf[k]['x0']+dx;
sf[k]['y']=sf[k]['y0']+dy;
});
boxLayer.add(sf[k]);
k++;
}
事实上,您实际上不需要任何计数器来存储rect位置的历史记录-您可以使用array.prototype.push:快速浏览,在声明k之前尝试添加var。我不确定您使用的是什么浏览器,但我记得如果您不在旧版本的FF中声明它,javascript会将其视为一个新变量,而现在我总是这样声明。
var sf = new Array();
function draw_sf(type, sf_text, schriftgroesse, sf_width, sf_height, x0, y0, ports_top, ports_right, ports_bottom, ports_left) {
var kineticGroup = new Kinetic.Group({
draggable:true
});
kineticGroup['x0'] = x0;
kineticGroup['y0'] = y0;
m = 0;
kineticGroup[m] = new Kinetic.Rect({
x:x0,
y:y0,
width:sf_width,
height:sf_height,
fill:'#EEE',
stroke:'#000',
strokeWidth:randbreite_sf
});
kineticGroup.add(kineticGroup[m]);
m++;
kineticGroup.on('dragend', function () {
var dx = parseFloat(document.getElementsByName("dx")[0].value);
var dy = parseFloat(document.getElementsByName("dy")[0].value);
kineticGroup['x'] = kineticGroup['x0'] + dx;
kineticGroup['y'] = kineticGroup['y0'] + dy;
});
boxLayer.add(kineticGroup);
sf.push(kineticGroup);
}