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

// onload=init() called in html doc
function init(){

var canvas = new createjs.Stage("canvas");

// Add image to canvas
image = new createjs.Bitmap("image.png");
image.x = 200;
image.y = 180;
image.scaleX = 0.35;
image.scaleY = 0.35;
canvas.addChild(image);

image.addEventListener('click', pop);

canvas.update();
}

//remove image from canvas
function pop() {
console.log('pop');
canvas.removeChild(image);
}

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

0
mexicanChica 9 Янв 2018 в 19:58

2 ответа

Лучший ответ

Сделайте изображение глобальной переменной, чтобы к нему могли обращаться все функции в вашем case function pop.

 var image;// defining 'image' variable as global
 function init(){

    var canvas = new createjs.Stage("canvas");

   // Add image to canvas
   image = new createjs.Bitmap("image.png");
   image.x = 200;
   image.y = 180;
   image.scaleX = 0.35;
   image.scaleY = 0.35;
   canvas.addChild(image);

   image.addEventListener('click', pop);

   canvas.update();

}

//remove image from canvas
function pop() {
  console.log('pop');
  canvas.removeChild(image);
}
0
Shivam Muttoo 9 Янв 2018 в 18:07

Это проблема объема. Вы определили image внутри своей функции init, поэтому она недоступна для метода pop.

Есть два простых решения. Либо переместите var image за пределы функции инициализации, либо используйте вместо этого цель щелчка.

var image;
function init() {
  init = new createjs.Bitmap();
  // etc
}

// OR

function pop(event) {
  stage.removeChild(event.target);
}

Область видимости действительно важна при создании приложений JavaScript, поэтому я предлагаю познакомиться с ней немного лучше :)

Ура ,

0
Lanny 9 Янв 2018 в 17:13