使用JS根据时间设置列的背景颜色
Setting background colour of a column depending on time using JS
我有五列,每列都有不同的时间,我想在下一列中突出显示时间之前的列。它们都是按时间顺序排列的,从最早到最晚。
具体来说,列A的时间为上午8点,列B的时间为下午12点,列C的时间为3点,列D的时间为6点,列E的时间为9点。因此,如果当前时间是下午2点,则B列应该高亮显示,直到时间是下午3点,此时C列变为高亮显示。
每个列都使用一个类定义,每次都从JSON文件中检索。
我的理解是,我必须使用getElementsByClassName并对集合进行迭代,因为每个结果都会产生一个集合。然而,这将针对所有列,而不仅仅是一个特定的列。
这就是我迄今为止在JavaScript代码方面所拥有的。注意,我使用的不是jQuery。
Javascript
var h = addZero(currentDate.getHours());
var m = addZero(currentDate.getMinutes());
var s = addZero(currentDate.getSeconds());
var time = h + timeSeparator + m + timeSeparator + s;
if (time >= timetables[i].sunrise || time >= timetables[i].lunchtime) {
var cols = document.getElementsByClassName('column');
for (var i = 0; i < cols.length; i++) {
cols[i].style.background = '#ba4346';
}
}
HTML
<section id="times">
<div class="container cf">
<div class="column">
<p id="sunrise">Sunrise</p>
<div class="separator"></div>
<p id="sunrise-time" class="time">undefined</p>
</div>
<div class="column">
<p id="lunchtime">Lunchtime</p>
<div class="separator"></div>
<p id="lunchtime-time" class="time">undefined</p>
</div>
</div>
</section>
您可以使用.getHours()函数
只需创建一个新的变量日期,然后使用.getHour()
来获取小时的值。
var d = new Date();
var h = d.getHours();
// and you have the current hours stored in a variable named h;
// now you can compare the hour with whatever you want and do whatever you want, e.g:
if (0 <= d <= 6 || 18 <= d <= 23) {
alert("it's night.");
} else {
alert("it's day.")
};
//changing background:
if (0 <= d <= 6 || 18 <= d <= 23) {
document.getElementById("columnId").style.background = "blue";
} else {
document.getElementById("column2Id").style.background = "yellow";
};
如果你有问题,告诉我你有什么问题。如果您需要操作DOM,我真的建议您使用JQuery,它要简单得多,而且它只是一个HTTP请求,而不是使用普通的JavaScript。
基本上,您需要有一种方法来"检查当前每列中的时间"。
var cols = document.getElementsByClassName('column');
for(var i=0; i<cols.length; i++){
//get the string from each column
var colTime = cols[i].children[2].innerHTML
if (colTime < currTime){
cols[i].style.background = '#ba4346';
}
}
这不会按原样工作,因为你的时间显示为一个时髦的字符串。如果您可以访问用于填充列的JSON对象,那么效果会好得多。
这样,你就可以做这样的事情:
var cols = document.getElementsByClassName('column');
for(var i=0; i<cols.length; i++){
if (jsonColumnData[i] < currTime){
cols[i].style.background = '#ba4346';
}
}
好多了。
经过多次修改,我终于找到了自己的解决方案。
对于每一列,我都分配了一个div ID,允许每一列单独作为目标。
<div class="column" id="sunrise">
<p id="sunrise-caption">Sunrise</p>
<div class="separator"></div>
<p id="sunrise-time" class="time">undefined</p>
</div>
我将JSON文件中每个数组中的所有非标准时间格式转换为Epoch时间。接下来,我为每个列ID编写if语句,检查时间是否大于或等于JSON文件中指定的epoch时间。
if (time >= timetables[i].sunrise) {
document.getElementById("sunrise").style.background = red;
document.getElementById("sunset").style.background = "none";
}
为了在v.s.epoch时间列中保留易于阅读的时间格式,我使用moment.unix
方法将epoch时间格式化为人类可读的时间。
也许不是最干净的解决方案,但似乎效果很好。欢迎提出建议。
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何使用jquery更改html中的背景颜色
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- JS幻灯片与CSS背景颜色变化
- DT数据表背景颜色为黑色,但仍有悬停和选择颜色
- Javascript通过列表项的函数和css来更改背景颜色
- Javascript没有从数组中选择背景颜色
- 使用圆中的数组更改背景颜色项目
- 如何用jquery动画改变背景颜色,就像一个过渡
- 使用jquery交换并保存背景颜色
- j查询如何设置/取消设置下拉菜单的背景颜色
- 使用angularjs根据时间更改背景颜色
- 设置Dojo量表的背景颜色
- javascript样式的背景颜色在设置时闪烁.ASP.NET
- 使用javascript更改任意文本的背景颜色
- 在用Javascript更改背景颜色后:hover don'不要改变颜色
- 图像内部的透明背景颜色不受影响
- jQuery mobile-动态更改ui页面背景颜色
- 切换按钮的背景颜色
- JavaScript更改类的背景颜色