#javascript #html #jquery #css
#javascript #HTML #jquery #css
Вопрос:
Я хочу обновить свою диаграмму с помощью ползунка диапазона. Ползунок диапазона обычно здесь означает ползунок времени, где я могу сдвинуть его и изменить время, и одновременно моя диаграмма также меняется. вот код, у меня есть ползунок, но при перемещении он не влияет на ось x моих диаграмм. Любая помощь высоко ценится. На данный момент ось x — это диапазон чисел, но в реальном времени мои 24 часа будут там.
<div class="container-fluid">
<div class="row">
<div class="col-2"></div>
<div class="col-4">
<div class="form-group mt-3 mb-3">
<label for="dataSet">Select Data</label>
<select class="form-control" id="dataSet">
<option id="opt1" value="1">All</option>
<option id="opt2" value="2">Ambient</option>
<option id="opt3" value="3">Booth</option>
</select>
</div>
</div>
<div class="col-4">
<div class="form-group mt-3 mb-3">
<label for="dataOption">Select Options</label>
<select class="form-control" id="dataOption">
<option id="dt1" value="1">All</option>
<option id="dt2" value="2">Temperature</option>
<option id="dt3" value="3">Humidity</option>
</select>
</div>
</div>
<div class="col-2"></div>
</div>
<div class="row">
<div class="col-2"></div>
<div class="col-8">
<canvas id="myChart"></canvas>
</div>
<div class="col-2"></div>
</div>
<div class="row">
<div class="col-2"></div>
<div class="col-8">
<canvas id="mixedChart"></canvas>
</div>
<div class="col-2"></div>
</div>
</div>
<div id="time-range">
<label>time</label>
<input id="hour-slider"
type="range" min="0" max="23"
style="width: 800px;" value="1800"
</div>
$(document).ready(function () {
var options = {
type: "line",
data: {
labels: [10,20,30,40,50,60],
datasets: [
{
label: "Ambient Temp",
data: [4, 15, 16, 5, 30, 17],
backgroundColor: 'rgba(75, 192, 192, 0.2)',
borderWidth: 1,
borderColor: 'rgba(75, 192, 192, 1)'
},
{
label: "Ambient Humidity",
data: [3, 10, 25, 8, 12, 4],
backgroundColor: 'rgba(255, 99, 132, 0.2)',
borderWidth: 1,
borderColor: 'rgba(255, 99, 132, 1)'
},
{
label: "Booth Temp",
data: [2, 19,26,8,12,28],
backgroundColor: 'rgba(153, 102, 255, 0.2)',
borderWidth: 1,
borderColor: 'rgba(153, 102, 255, 1)'
},
{
label: "Booth Humidity",
data: [1, 5,28,29,14,9],
backgroundColor: 'rgba(255, 159, 64, 0.2)',
borderWidth: 1,
borderColor: 'rgba(255, 159, 64, 1)'
}
]
},
options: {
scales: {
yAxes: [
{
ticks: {
reverse: false
}
}
]
}
}
};
var ctx = document.getElementById("myChart").getContext("2d");
var chart = new Chart(ctx, options);
function graphViews(){
var dataVal = $('#dataSet').val();
var optVal = $('#dataOption').val();
if(dataVal == "1" amp;amp; optVal == "1"){
chart.getDatasetMeta(0).hidden = false;
chart.getDatasetMeta(1).hidden = false;
chart.getDatasetMeta(2).hidden = false;
chart.getDatasetMeta(3).hidden = false;
chart.update();
chart.options.animation = true;
chart.options.animation.duration = 1000;
chart.options.animation.easing = 'linear';
chart.options.animation.from = 1;
chart.options.animation.to = 0;
}
else if(dataVal == "1" amp;amp; optVal == "2"){
chart.getDatasetMeta(0).hidden = false;
chart.getDatasetMeta(1).hidden = true;
chart.getDatasetMeta(2).hidden = false;
chart.getDatasetMeta(3).hidden = true;
chart.update();
}
else if(dataVal == "1" amp;amp; optVal == "3"){
chart.getDatasetMeta(0).hidden = true;
chart.getDatasetMeta(1).hidden = false;
chart.getDatasetMeta(2).hidden = true;
chart.getDatasetMeta(3).hidden = false;
chart.update();
}
else if(dataVal == "2" amp;amp; optVal == "1"){
chart.getDatasetMeta(0).hidden = false;
chart.getDatasetMeta(1).hidden = false;
chart.getDatasetMeta(2).hidden = true;
chart.getDatasetMeta(3).hidden = true;
chart.update();
}
else if(dataVal == "2" amp;amp; optVal == "2"){
chart.getDatasetMeta(0).hidden = false;
chart.getDatasetMeta(1).hidden = true;
chart.getDatasetMeta(2).hidden = true;
chart.getDatasetMeta(3).hidden = true;
chart.update();
}
else if(dataVal == "2" amp;amp; optVal == "3"){
chart.getDatasetMeta(0).hidden = true;
chart.getDatasetMeta(1).hidden = false;
chart.getDatasetMeta(2).hidden = true;
chart.getDatasetMeta(3).hidden = true;
chart.update();
}
else if(dataVal == "3" amp;amp; optVal == "1"){
chart.getDatasetMeta(0).hidden = true;
chart.getDatasetMeta(1).hidden = true;
chart.getDatasetMeta(2).hidden = false;
chart.getDatasetMeta(3).hidden = false;
chart.update();
}
else if(dataVal == "3" amp;amp; optVal == "2"){
chart.getDatasetMeta(0).hidden = true;
chart.getDatasetMeta(1).hidden = true;
chart.getDatasetMeta(2).hidden = false;
chart.getDatasetMeta(3).hidden = true;
chart.update();
}
else if(dataVal == "3" amp;amp; optVal == "3"){
chart.getDatasetMeta(0).hidden = true;
chart.getDatasetMeta(1).hidden = true;
chart.getDatasetMeta(2).hidden = true;
chart.getDatasetMeta(3).hidden = false;
chart.update();
}
};
$('#dataSet').on('change', function() {
graphViews();
});
$('#dataOption').on('change', function() {
graphViews();
});
});
$(".js-range-slider").ionRangeSlider({
onFinish: function (myChart) {
// Called then action is done and mouse is released
console.log(myChart.to);
},
});
Ответ №1:
Ваша первая проблема: вы никогда не выполняете ionRangeSlider, потому что не готовы к dom.
Вместо MyChart.для этого вам нужно использовать MyChart.from.
Для оси x, если вы хотите использовать метки, решение таково:
$(".js-range-slider").ionRangeSlider({
onFinish: function (myChart) {
var newxLabels = chart.data.labels.map(function(e) {
return Math.round(( e * myChart.from) / 100);
});
chart.data.labels = newxLabels;
chart.update();
}
});
Фрагмент:
$(document).ready(function () {
var options = {
type: "line",
data: {
labels: [10, 20, 30, 40, 50, 60],
datasets: [
{
label: "Ambient Temp",
data: [4, 15, 16, 5, 30, 17],
backgroundColor: 'rgba(75, 192, 192, 0.2)',
borderWidth: 1,
borderColor: 'rgba(75, 192, 192, 1)'
},
{
label: "Ambient Humidity",
data: [3, 10, 25, 8, 12, 4],
backgroundColor: 'rgba(255, 99, 132, 0.2)',
borderWidth: 1,
borderColor: 'rgba(255, 99, 132, 1)'
},
{
label: "Booth Temp",
data: [2, 19, 26, 8, 12, 28],
backgroundColor: 'rgba(153, 102, 255, 0.2)',
borderWidth: 1,
borderColor: 'rgba(153, 102, 255, 1)'
},
{
label: "Booth Humidity",
data: [1, 5, 28, 29, 14, 9],
backgroundColor: 'rgba(255, 159, 64, 0.2)',
borderWidth: 1,
borderColor: 'rgba(255, 159, 64, 1)'
}
]
},
options: {
scales: {
yAxes: [
{
ticks: {
reverse: false
}
}
]
}
}
};
var ctx = document.getElementById("myChart").getContext("2d");
var chart = new Chart(ctx, options);
function graphViews() {
var dataVal = $('#dataSet').val();
var optVal = $('#dataOption').val();
if (dataVal == "1" amp;amp; optVal == "1") {
chart.getDatasetMeta(0).hidden = false;
chart.getDatasetMeta(1).hidden = false;
chart.getDatasetMeta(2).hidden = false;
chart.getDatasetMeta(3).hidden = false;
chart.update();
chart.options.animation = true;
chart.options.animation.duration = 1000;
chart.options.animation.easing = 'linear';
chart.options.animation.from = 1;
chart.options.animation.to = 0;
}
else if (dataVal == "1" amp;amp; optVal == "2") {
chart.getDatasetMeta(0).hidden = false;
chart.getDatasetMeta(1).hidden = true;
chart.getDatasetMeta(2).hidden = false;
chart.getDatasetMeta(3).hidden = true;
chart.update();
}
else if (dataVal == "1" amp;amp; optVal == "3") {
chart.getDatasetMeta(0).hidden = true;
chart.getDatasetMeta(1).hidden = false;
chart.getDatasetMeta(2).hidden = true;
chart.getDatasetMeta(3).hidden = false;
chart.update();
}
else if (dataVal == "2" amp;amp; optVal == "1") {
chart.getDatasetMeta(0).hidden = false;
chart.getDatasetMeta(1).hidden = false;
chart.getDatasetMeta(2).hidden = true;
chart.getDatasetMeta(3).hidden = true;
chart.update();
}
else if (dataVal == "2" amp;amp; optVal == "2") {
chart.getDatasetMeta(0).hidden = false;
chart.getDatasetMeta(1).hidden = true;
chart.getDatasetMeta(2).hidden = true;
chart.getDatasetMeta(3).hidden = true;
chart.update();
}
else if (dataVal == "2" amp;amp; optVal == "3") {
chart.getDatasetMeta(0).hidden = true;
chart.getDatasetMeta(1).hidden = false;
chart.getDatasetMeta(2).hidden = true;
chart.getDatasetMeta(3).hidden = true;
chart.update();
}
else if (dataVal == "3" amp;amp; optVal == "1") {
chart.getDatasetMeta(0).hidden = true;
chart.getDatasetMeta(1).hidden = true;
chart.getDatasetMeta(2).hidden = false;
chart.getDatasetMeta(3).hidden = false;
chart.update();
}
else if (dataVal == "3" amp;amp; optVal == "2") {
chart.getDatasetMeta(0).hidden = true;
chart.getDatasetMeta(1).hidden = true;
chart.getDatasetMeta(2).hidden = false;
chart.getDatasetMeta(3).hidden = true;
chart.update();
}
else if (dataVal == "3" amp;amp; optVal == "3") {
chart.getDatasetMeta(0).hidden = true;
chart.getDatasetMeta(1).hidden = true;
chart.getDatasetMeta(2).hidden = true;
chart.getDatasetMeta(3).hidden = false;
chart.update();
}
};
$('#dataSet').on('change', function () {
graphViews();
});
$('#dataOption').on('change', function () {
graphViews();
});
$(".js-range-slider").ionRangeSlider({
onFinish: function (myChart) {
var newxLabels = chart.data.labels.map(function(e) {
return Math.round(( e * myChart.from) / 100);
});
chart.data.labels = newxLabels;
chart.update();
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/css/ion.rangeSlider.min.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.3.1/js/ion.rangeSlider.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<div class="container-fluid">
<div class="row">
<div class="col-2"></div>
<div class="col-4">
<div class="form-group mt-3 mb-3">
<label for="dataSet">Select Data</label>
<select class="form-control" id="dataSet">
<option id="opt1" value="1">All</option>
<option id="opt2" value="2">Ambient</option>
<option id="opt3" value="3">Booth</option>
</select>
</div>
</div>
<div class="col-4">
<div class="form-group mt-3 mb-3">
<label for="dataOption">Select Options</label>
<select class="form-control" id="dataOption">
<option id="dt1" value="1">All</option>
<option id="dt2" value="2">Temperature</option>
<option id="dt3" value="3">Humidity</option>
</select>
</div>
</div>
<div class="col-2"></div>
</div>
<div class="row">
<div class="col-2"></div>
<div class="col-8">
<canvas id="myChart"></canvas>
</div>
<div class="col-2"></div>
</div>
<div class="row">
<div class="col-2"></div>
<div class="col-8">
<canvas id="mixedChart"></canvas>
</div>
<div class="col-2"></div>
</div>
</div>
<div id="time-range">
<label>time</label>
<input id="hour-slider"
type="range" min="0" max="23"
style="width: 800px;" value="1800" class="js-range-slider">
</div>
Комментарии:
1. Привет! Спасибо, здесь все прекрасно работает. Но когда я использую это в своем codpen.io , это не работает. Ты знаешь почему?
2. вы включили библиотеки, html, js корректно, как во фрагменте? Если это работает здесь, то нет причин, потому что это не может работать в jsfiddle, copen, браузере…….
3. Здравствуйте, да, я пробовал это в моем редакторе VS code, это работает 🙂 метки меняются, да. но диаграммы нет, и при перемещении их назад метки диаграммы становятся равными 0, они не похожи на повторное изменение..