Javascript 在Chart.JS中动态设置动画

Javascript 在Chart.JS中动态设置动画,javascript,chart.js,chart.js2,Javascript,Chart.js,Chart.js2,我尝试在Chart.js中动态设置。应根据某些条件启用或禁用它 但由于某种原因,它总是处于启用或禁用状态 为了更好地描述我的问题,我做了一个简单的描述 查看下面的代码: 动画 没有动画 let animation=true 让图表 图表(动画) 功能图(动画){ const anim_duration=动画==假 ?{持续时间:0} :{持续时间:1000} document.getElementById('animation-info')。innerHTML=`动画:${animatio

我尝试在Chart.js中动态设置。应根据某些条件启用或禁用它

但由于某种原因,它总是处于启用或禁用状态

为了更好地描述我的问题,我做了一个简单的描述

查看下面的代码:


动画
没有动画
let animation=true
让图表
图表(动画)
功能图(动画){
const anim_duration=动画==假
?{持续时间:0}
:{持续时间:1000}
document.getElementById('animation-info')。innerHTML=`
动画:${animation}
动画持续时间:${anim_duration.duration}` //生成具有随机值的数据集 //随机值是此处的实际图表值 var dataset=Array.from({length:6},()=>Math.floor(Math.random()*6+1)) 变量选项={ 键入:“甜甜圈”, 数据:{ 标签:[“红色”、“蓝色”、“黄色”、“绿色”、“紫色”、“橙色”], 数据集:[{ 标签:“#投票数”, 数据:数据集, 背景颜色:[“红色”、“蓝色”、“黄色”、“绿色”、“紫色”、“橙色”], 边框宽度:1, } ] }, 选项:{ 动画:动画持续时间, 门诊量:60, 回答:是的, } } var ctx=document.getElementById('chart-container').getContext('2d')) 如果(图表类型=“未定义”) 图表=新图表(ctx,选项) 否则{ CHART.config=选项//使用新图表数据更新 CHART.update()//重新绘制图表 } }
.container{
文本对齐:居中;
填充:20px;
}
#动画信息{
填充物:5px;
字体大小:16px;
字体系列:Arial;
}
画布{
不透明度:0.7;
边缘顶部:20px;
}
钮扣{
填充:10px 20px;
利润率:10px;
}
我还尝试直接设置选项,如

Chart.defaults.global.animation.duration=持续时间
似乎是同一个问题



我相信问题是因为我不是每次都调用
newchart(ctx,options)
,而是只更新图表配置数据

我这样做是为了节省资源,因为我多次重建图表,每次调用
newchart(ctx,options)
似乎都是一个相当繁重的操作


解决方案:

正如他在下面的评论中所建议的,添加

CHART.options.animation.duration=animation==false?0 : 1000` 
CHART.update()之前,
做了一个小动作

if(图表类型==“未定义”)
图表=新图表(ctx,选项)
否则{
CHART.config=选项//使用新图表数据更新
CHART.options.animation.duration=animation==false?0:1000
CHART.update()//重新绘制图表
}

您试图设置错误的选项。这两个版本都有效。如果要将其设置为默认值,则必须如下所示:
Chart.defaults.global.animation.duration=animation?1000:0
。您还可以将其放置在选项对象中,如下所示:

const anim_duration = { duration : animation ? 1000 : 0 }

options: {
  animation: anim_duration
}
小提琴:

评论澄清后编辑:
在更新方法中设置动画
CHART.options.animation.duration=animation?1000 : 0;然后致电更新。

非常感谢您的回答@LeeLenalee。这不应该是语法问题。除非我遗漏了什么,否则我的三元运算符语法
var=condition?x:y
和您的一样正确。我已经用JSFIDLE更新了我的问题,以便更好地描述我的问题。是的,我的意思是你设置错误的原因在默认值上更加简单,但在我看来,你的动画也是这样,可读性更好,更干燥。我相信问题是因为我没有调用
新图表(ctx,选项)
每次,但仅更新配置数据。我这样做是为了节省资源,因为这似乎是一个相当繁重的操作。我已经编辑了你的小提琴,所以它可以做你想要的。在更新中,只需使用正确的持续时间覆盖持续时间。为了查看它是否正确,我按下一个新的数据集,以便您可以根据右键查看它是否动画。很好用!只需对fiddle
CHART.data.datasets=[{}]
稍作修改,这正是我所需要的。所以基本上我需要设置
CHART.options.animation.duration=animation?1000:0
之前的
图表。更新()
非常感谢!标记为接受。