Как запустить анимацию createjs на скользком ползунке после смены обратного вызова? - PullRequest
0 голосов
/ 26 апреля 2019

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

Аниматор создал анимацию с использованием Adobe Animate CC и экспортировал ее в формат createjs, чтобы она была совместима с html5.

Если я пытаюсь вызвать анимацию после замены, я получаю сообщение об ошибке:

TypeError: lib.FlowerGrowTemplate is not a constructor

См. Комментарий ниже, где происходит ошибка:

/*The error is pointing to here*/

Сгенерированный Adobe Animate CC код JavaScript:

(function (cjs, an) {

var p; // shortcut to reference prototypes
var lib={};var ss={};var img={};
lib.ssMetadata = [];


// symbols:
// helper functions:

function mc_symbol_clone() {
    var clone = this._cloneProps(new this.constructor(this.mode, this.startPosition, this.loop));
    clone.gotoAndStop(this.currentFrame);
    clone.paused = this.paused;
    clone.framerate = this.framerate;
    return clone;
}

function getMCSymbolPrototype(symbol, nominalBounds, frameBounds) {
    var prototype = cjs.extend(symbol, cjs.MovieClip);
    prototype.clone = mc_symbol_clone;
    prototype.nominalBounds = nominalBounds;
    prototype.frameBounds = frameBounds;
    return prototype;
    }

.....


})(createjs = createjs||{}, AdobeAn = AdobeAn||{});
var createjs, AdobeAn;

