要做一个直播课程的效果,如果当前时间为直播开始以及之后的一个小时内,显示为正在直播,如果直播结束,归为往期课程
需要获取到当前客户端的时间,转换为时间戳,加一个定时器,和当前设置的时间进行比较,实现实时的比较。直播结束后,清除定时器。
分别分三种状态,
1.在直播开始和一个小时之内,显示直播中。
2.当前时间小于设置的时间,显示未开始
3.大于当前时间,归入往期课程。
用data-timeRang存储时间。
html部分:
<li class="live__item clearfix mb60" data-timeRang="2018-10-18 20:00:00">
<div class="live_time fl">
<h6 class="live__title"><span class="live__state--icon"></span>开课时间:</h6>
<p class="time__wrap"><span class="live__date">10月18日</span><span class="live__hour">20:00</span></p>
<p class="live__state">正在直播中</p>
</div>
</li>
<li class="live__item clearfix mb60" data-timeRang="2018-10-23 20:00:00">
<div class="live_time fl">
<h6 class="live__title"><span class="live__state--icon live__notstart"></span>开课时间:</h6>
<p class="time__wrap"><span class="live__date">10月23日</span><span class="live__hour">20:00</span></p>
<p class="live__state"></p>
</div>
</li>
js部分:
//直播状态
function test() {
var timer = setInterval(function () {
//获取客户端电脑当前时间戳,精确到毫秒
var nowTime = parseInt(new Date().getTime());
var timeList = $('.live__item');
for (var i = 0; i < timeList.length; i++) {
var ti = $(timeList[i]).attr('data-timeRang');
var startTime = date2TimeStamp(ti);
//结束时间,开始时间往后推1个小时,时间戳加上:60*60*1000 毫秒
var endTime = startTime + 3600000;
//判断当前时间在开始时间和开始时间之后一个小时内
if (nowTime >= startTime && nowTime <= endTime) {
//alert('正在直播中...');
$(timeList).eq(i).addClass('active').siblings().removeClass('active');
} else if (nowTime < startTime) {
//alert('直播未开始...');
} else {
//alert('直播已结束...');
$(".finish__wrap").prepend($(timeList).eq(i));
clearInterval(timer);
}
}
}, 1000);
}
/**
* 将时间格式转成时间戳,精确到毫秒(13位)
*/
function date2TimeStamp(strTime) {
var date = new Date(strTime.replace(/-/g, '/'));
return date.getTime();
}
test();