Нажмите на объект не зарегистрирован - PullRequest
0 голосов
/ 18 мая 2018

Я не могу найти то, что сделал неправильно, потому что когда я нажимаю на треугольный объект на холсте, значение e.target равно false.Для других типов объектов (линий, окружностей ...) «имя объекта» получает свое значение.

canvas.on('mouse:down', function(e) {
    if (e.target) {
        objectname = e.target.name;
    }
});

Что я должен проверить, или вы можете дать мне указание, как продолжить отладку этой ошибки?

У меня было подозрение, что "selectable = false;"или "деактивировать все ();"может быть причиной этой проблемы, и я сделал поиск текста, но ничего не вышло.

Далее фото объектов.Я могу нажать на любой объект, кроме треугольника, и я получу название объекта. объекты на холсте

Мне не нужен новый код, который даст мне название объектов на холсте.Мой фрагмент кода работает для всех объектов, кроме треугольника.Это то, что я сделал некоторую путаницу с кодом для объектов треугольника.А теперь мышь: вниз не регистрируется, когда я нажимаю на треугольник.И я не могу отладить это.Вот в чем проблема.

Я спрошу другим способом, что я должен сделать, чтобы предотвратить на мыши: событие down, чтобы сработать при нажатии на конкретный объект, чтобы выстрелить?

Поскольку очевидно, что ясделал это с треугольниками, потому что теперь у меня есть эта проблема.

Следующий лучший пример.

 canvas.on('mouse:down', function(e) {
         if (e.target) {
               console.log('e.target is: '+e.target.type);
         }else {console.log('e.target is null ';}
    }

Нажав на любой объект, кроме треугольника, я получаю e.target.type.И я проверил все объекты на предмет наличия объектов [i] .selectable, и во всех случаях я стал истинным (даже для треугольников).

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вот ваш ответ на простом ванильном JavaScript:

// Initialize a compatibility test
var compatibilityTest = EventTarget.prototype.addEventListener;

// Update the test
compatibilityTest = (
    typeof compatibilityTest == 'function' &&
    compatibilityTest.toString().indexOf('[native function]') > -1
);

// Compatible function for legacy and modern browsers
function setEvent() {
    var args = [... arguments].slice(1),
        element = arguments[0];

    EventTarget.prototype[
        compatibilityTest ? 'addEventListener' : 'attachEvent'
    ].apply(
        element,
        ((compatibilityTest ? '' : 'on') + String(args[0])].concat(args.slice(1))
    )
}

// Set the event
setEvent(canvas, 'click', function listener(event) { /* Do something... */ })
0 голосов
/ 18 мая 2018

Предполагая, что вы используете jQuery из-за функции .on(), вы можете получить name холста таким образом, связывая клик с помощью .on('click', function(){...}

var canvas = $('#myCanvas');
canvas.on('click', function(e) {      
   if (e.target) {    
          objectname = $(e.target).attr('name');
          console.log(objectname);
   }
});
canvas{
  border: 1px solid black;
  cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="myCanvas" name="This is my canvas"></canvas>
...