在绘制HTML5画布时显示加载微调器。事件?

时间:2015-10-19 12:23:14

标签: html5 html5-canvas pdfjs

我花了很多时间来寻找这个,但要么它不是一个非常常见的问题,要么我的谷歌缺乏。

简短版本是我的网站有一个HTML5画布元素,显示大型复杂绘图,这意味着它通常需要10秒才能完成。

如何挂钩绘图事件?我无法找到任何类型的东西,但如果在绘制画布时显示加载微调器,它将真正有助于用户体验。我以前见过它,但没见过"怎么"。

有经验的详细信息: 我正在使用PDFJS显示PDF,并拥有自己的查看器而不是提供的查看器。它有效,但有时它绘制的PDF非常慢,因此需要一个微调器。

1 个答案:

答案 0 :(得分:1)

这是一个非常简单而令人讨厌的例子,现在使用一个你可以开火的事件:)。

jsFiddle:https://jsfiddle.net/CanvasCode/jwzLr4wh/1/

javascript

    image = new Image();
image.src = "https://upload.wikimedia.org/wikipedia/commons/1/1e/Large_Siamese_cat_tosses_a_mouse.jpg";

var canvas = document.getElementById('myCanvas-1');
var ctx = document.getElementById('myCanvas-1').getContext('2d');
var loading = true;
var loadingText = "Loading";

var event = new Event('loading');

// Listen for the event.
canvas.addEventListener('loading', function (e) {
    // Quick and nasty
    setInterval(function () {
        if (loading) {
            console.log("update");
            ctx.fillStyle = "#FFF";
            ctx.fillRect(0, 0, 400, 400);
            ctx.font = '15pt Arial ';
            ctx.fillStyle = "#000";
            ctx.fillText(loadingText, 200, 200);
            if (loadingText == "Loading...") {
                loadingText = "Loading";
            }
            loadingText = loadingText + "."
        }
    }, 1);
}, false);

canvas.dispatchEvent(event);
setTimeout(function () {
    ctx.drawImage(image, 0, 0);
    ctx.font = '15pt Arial ';
    ctx.fillStyle = "#000";
    loading = false;
}, 5000);

现在使用一个可以手动触发的事件,将画布设置为加载。