onAnimationComplete在动画完成之前执行

时间:2016-05-30 09:16:10

标签: javascript chart.js

我对我的图表使用chart.js,并希望在画布上使用.toDataURL

我尝试通过回调函数onAnimationCompleted完成动画后获取URL,但我的URL包含空图像。如果我发出警报(请参阅注释),则会在视觉上完成动画之前显示警报。

这是HTML

<h1>Chart as img</h1>
<img id="foobar" src="" />

<h1>Original Canvas</h1>
<canvas id="myChart" width="300" height="300"></canvas>

和JS:

var ctx = $("#myChart");
var myChart = new Chart(ctx, {
    type: 'doughnut',
    data: {
        labels: ["Red", "Blue",],
        datasets: [{
            data: [
                12,
                19
            ],
            backgroundColor: [
                'rgba(255, 99, 132, 0.2)',
                'rgba(54, 162, 235, 0.2)',
            ],
            borderColor: [
                'rgba(255,99,132,1)',
                'rgba(54, 162, 235, 1)',
            ],
            borderWidth: 1
        }]
    },
    options: {
        responsive: false,
        legend: {
            display: false,
        },
        onAnimationComplete: done(),
    }
});

function done() {
    var url = document.getElementById("myChart").toDataURL();
    // alert(url);
    $("#foobar").attr("src", url);
}

http://jsfiddle.net/7tjgf582/

2 个答案:

答案 0 :(得分:1)

简单。不要调用 done函数。

options: {
    responsive: false,
    legend: {
        display: false,
    },
    onAnimationComplete: done // <--- no parentheses!
}

答案 1 :(得分:1)

我认为这种情况正在发生,因为在浏览器中执行脚本时,您的函数直接为called。那不是回调。你可以试试这个:

var done = function () {
    var url = document.getElementById("myChart").toDataURL();
    // alert(url);
    $("#foobar").attr("src", url);
}

进一步说:

//Notice how I am using the variable instead of calling the function.
onAnimationComplete: done