PreloadJS не работает на Angular (createjs-модуль)

У меня проблема с угловым & createjs-модулем.

Модуль createjs работает, как вы можете видеть по коду, методы формы и анимации работают (я могу успешно визуализировать его в браузере):

https://www.npmjs.com/package/createjs-module

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

http://createjs.com/docs/preloadjs/classes/LoadQueue.html

Очередь не загружается. Я поместил консольный журнал в конец "ngOnInit", который работает, но никакое событие не отправляется из объекта "очередь". Я не вижу никаких ошибок в коде, и я не вижу никаких ошибок / предупреждений на консоли.

код:

import { Component, OnInit, ViewChild } from '@angular/core'; import * as createjs from 'createjs-module'; @Component({ selector: 'app-mycomp', templateUrl: './mycomp.component.html', styleUrls: ['./mycomp.component.css'] }) export class MyClass implements OnInit { public stage; public queue; public queueManifest = [ {id:"header", src:"header.png"}, {id:"body", src:"body.png"}, {id:"footer", src:"footer.png"} ]; constructor() { } ngOnInit() { ///THIS CODE WORKS! this.stage = new createjs.Stage("myCanvas"); createjs.Ticker.setFPS(60); createjs.Ticker.addEventListener("tick", this.stage); var circle = new createjs.Shape(); circle.graphics.beginFill("DeepSkyBlue").drawCircle(0, 0, 50); circle.x = 10; circle.y = 10; this.stage.addChild(circle); createjs.Tween.get(circle, { loop: true }) .to({ x: 400 }, 1000, createjs.Ease.getPowInOut(4)) .to({ alpha: 0, y: 175 }, 500, createjs.Ease.getPowInOut(2)) .to({ alpha: 0, y: 225 }, 100) .to({ alpha: 1, y: 200 }, 500, createjs.Ease.getPowInOut(2)) .to({ x: 100 }, 800, createjs.Ease.getPowInOut(2)); this.stage.update(); ///THIS CODE DOES NOT WORK! this.queue = new createjs.LoadQueue(); this.queue.on("progress", this.queueProgress, this); this.queue.on("complete", this.queueComplete, this); this.queue.on("error", this.queueError, this); this.queue.loadManifest(this.queueManifest); ///THIS LINE IS ON CONSOLE! console.log("queue START"); } ///NONE OF THIS IS DISPATCHING public queueProgress() { console.log("queue progress"); } public queueError() { console.log("queue error"); } public queueComplete() { console.log("queue finished"); } }

2 ответа

Вы пытались объявить createJs быть объектом оконного объекта в конструкторе вашего компонента?

У меня были некоторые проблемы с предварительной загрузкой js в моем проекте Angular 2 с Angular CLI, и я выяснил, что внутри процесса предварительной загрузки метод с именем _isCanceled пытается обработать объект window.createjs, и поэтому весь процесс обработки событий всегда останавливался Но в моем проекте объект createjs не был объявлен как объект окна. Итак, я попробовал это:

constructor()
{   
    (<any>window).createjs = createjs;
    this.queue = new createjs.LoadQueue();
}

С современным javascript/ машинопись, preloadjs пакет может быть не так необходим?

Я был успешным с Promise.then()

static
loadImage(url: string): Promise<HTMLImageElement> {
    return new Promise((res, rej) => {
        const img: HTMLImageElement = new Image();
        img.onload=(evt => res(img));
        img.onerror=(() => rej("failed to load "+url));
        img.src = url; // start loading
    });
}
loadImage(url).then((img) => processImage(img))
Другие вопросы по тегам