IFE-2016-SP_task17_aqi_histogram
by baishusama
HTML
<fieldset id="form-gra-time">
<legend>请选择日期粒度:</legend>
<label>日<input name="gra-time" value="day" type="radio" checked="checked"></label>
<label>周<input name="gra-time" value="week" type="radio"></label>
<label>月<input name="gra-time" value="month" type="radio"></label>
</fieldset>
<fieldset>
<legend>请选择查看的城市:</legend>
<select id="city-select">
<!-- <option>北京</option> -->
</select>
</fieldset>
<div class="aqi-chart-wrap">
请选择选项来生成图表OvO
</div>
CSS
body {
min-width: 800px;
}
.aqi-chart-wrap {
display: -webkit-flex;
display: -moz-flex;
display: -ms-flex;
display: -o-flex;
display: flex;
/*flex-direction: row;
flex-wrap: nowrap;*/
flex-flow: row nowrap;
justify-content: space-around;
align-items: flex-end;
background-color: #ddd;
color: #555;
text-align: center;
}
.aqi-chart-wrap div {
border: 1px solid #000;
border-bottom: none;
/*height: 200px;*/
/*background-color: pink;*/
}
.aqi-chart-wrap .day {
min-width: 5px;
max-width: 10px;
}
.aqi-chart-wrap .week {
min-width: 25px;
max-width: 30px;
}
.aqi-chart-wrap .month {
min-width: 60px;
max-width: 70px;
}
.aqi-chart-wrap .very-good {
background-color: hsla(120, 100%, 80%,1);
}
.aqi-chart-wrap .good {
background-color: hsla(60, 90%, 70%,1);
}
.aqi-chart-wrap .not-bad {
background-color: hsla(40, 80%, 60%,1);
}
.aqi-chart-wrap .serious {
background-color: hsla(20, 70%, 50%,1);
}
.aqi-chart-wrap .very-serious {
background-color: hsla(0, 60%, 40%,1);
}
JavaScript
/* 数据格式演示
var aqiSourceData = {
"北京": {
"2016-01-01": 10,
"2016-01-02": 10,
"2016-01-03": 10,
"2016-01-04": 10
}
};
*/
// 以下两个函数用于随机模拟生成测试数据
function getDateStr(dat) {
var y = dat.getFullYear();
var m = dat.getMonth() + 1;
m = m < 10 ? '0' + m : m;
var d = dat.getDate();
d = d < 10 ? '0' + d : d;
return y + '-' + m + '-' + d;
}
function randomBuildData(seed) {
var returnData = {};
var dat = new Date("2016-01-01");
var datStr = ''
for (var i = 1; i < 92; i++) {
datStr = getDateStr(dat);
returnData[datStr] = Math.ceil(Math.random() * seed);
dat.setDate(dat.getDate() + 1);
}
return returnData;
}
var aqiSourceData = {
"北京": randomBuildData(500),
"上海": randomBuildData(300),
"广州": randomBuildData(200),
"深圳": randomBuildData(100),
"成都": randomBuildData(300),
"西安": randomBuildData(500),
"福州": randomBuildData(100),
"厦门": randomBuildData(100),
"沈阳": randomBuildData(500)
};
// 用于渲染图表的数据
var chartData = {};
// 记录当前页面的表单选项
var pageState = {
nowSelectCity: "北京",//-1,//??? why number?
nowGraTime: "day"
}
/**
* 渲染图表
*/
function renderChart() {
var wrap = document.getElementsByClassName("aqi-chart-wrap")[0];
wrap.innerHTML = "";
var className = pageState.nowGraTime.toLowerCase();
console.log(chartData)
var div = null;
for(var t in chartData){
var data = chartData[t];
var aqiCondition = "";
if(data > 400){
aqiCondition = "very-serious";
}
else if(data > 300){
aqiCondition = "serious";
}
else if(data > 200){
aqiCondition = "not-bad";
}
else if(data > 100){
aqiCondition = "good";
}
else {
aqiCondition = "very-good";
}
div = document.createElement("div");
div.title = t + ': ' + data;
div.className = className + ' ' + aqiCondition;
div.style = "height: " + (parseInt(data) * 2) + "px;";
wrap.appendChild(div);
}
}
/**
* 日、周、月的radio事件点击时的处理函数
*/
function graTimeChange() {
var...