在 deck.js 内转换时重新渲染(或动画)chart.js 图表

Re-render (or animate) chart.js chart on transition within deck.js

我制作了一个 deck.js 幻灯片,其中一张幻灯片中有一个 chart.js 饼图。

我正在尝试让饼图在每次幻灯片转换时都设置动画。它目前仅在浏览器刷新后第一次转换为动画。

我试过添加 deck.events.js 扩展并使用 chart.update(),但它说图表未定义。如果没有 deck.becameCurrent 代码段,图表会显示,如果有代码段,console.log 会起作用。

如何让 deck.event 识别图表实例?

这里chart.update()是触发初始动画的正确方法吗?

    <body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js'></script>
<script src='{% static "vendor/deckjs/core/deck.core.js" %}'></script>
<script src='{% static "vendor/deckjs/extensions/events/deck.events.js" %}'>


        <div class="deck-container">
            <section class="slide" id="pie">
                <script>
                var ctx1 = $("#NestedChart").get(0).getContext("2d");
                var myChart1 = new Chart(ctx1, {
                    type: 'doughnut',
                    data: {
                        labels: [1,2,3,4,5],        
                        datasets: [{
                            data: [10,89,4,34,33],
                        },
                        options: {
                            animation: {
                                duration:2000
                    },
            });
            })
                </script>

                <div style="position: relative; height: 500px; width:500px" class='col-sm-6'>
                    <canvas style="position:absolute; top: 0px; left: 0px" id="NestedChart" width="400" height="400"></canvas>
                </div>
           </section>
       </div>

    <script>
      $(function() {
        $.deck('.slide', {countNested: false});

        $("#pie").bind('deck.becameCurrent', function(ev, direction) {
            console.log("test chart update");
            myChart1.update();
         });
      });
    </script>
    </body>

我通过将定义图表的代码移动到 becameCurrent 事件函数中来实现它:

 $(function() {
    $.deck('.slide', {countNested: false});
    $.deck('showGoTo');
    $("#pie").bind('deck.becameCurrent', function(ev, direction) {
        const ctx1 = $("#NestedChart").get(0).getContext("2d");
        const myChart1 = new Chart(ctx1, {.....

这会在每次转换时重新呈现图表。 if 循环允许它仅在向前转换时设置动画。 将 myChart1 变量声明放在其他任何地方会第一次初始化图表,但 becameCurrent() 函数中的 myChart1.render()myChart1.reset().update() 似乎仍然没有做任何事情。