4 анимированных SVG в одном HTML-файле с использованием Animate CC - PullRequest
0 голосов
/ 04 сентября 2018

http://christianluneborg.com/dev/animation/icon-global.html

Как загрузить 4 отдельных анимированных SVG-файла в один файл JS / HTML, экспортированный из Animate CC? Я создал 1 анимированный SVG и он экспортирует 3 разных JS в одном HTML. Есть ли способ, которым я могу повторно использовать JS для других SVG с 3 значками, не путая код? Я знаю, что не стоит загружать кучу JS-файлов для каждого анимированного SVG-файла.

Всего за 1 анимированный SVG (JS)

<script src="https://code.createjs.com/createjs-2015.11.26.min.js"></script>
<script src="icon-skyscrapers.js"></script>
<script>
var canvas, stage, exportRoot, anim_container, dom_overlay_container, 
fnStartAnimation;
function init() {
canvas = document.getElementById("canvas");
anim_container = document.getElementById("animation_container");
dom_overlay_container = document.getElementById("dom_overlay_container");
var comp=AdobeAn.getComposition("C1F9C7BD5BEEC941A1FE079EA94C1BF3");
var lib=comp.getLibrary();
handleComplete({},comp);
  }
function handleComplete(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();
exportRoot = new lib.iconskyscrapers();
stage = new lib.Stage(canvas);  
//Registers the "tick" event listener.
fnStartAnimation = function() {
    stage.addChild(exportRoot);
    createjs.Ticker.setFPS(lib.properties.fps);
    createjs.Ticker.addEventListener("tick", stage)
    stage.addEventListener("tick", handleTick)
    function getProjectionMatrix(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 handleTick(event) {
        var focalLength = 528.25;
        var cameraInstance = exportRoot.___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;
    }
        for(child in exportRoot.children)
        {
            var layerObj = exportRoot.children[child];
            if(layerObj == cameraInstance)
                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 stageCenter = { 'x' : lib.properties.width/2, 'y' : lib.properties.height/2 };
                var mat = cameraInstance.getMatrix();
                mat.tx -= stageCenter.x;
                mat.ty -= stageCenter.y;
                cameraMat = mat.invert();
                cameraMat.prependTransform(stageCenter.x, stageCenter.y, 1, 1, 0, 0, 0, 0, 0);
                cameraMat.appendTransform(-stageCenter.x, -stageCenter.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 = getProjectionMatrix(layerObj.layerDepth);
                    if(sizeLockedMat)
                    {
                        sizeLockedMat.invert();
                        matToApply.prependMatrix(sizeLockedMat);
                    }
                }
                matToApply.prependMatrix(cameraMat);
                var projMat = getProjectionMatrix(totalDepth);
                if(projMat)
                {
                    matToApply.prependMatrix(projMat);
                }
            }
            layerObj.transformMatrix = matToApply;
        }
    }
}       
//Code to support hidpi screens and responsive scaling.
function makeResponsive(isResp, respDim, isScale, scaleType) {      
    var lastW, lastH, lastS=1;      
    window.addEventListener('resize', resizeCanvas);        
    resizeCanvas();     
    function resizeCanvas() {           
        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);              
            }           
        }           
        canvas.width = w*pRatio*sRatio;         
        canvas.height = h*pRatio*sRatio;
        canvas.style.width = dom_overlay_container.style.width = anim_container.style.width =  w*sRatio+'px';               
        canvas.style.height = anim_container.style.height = dom_overlay_container.style.height = h*sRatio+'px';
        stage.scaleX = pRatio*sRatio;           
        stage.scaleY = pRatio*sRatio;           
        lastW = iw; lastH = ih; lastS = sRatio;            
        stage.tickOnUpdate = false;            
        stage.update();            
        stage.tickOnUpdate = true;      
    }
}
makeResponsive(false,'both',false,1);   
AdobeAn.compositionLoaded(lib.properties.id);
fnStartAnimation();
}
</script>

HTML

<body onload="init();" style="margin:0px;">
<div id="animation_container" style="background-color:rgba(255, 255, 255, 1.00); width:113px; height:84px">
    <canvas id="canvas" width="113" height="84" style="position: absolute; display: block; background-color:rgba(255, 255, 255, 1.00);"></canvas>
    <div id="dom_overlay_container" style="pointer-events:none; overflow:hidden; width:113px; height:84px; position: absolute; left: 0px; top: 0px; display: block;">
    </div>
</div>
</body>
...