Как передать переменную из одного кадра в другой в Animate cc с помощью JS

Привет всем, я хотел сослаться на переменную из одного кадра в текущем кадре с помощью Animate CC с JS.

Например, ниже приведены коды фрейма:
var p1=new Object(); p1.classes = middle;

Затем я захотел использовать p1 в другом кадре и попробовал следующие коды:
alert("this p1 classes is: ", p1.classes);

Но в консоли отображается ошибка «Uncaught ReferenceError: p_p не определен».

Итак, могу ли я узнать, как передать одну переменную в другой кадр в Animate CC с помощью js, пожалуйста? Спасибо за любую помощь.


person lulusen    schedule 03.12.2017    source источник
comment
Возможный дубликат Как сохранить переменную Javascript между кадрами?   -  person david25272    schedule 16.12.2017


Ответы (1)


Проблема с объявлением переменных и/или объектов внутри фрейма заключается в том, что область действия ограничена этим фреймом, что не позволяет использовать ваши переменные и/или объекты в других фреймах:

Код кадра

// Frame 0
this.frame_0 = function() {
    /* The p1 object can only be used in this frame. */
    var p1 = new Object();

    /* Let's use something more appropiate for your alert box. 
       In this case is a string as a property of your object. */
    p1.classes = "middle"; 
}

// Frame 1
this.frame_1 = function() {
    /*  As a string is being used as a property of your object, 
        I changed a little bit of your code, to display that string in the alert box.
        This will give you an error (p1 not defined), 
        because the p1 object can't be used in this frame. */
    alert("this p1 classes is: " + p1.classes);

    /* Stop the timeline */
    this.stop();
}

Чтобы избежать такого поведения, вам нужно изменить область видимости. Есть два способа, в зависимости от того, какую область вы хотите использовать:


Вариант 1: область клипа

Область действия ограничена текущим мувиклипом, что означает, что ваша переменная или объект могут использоваться в любом кадре этого мувиклипа.

this.p1 = new Object();
this.p1.classes = "middle";

Код кадра

// Frame 0
this.frame_0 = function() {
    this.p1 = new Object();
    this.p1.classes = "middle";
}

// Frame 1
this.frame_1 = function() {
    alert("this p1 classes is: " + this.p1.classes);

    this.stop();
}

Вариант 2: Глобальная область

Не объявляя свою переменную или объект, область действия не имеет ограничений. Его можно использовать в любом кадре любого мувиклипа.

p1 = new Object();
p1.classes = "middle";

Код кадра

// Frame 0
this.frame_0 = function() {
    p1 = new Object();
    p1.classes = "middle";
}

// Frame 1
this.frame_1 = function() {
    alert("this p1 classes is: " + p1.classes);

    this.stop();
}

Примечание: создание объекта

Если вы создаете объект, для производительности и простоты лучше использовать литерал объекта вместо new Object().

// Option 1
this.p1 = {classes:"middle"};

// Option 2
p1 = {classes:"middle"};
person cristiancajiaos    schedule 04.12.2017
comment
Я решил проблему, просто заменив this.p1.classes на parent.p1.classes. Спасибо за помощь в любом случае. - person lulusen; 07.12.2017