在 Chart.js 中实现范围滑块

Posted

技术标签:

【中文标题】在 Chart.js 中实现范围滑块【英文标题】:Implementing range slider in Chart.js 【发布时间】:2018-07-23 19:13:52 【问题描述】:

这个错误发生在两天前,我想确认一下

【问题讨论】:

如果有人在某个时候遇到此问题,请尝试回滚到版本 3。对我来说,它表示编辑队列当前已满。 【参考方案1】:

你还能有动力去解决这个问题吗? 这是一件容易的事,真的。但是,您需要进一步了解它的工作原理。 首先,你在 $(document).ready 上写了这段代码,这意味着这段代码只在页面准备好之后运行。(一次) 图表无法更新。

var heating[] = parseInt(document.querySelector('#points').value);

另外,你添加了事件。

<input type="range" class="slider" value="5" min="30" max="50" id="points" onchange="function()">

这个事实告诉我你真的不了解事情。 通常,你需要像这样调用一个函数。

<input type="range" class="slider" value="5" min="30" max="50" id="points" onchange="testFunction()">

function testFunction() 
    // update chart...

或者添加事件(这次我使用jQuery)

<input type="range" class="slider" value="5" min="30" max="50" id="points">

$("#points").on("change", function() 
    // update chart...
);

最后,要更新 Chart.js,您需要更新数据集中的值,并调用它的 update 方法。您可以只更新一个数据集。

// Get heating datasets. (Yes, you can write 'barGraph.data.datasets[7].data = xxx')
var heatDatasts = barGraph.data.datasets[7];
// Update value
heatDatasts.data = [$(this).val()];
// Apply it to the view.
barGraph.update();

如果您不能使用调试工具,我建议至少使用警报。 (我在 jsfiddle 中使用过) 这样你就可以判断代码是否运行。

Example

更新1 第一个问题。 我更新了图片,希望你能理解。 有多种方式,但我选择了两种。

/*************** Pattern1 (Simply, using jQuery each) ***************/
// Loop
$.each(barGraph.data.datasets, function() 
    // Check the label or stack, in this case.
    if (this.label === "Heating Electrification") 
        // It's okay
        // heatDatasets = this;
        // Set value is also okay.
        this.data = [sliderValue];
        return false;
    
);
 /*************** Pattern2 (using jQuery grep or filter)***************/
 var heatDatasets = $.grep(barGraph.data.datasets, function(datasets) 
     return (datasets.label === "Heating Electrification");
 )[0];
 heatDatasets.data = [sliderValue];

第二个问题。 基本上,我们不在 html 上使用 javascript 变量。 不过,某些框架或库看起来是可能的。

// Set value, min and max.
// We can't use JavaScript variable on HTML, usually.
var slider = $("#points");
slider.prop("min", 0);
slider.prop("max", 1000);
slider.val(1000);

For example

更新2 我发现数据集可以有任何参数,所以你可以添加任何参数。 比如我加了'barId',修改了滑块(加了id,和'barId'一样)For example

【讨论】:

嗨,非常感谢您的回复。它奏效了,我非常感谢你给我的所有帮助。然而,快速的问题是,是否不可能将输入范围分配给特定变量。而不是 eah 数据集,因为在切换输入范围后对数据进行排序时,它不对应于同一个变量。我试过这样的事情: var heatDatasts = barGraph.data.datasets[mpg];但它没有工作 另外,是否可以有自定义的最小和最大范围,这将使它更容易。因为当我从每个位置获取数据时,我不想有预设的数据范围,而是更灵活。例如,,在 this 中 min="0 和 max="this。 currentvalue(mpg) 或任何特定变量。您可能知道,记录最小值和最大值并不是效率 对不起,我不明白你说的其他参数是什么意思。难道不只是 var heatDatasts = barGraph.data.datasets[mpg]; 我的意思是我更新图像、标签、背景颜色等的列。我稍后会告诉你,包括第二个问题。

以上是关于在 Chart.js 中实现范围滑块的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中实现一个滑块(SeekBar)

在图像滑块中实现导航

在使用动态数据的滑块中实现 jQuery

在反应中使用顺风 css 为范围滑块添加自定义工具提示

具有不同分段级别的 UISlider

在 Primeng Carousel 中放置 chart.js 圆环图时,画布内的文本似乎有点模糊/扭曲