var graphic_canvas_1, graphic_stage_1, graphic_exportRoot_1, graphic_container_1, graphic_dom_overlay_container_1, graphic_fnStartAnimation_1;
function graphic_init_1() {
    graphic_canvas_1 = document.getElementById("graphic_canvas");
    graphic_container_1 = document.getElementById("graphic_container");
    graphic_dom_overlay_container_1 = document.getElementById("graphic_dom_overlay_container");
    var comp=AdobeAn.getComposition("AD6FD640782B2A4DAD43D647860AC61B");
    var lib=comp.getLibrary();
    graphic_handleComplete_1({},comp);
}
function graphic_handleComplete_1(evt,comp) {
    //This function is always called, irrespective of the content. You can use the variable "stage" after it is created in token create_stage.
    var lib=comp.getLibrary();
    var ss=comp.getSpriteSheet();
    graphic_exportRoot_1 = new lib.FlowerGrowTemplate(); /*The error is pointing to here*/
    graphic_stage_1 = new lib.Stage(graphic_canvas_1);
    //Registers the "tick" event listener.
    graphic_fnStartAnimation_1 = function() {
        graphic_stage_1.addChild(graphic_exportRoot_1);
        createjs.Ticker.setFPS(lib.properties.fps);
        createjs.Ticker.addEventListener("tick", graphic_stage_1)
        graphic_stage_1.addEventListener("tick", graphic_handleTick_1)
        function graphic_getProjectionMatrix_1(container, totalDepth) {
            var focalLength = 528.25;
            var projectionCenter = { x : lib.properties.width/2, y : lib.properties.height/2 };
            var scale = (totalDepth + focalLength)/focalLength;
            var scaleMat = new createjs.Matrix2D;
            scaleMat.a = 1/scale;
            scaleMat.d = 1/scale;
            var projMat = new createjs.Matrix2D;
            projMat.tx = -projectionCenter.x;
            projMat.ty = -projectionCenter.y;
            projMat = projMat.prependMatrix(scaleMat);
            projMat.tx += projectionCenter.x;
            projMat.ty += projectionCenter.y;
            return projMat;
        }
        function graphic_handleTick_1(event) {
            var cameraInstance = graphic_exportRoot_1.___camera___instance;
            if(cameraInstance !== undefined && cameraInstance.pinToObject !== undefined)
            {
                cameraInstance.x = cameraInstance.pinToObject.x + cameraInstance.pinToObject.pinOffsetX;
                cameraInstance.y = cameraInstance.pinToObject.y + cameraInstance.pinToObject.pinOffsetY;
                if(cameraInstance.pinToObject.parent !== undefined && cameraInstance.pinToObject.parent.depth !== undefined)
                cameraInstance.depth = cameraInstance.pinToObject.parent.depth + cameraInstance.pinToObject.pinOffsetZ;
            }
            graphic_applyLayerZDepth_1(graphic_exportRoot_1);
        }
        function graphic_applyLayerZDepth_1(parent)
        {
            var cameraInstance = parent.___camera___instance;
            var focalLength = 528.25;
            var projectionCenter = { 'x' : 0, 'y' : 0};
            if(parent === graphic_exportRoot_1)
            {
                var stageCenter = { 'x' : lib.properties.width/2, 'y' : lib.properties.height/2 };
                projectionCenter.x = stageCenter.x;
                projectionCenter.y = stageCenter.y;
            }
            for(child in parent.children)
            {
                var layerObj = parent.children[child];
                if(layerObj == cameraInstance)
                    continue;
                graphic_applyLayerZDepth_1(layerObj, cameraInstance);
                if(layerObj.layerDepth === undefined)
                    continue;
                if(layerObj.currentFrame != layerObj.parent.currentFrame)
                {
                    layerObj.gotoAndPlay(layerObj.parent.currentFrame);
                }
                var matToApply = new createjs.Matrix2D;
                var cameraMat = new createjs.Matrix2D;
                var totalDepth = layerObj.layerDepth ? layerObj.layerDepth : 0;
                var cameraDepth = 0;
                if(cameraInstance && !layerObj.isAttachedToCamera)
                {
                    var mat = cameraInstance.getMatrix();
                    mat.tx -= projectionCenter.x;
                    mat.ty -= projectionCenter.y;
                    cameraMat = mat.invert();
                    cameraMat.prependTransform(projectionCenter.x, projectionCenter.y, 1, 1, 0, 0, 0, 0, 0);
                    cameraMat.appendTransform(-projectionCenter.x, -projectionCenter.y, 1, 1, 0, 0, 0, 0, 0);
                    if(cameraInstance.depth)
                        cameraDepth = cameraInstance.depth;
                }
                if(layerObj.depth)
                {
                    totalDepth = layerObj.depth;
                }
                //Offset by camera depth
                totalDepth -= cameraDepth;
                if(totalDepth < -focalLength)
                {
                    matToApply.a = 0;
                    matToApply.d = 0;
                }
                else
                {
                    if(layerObj.layerDepth)
                    {
                        var sizeLockedMat = graphic_getProjectionMatrix_1(parent, layerObj.layerDepth);
                        if(sizeLockedMat)
                        {
                            sizeLockedMat.invert();
                            matToApply.prependMatrix(sizeLockedMat);
                        }
                    }
                    matToApply.prependMatrix(cameraMat);
                    var projMat = graphic_getProjectionMatrix_1(parent, totalDepth);
                    if(projMat)
                    {
                        matToApply.prependMatrix(projMat);
                    }
                }
                layerObj.transformMatrix = matToApply;
            }
        }
    }
    //Code to support hidpi screens and responsive scaling.
    function graphic_makeResponsive_1(isResp, respDim, isScale, scaleType) {
        var lastW, lastH, lastS=1;
        window.addEventListener('resize', graphic_resizeCanvas_1);
        graphic_resizeCanvas_1();
        function graphic_resizeCanvas_1() {
            var w = lib.properties.width, h = lib.properties.height;
            var iw = window.innerWidth, ih=window.innerHeight;
            var pRatio = window.devicePixelRatio || 1, xRatio=iw/w, yRatio=ih/h, sRatio=1;
            if(isResp) {
                if((respDim=='width'&&lastW==iw) || (respDim=='height'&&lastH==ih)) {
                    sRatio = lastS;
                }
                else if(!isScale) {
                    if(iw<w || ih<h)
                        sRatio = Math.min(xRatio, yRatio);
                }
                else if(scaleType==1) {
                    sRatio = Math.min(xRatio, yRatio);
                }
                else if(scaleType==2) {
                    sRatio = Math.max(xRatio, yRatio);
                }
            }
            graphic_canvas_1.width = w*pRatio*sRatio;
            graphic_canvas_1.height = h*pRatio*sRatio;
            graphic_canvas_1.style.width = graphic_dom_overlay_container_1.style.width = graphic_container_1.style.width =  w*sRatio+'px';
            graphic_canvas_1.style.height = graphic_container_1.style.height = graphic_dom_overlay_container_1.style.height = h*sRatio+'px';
            graphic_stage_1.scaleX = pRatio*sRatio;
            graphic_stage_1.scaleY = pRatio*sRatio;
            lastW = iw; lastH = ih; lastS = sRatio;
            graphic_stage_1.tickOnUpdate = false;
            graphic_stage_1.update();
            graphic_stage_1.tickOnUpdate = true;
        }
    }
    graphic_makeResponsive_1(false,'both',false,1);
    AdobeAn.compositionLoaded(lib.properties.id);
    graphic_fnStartAnimation_1();
}

Мой код JavaScript:

(function($){
        $('.custom-graphic-slider .slider').slick({
            slidesToShow: 1,
        slidesToScroll: 1,
        arrows: false,
        dots: true,
        fade: true,
      });
    $('.custom-graphic-slider .slider').on('afterChange', function(event, slick, currentSlide){
            graphic_init_1();
    });
})(jQuery);

Надеюсь, все имеет смысл

...