2013-05-05 1 views
0
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++; 
} 

Моей функцию draw_sf() рисует прямоугольник, который можно перемещать мое сопротивление & падения. После удаления (обработчик событий «dragend») я хочу сохранить новую позицию элемента в массиве. Но моя переменная счетчика «k» не учитывается в функции dragend. k всегда является числом раз, когда я называл draw_sf(). Итак, как я могу сохранить фактические позиции моих прямоугольников?Не удается получить переменный счетчик в обработчик событий

+0

С быстрым взглядом попробуйте добавить var, прежде чем объявлять k. Я не уверен, какой браузер вы используете, но я помню, как javascript рассматривал его как новую переменную, если вы не объявляете ее в более старой версии FF, не уверен, что в эти дни, как я всегда заявляю. –

ответ

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) { 
    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); 
} 

Правда состоит в том, что вы на самом деле не нужно никакого счетчика хранить историю позиций Rect - вы можете просто нажать его в массив используя Array.prototype.push: http://www.w3schools.com/jsref/jsref_push.asp

 Смежные вопросы

  • Нет связанных вопросов^_^