Javascript 在Chart.JS中动态设置动画
我尝试在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
动画
没有动画
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,选项)
每次,但仅更新配置数据。我这样做是为了节省资源,因为这似乎是一个相当繁重的操作。我已经编辑了你的小提琴,所以它可以做你想要的。在更新中,只需使用正确的持续时间覆盖持续时间。为了查看它是否正确,我按下一个新的数据集,以便您可以根据右键查看它是否动画。很好用!只需对fiddleCHART.data.datasets=[{}]
稍作修改,这正是我所需要的。所以基本上我需要设置CHART.options.animation.duration=animation?1000:0
之前的图表。更新()
非常感谢!标记为接受。