要在网页上为多个图表制作一个日期过滤器,可以按照以下步骤进行:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Date Filter Example</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div id="date-filter">
<label for="start-date">Start Date:</label>
<input type="date" id="start-date">
<label for="end-date">End Date:</label>
<input type="date" id="end-date">
<button id="filter-btn">Apply Filter</button>
</div>
<div id="chart-container">
<!-- Charts will be rendered here -->
</div>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="script.js"></script>
</body>
</html>
/* styles.css */
#date-filter {
margin-bottom: 20px;
}
// script.js
document.addEventListener('DOMContentLoaded', function() {
const ctx1 = document.createElement('canvas').getContext('2d');
const ctx2 = document.createElement('canvas').getContext('2d');
document.getElementById('chart-container').appendChild(ctx1.canvas);
document.getElementById('chart-container').appendChild(ctx2.canvas);
let chart1 = new Chart(ctx1, {
type: 'line',
data: { /* initial data */ },
options: { /* options */ }
});
let chart2 = new Chart(ctx2, {
type: 'bar',
data: { /* initial data */ },
options: { /* options */ }
});
document.getElementById('filter-btn').addEventListener('click', function() {
const startDate = document.getElementById('start-date').value;
const endDate = document.getElementById('end-date').value;
// Fetch and update chart data based on selected date range
fetchChartData(startDate, endDate).then(data => {
chart1.data.datasets[0].data = data.chart1Data;
chart2.data.datasets[0].data = data.chart2Data;
chart1.update();
chart2.update();
});
});
async function fetchChartData(startDate, endDate) {
// Simulate fetching data from a server
const response = await fetch(`/api/data?start=${startDate}&end=${endDate}`);
const json = await response.json();
return json;
}
});
fetch
)获取数据,并在数据加载完成后再更新图表。Date.parse()
或第三方库(如moment.js
)进行日期解析和格式化。async/await
处理异步操作,确保图表在数据准备好后才更新。通过以上步骤和代码示例,可以在网页上实现一个功能齐全的日期过滤器,适用于多个图表的交互式数据展示。
领取专属 10元无门槛券
手把手带您无忧上云