2013-03-01 1 views
0

рисую несколько фигур на холсте, используя библиотеку jCanvas с помощью этой функции:Как выбрать форму на холсте и вернуть ее имя?

var factoryCounter = 1; 

$(".atom").click(function() { 
    //get element by tag id 
    var AtomId = jQuery(this).attr("id"); 
    var elementRef = "#el" + factoryCounter; 
    $("canvas") 
    .drawImage({ 
     source:'images/' + AtomId + '.png', 
     layer: true, 
     name: "myAtom" + factoryCounter, //I need this value 
      fillStyle: "#36b", 
      strokeStyle: '#36b', 
      strokeWidth: 0.3, 
      x: 36, y: 28, 
      width: 45, height: 35, 
      radius: 100, 
      ccw: true, 
      draggable: true, 
      click: function(layer) { 
          console.log("name") //here I need to return "name", but don't know how. 

     }     
    }); 
    factoryCounter++; 

Как вы можете видеть, каждая форма имеет свое уникальное имя. Я хотел бы создать функцию, которая возвращает имя выбранной фигуры после того, как я нажму на нее с помощью мыши. я могу успешно редактировать атрибуты формы, имя которого известно, как это:

 $("canvas").setLayer("myAtom" + 2, { 
    fillStyle: "#36b", 
    width: 100, height: 200, 
    rotate: 30 
    }) 
     .drawLayers(); 
    }); 

Но понятия не имею, как применять shapeSelect() функция, которая возвращает имя существующей формы, нажав на нее.

+0

Вы пробовали что-нибудь? – sharakan

+0

Основная проблема заключается в том, что после создания формы ее можно перетащить (как draggable: true), но ее нельзя выбрать. Единственный способ найти фигуру - $ («холст»). SetLayer («myAtom» +1, {..attributes ..}). –

+0

Продолжайте и редактируйте свой вопрос, чтобы потом упомянуть об этом. Важно, чтобы люди знали, что вы пробовали, чтобы они могли помочь вам дальше. – sharakan

ответ

0

Хорошо, я спросил парня, который сделал библиотеку, и он показал мне правильный ответ. В случае, если вам это нужно, вот это:


Ну, вместо того, чтобы событие щелчка, связанное с элементом холста, создать событие щелчка для каждого нового слоя jCanvas. Когда вы нажимаете один из этих слоев, переключите функцию обратного вызова между тем, что она собирается делать, на основе некоторого свойства слоя, которое вы создаете (например, layer.selected). Вот основная идея:

$("canvas").drawImage({ 
// image properties here... 
layer: true, 
name: "someLayer", 
selected: false, 
click: function(layer) { 
    if (layer.selected === false) { 
     layer.selected = true; 
     // do something with the layer name 
    } else if (layer.selected === true) { 
     layer.selected = false; 
     // deselect the layer 
    } 
} 
}); 

-Caleb


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