КАК: Adobe Animate — gotoAndStop(); при нажатии кнопки

#javascript #flash #animation #adobe

#javascript #flash #Анимация #adobe

Вопрос:

Я создал проект в .fla, в который выполнялся экспорт.однако swf теперь мне требуется в формате HTML5. Итак, я меняю тип преобразования файлов и теперь требую, чтобы мой ActionScript3 был преобразован в JavaScript. Однако это не моя сильная сторона.

В настоящее время я пытаюсь:

 this.stop();

this.close1_btn.addEventListener("click", function (closebtn)
{
this.gotoAndPlay(1);
});

this.store1_btn.addEventListener("click", function (store1_btn)
{
this.gotoAndPlay(11);    
});

this.store2_btn.addEventListener("click", function (store2_btn)
{
this.gotoAndPlay(12);
});

this.store3_btn.addEventListener("click", function (store3_btn)
{
this.gotoAndPlay(13);    
});
  

ОБЗОР: попытка прослушивания символа, например close1_btn для кликов. при нажатии он будет ссылаться на указанный фрейм и останавливаться на нем.

Я ожидаю, что несколько битов будут неправильными * может быть, рядом с частью функции ()?

Это довольно простая карта, поэтому не должно быть слишком сложно для тех, кто знает, на что они смотрят! Большое спасибо за любую помощь, которую вы можете оказать!

Ответ №1:

Я считаю, что проблема заключается в области действия функции, что является распространенной ошибкой.

addEventListener Метод не имеет подразумеваемой области видимости, поэтому функции будут вызываться в window . Если вы выводите this данные в своей консоли при нажатии на эти кнопки, вы, вероятно, увидите Window . Чтобы решить эту проблему, вы можете:

  1. Свяжите ваши методы (документы)

Пример:

 this.close1_btn.addEventListener("click", function (closebtn)
{
this.gotoAndPlay(1);
}.bind(this));
  
  1. Используйте on ярлык CreateJS, который принимает 3-й параметр (docs)

Пример:

 this.close1_btn.on("click", function (closebtn)
{
this.gotoAndPlay(1);
}, this);
  

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

 if (!this.inited) {
  // Your code

  this.inited = true;
}
  

Комментарии:

1. Привет, Ланни, спасибо за твой ответ. Теперь я использую предоставленный вами код ‘code’ this.stop(); if (!this.inited) { // Ваш код this.close1_btn.addEventListener(«click», функция (closebtn) { this.gotoAndPlay(1); }.bind(this)); это.store1_btn.addEventListener(«click», функция (store1btn) { this.gotoAndPlay(11); }.bind(this)); this.inited = true; } ‘код’

Ответ №2:

Спасибо за ваш ответ.

Теперь я использую предоставленный вами код:

 this.stop();

if (!this.inited) {
  // Your code


this.close1_btn.addEventListener("click", function (closebtn)
{
this.gotoAndPlay(1);
}.bind(this));

this.store1_btn.addEventListener("click", function (store1btn)
{
this.gotoAndStop(11);
}.bind(this));


this.inited = true;
}
  

Тем не менее, я получаю это на выходе

ПРЕДУПРЕЖДЕНИЯ: номера кадров в EaselJS начинаются с 0 вместо 1. Например, это влияет на вызовы gotoAndStop и gotoAndPlay . (5) Содержимое как с растровыми изображениями, так и с кнопками может генерировать локальные ошибки безопасности в некоторых браузерах при запуске из локальной файловой системы.

Любые дополнительные советы, которые вы могли бы дать, были бы оценены…

Ответ №3:

спасибо за вашу постоянную помощь!

Предварительный просмотр не работает, когда он открывается в моем браузере, это только потому, что я не экспортировал его полностью и не разместил в Интернете?

Значит, я могу игнорировать эти ошибки?

^^ если все прояснилось. Есть ли у вас рекомендуемый способ экспортировать и разместить его на веб-странице?

Еще раз спасибо, приятель, ценю это!