Javascript 水平时隙
我正在尝试构建水平时隙查看器。到目前为止,我找到了我需要的东西,但几个月后: 代码如下:Javascript 水平时隙,javascript,html,jquery,css,timeline,Javascript,Html,Jquery,Css,Timeline,我正在尝试构建水平时隙查看器。到目前为止,我找到了我需要的东西,但几个月后: 代码如下: <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>The HTML5 Herald</title> <meta name="description"
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>The HTML5 Herald</title>
<meta name="description" content="The HTML5 Herald">
<meta name="author" content="SitePoint">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://momentjs.com/downloads/moment.js"></script>
</head>
<body>
<div id="timetable" class="clearfix">
<div class="timetable_content">
<ul class="months clearfix">
<li data-month="8" data-year="2015">August</li>
<li data-month="9" data-year="2015">September</li>
<li data-month="10" data-year="2015">October</li>
<li data-month="11" data-year="2015">November</li>
<li data-month="12" data-year="2015">December</li>
<li data-month="1" data-year="2016">January</li>
<li data-month="2" data-year="2016">February</li>
<li data-month="3" data-year="2016">March</li>
<li data-month="4" data-year="2016">April</li>
<li data-month="5" data-year="2016">May</li>
<li data-month="6" data-year="2016">June</li>
<li data-month="7" data-year="2016">July</li>
</ul>
<ul class="timeslots">
<li>
<span class="timeslot" data-date-start="2015-8-10" data-date-end="2015-10-12">BDO</span>
<span class="button"></span>
</li>
<li>
<span class="timeslot" data-date-start="2015-10-10" data-date-end="2016-2-12">BDO</span>
<span class="button"></span>
</li>
<li>
<span class="timeslot" data-date-start="2015-12-10" data-date-end="2016-2-12">BDO</span>
<span class="button"></span>
</li>
<li>
<span class="timeslot" data-date-start="2015-09-10" data-date-end="2016-7-12">BDO</span>
<span class="button"></span>
</li>
<li>
<span class="timeslot" data-date-start="2015-1-10" data-date-end="2015-3-12">BDO</span>
<span class="button"></span>
</li>
</ul>
</div>
</div>
</body>
<style type="text/css">
#timetable {
width: 100%;
height: auto;
max-width: 768px;
overflow-y: hidden;
border: 1px solid #ccc;
}
#timetable ul {
padding-left: 0;
list-style: none;
margin: 0 0 0 0;
}
#timetable .timetable_content {
width: 1024px;
}
.months {
max-height: 50px;
overflow: hidden;
}
.months li {
width: 110px;
text-align: center;
float: left;
display: inline-block;
border-right: 1px solid #ccc;
padding: 1em;
}
.timeslots li {
border-top: 1px solid #ccc;
padding: 0.5em;
}
.timeslots .timeslot {
background: lightblue;
padding: 0.5em;
display: inline-block;
}
.clearfix:after {
content: "";
display: table;
clear: both;
}
</style>
<script>
(function() {
var firstMonthsLiElWidth = $('.months li:first').innerWidth() + 1;
var monthItems = 0;
$('.months li').each(function(index) {
monthItems += firstMonthsLiElWidth;
});
$('.months, .timeslots, .timetable_content').width(monthItems);
console.log('<================== start slots =============================>');
$('.timeslots li').each(function(index) {
var element = $(this).children('span.timeslot'),
startDate = element.data().dateStart,
endDate = element.data().dateEnd,
startMonthAmountDaysInMonth = moment(startDate, "YYYY-MM-DD").daysInMonth(),
endMonthAmountDaysInMonth = moment(endDate, "YYYY-MM-DD").daysInMonth();
var startDateMoment = moment(startDate, 'YYYY-MM-DD');
var endDateMoment = moment(endDate, 'YYYY-MM-DD');
var daysInPorject = endDateMoment.diff(startDateMoment, 'days') // 1
console.log('daysInPorject: ', daysInPorject);
console.log('startMonthAmountDaysInMonth: ', startMonthAmountDaysInMonth);
console.log('endMonthAmountDaysInMonth: ', endMonthAmountDaysInMonth);
var startDateMonth = startDate.split("-")[1];
var endDateMonth = endDate.split("-")[1];
if (endDateMonth.indexOf('0') === 0) {
endDateMonth = parseInt(endDateMonth, 10);
}
if (startDateMonth.indexOf('0') === 0) {
startDateMonth = parseInt(startDateMonth, 10);
}
console.log('Months', startDateMonth + ' & ' + endDateMonth);
var startDateEl = $(".months li[data-month='" + startDateMonth + "']").offset().left;
var endDateEl = $(".months li[data-month='" + endDateMonth + "']").offset().left;
var endDateElEnd = endDateEl + 110;
var timeSlotWidth = endDateElEnd - startDateEl;
var pixelsPerDay = (Math.round(firstMonthsLiElWidth / startMonthAmountDaysInMonth) * daysInPorject + 'px');
console.log('Month start: ', startDateEl);
console.log('pixelsPerDay: ', pixelsPerDay);
console.log('Month end: ', endDateEl);
console.log('Day end: ', endDateEl);
console.log('Element length: ', timeSlotWidth);
element.css('margin-left', startDateEl);
element.width(pixelsPerDay);
console.log('=============================');
});
console.log('Moment', moment("2012-02", "YYYY-MM").daysInMonth());
})();
</script>
</html>
HTML5先驱
- 8月
- 9月
- 10月
- 11月
- 12月
- 1月
- 2月
- 3月
- 4月
- 五月
- 6月
- 7月
-
BDO
-
BDO
-
BDO
-
BDO
-
BDO
#时间表{
宽度:100%;
高度:自动;
最大宽度:768px;
溢出y:隐藏;
边框:1px实心#ccc;
}
#时间表ul{
左侧填充:0;
列表样式:无;
保证金:0;
}
#时间表。时间表内容{
宽度:1024px;
}
.个月{
最大高度:50px;
溢出:隐藏;
}
李先生{
宽度:110px;
文本对齐:居中;
浮动:左;
显示:内联块;
右边框:1px实心#ccc;
填充:1em;
}
.时隙李{
边框顶部:1px实心#ccc;
填充:0.5em;
}
.时隙.时隙{
背景:浅蓝色;
填充:0.5em;
显示:内联块;
}
.clearfix:之后{
内容:“;
显示:表格;
明确:两者皆有;
}
(功能(){
var firstMonthsLiElWidth=$('.months li:first')。innerWidth()+1;
var-monthItems=0;
$('.months li')。每个(函数(索引){
monthItems+=第一个月宽;
});
$('.月、.时隙、.时间表内容').宽度(月);
控制台日志(“”);
$('.timeslots li')。每个(函数(索引){
var元素=$(this.children('span.timeslot'),
startDate=element.data().dateStart,
endDate=element.data().dateEnd,
startMonthAmountDaysInMonth=时刻(startDate,“YYYY-MM-DD”)。daysInMonth(),
endMonthAmountDaysInMonth=时刻(endDate,“YYYY-MM-DD”)。daysInMonth();
var startDateMoment=力矩(startDate,‘YYYY-MM-DD’);
var ENDDATEMENT=力矩(endDate,'YYYY-MM-DD');
var daysInPorject=endDate矩.diff(startDate矩,'days')//1
log('daysInPorject:',daysInPorject);
log('startMonthAmountDaysInMonth:',startMonthAmountDaysInMonth');
log('endMonthAmountDaysInMonth:',endMonthAmountDaysInMonth);
var startDateMonth=startDate.split(“-”[1];
var endDateMonth=endDate.split(“-”[1];
if(endDateMonth.indexOf('0')==0){
endDateMonth=parseInt(endDateMonth,10);
}
if(startDateMonth.indexOf('0')==0){
startDateMonth=parseInt(startDateMonth,10);
}
console.log('Months',startDateMonth+'和'+endDateMonth');
var startDateEl=$(“.months li[数据月=”“+startDateMonth+”])。offset()。左;
var endDateEl=$(“.months li[data month='”+endDateMonth+“]”).offset().left;
var endDateElEnd=endDateEl+110;
var timeSlotWidth=enddatelend-startdatel;
var pixelsPerDay=(数学圆整(第一个月lielwidth/startmonmonthamountdaysinmonth)*daysInPorject+'px');
log('Month start:',startDateEl);
log('pixelsPerDay:',pixelsPerDay);
console.log('Month end:',enddatel);
console.log('Day end:',enddatel);
log('Element length:',timeSlotWidth);
元素css('margin-left',startDatel);
元素宽度(像素/天);
console.log('=====================================');
});
console.log('Moment',Moment('2012-02”,“YYYY-MM”).daysInMonth();
})();
我对这个例子有两个问题:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>The HTML5 Herald</title>
<meta name="description" content="The HTML5 Herald">
<meta name="author" content="SitePoint">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://momentjs.com/downloads/moment.js"></script>
</head>
<body>
<div id="timetable" class="clearfix">
<div class="timetable_content">
<ul class="hours clearfix">
<li data-hour="00">00:00</li>
<li data-hour="01">01:00</li>
<li data-hour="02">02:00</li>
<li data-hour="03">03:00</li>
<li data-hour="04">04:00</li>
<li data-hour="05">05:00</li>
<li data-hour="06">06:00</li>
<li data-hour="07">07:00</li>
<li data-hour="08">08:00</li>
<li data-hour="09">09:00</li>
<li data-hour="10">10:00</li>
<li data-hour="11">11:00</li>
<li data-hour="12">12:00</li>
<li data-hour="13">13:00</li>
<li data-hour="14">14:00</li>
<li data-hour="15">15:00</li>
<li data-hour="16">16:00</li>
<li data-hour="17">17:00</li>
<li data-hour="18">18:00</li>
<li data-hour="19">19:00</li>
<li data-hour="20">20:00</li>
<li data-hour="21">21:00</li>
<li data-hour="22">22:00</li>
<li data-hour="23">23:00</li>
<li data-hour="00">00:00</li>
</ul>
<ul class="timeslots">
<li>
<span class="timeslot" data-hour-start="18" data-hour-end="19">BDO</span>
<span class="button"></span>
</li>
<!-- <li>
<span class="timeslot" data-date-start="2015-10-10" data-date-end="2016-2-12">BDO</span>
<span class="button"></span>
</li>
<li>
<span class="timeslot" data-date-start="2015-12-10" data-date-end="2016-2-12">BDO</span>
<span class="button"></span>
</li>
<li>
<span class="timeslot" data-date-start="2015-09-10" data-date-end="2016-7-12">BDO</span>
<span class="button"></span>
</li>
<li>
<span class="timeslot" data-date-start="2015-1-10" data-date-end="2015-3-12">BDO</span>
<span class="button"></span>
</li> -->
</ul>
</div>
</div>
</body>
<style type="text/css">
#timetable {
width: 100%;
height: auto;
max-width: 768px;
overflow-y: hidden;
border: 1px solid #ccc;
}
#timetable ul {
padding-left: 0;
list-style: none;
margin: 0 0 0 0;
}
#timetable .timetable_content {
width: 1024px;
}
.hours {
max-height: 50px;
overflow: hidden;
}
.hours li {
width: 110px;
text-align: center;
float: left;
display: inline-block;
border-right: 1px solid #ccc;
padding: 1em;
}
.timeslots li {
border-top: 1px solid #ccc;
}
.timeslots .timeslot {
background: lightblue;
display: inline-block;
}
.clearfix:after {
content: "";
display: table;
clear: both;
}
</style>
<script>
(function() {
var firstHoursLiElWidth = $('.hours li:first').innerWidth();
var hoursItems = 0;
$('.hours li').each(function(index) {
hoursItems += firstHoursLiElWidth;
});
$('.hours, .timeslots, .timetable_content').width(hoursItems);
console.log('<================== start slots =============================>');
$('.timeslots li').each(function(index) {
var element = $(this).children('span.timeslot'),
startDate = element.data().hourStart,
endDate = element.data().hourEnd,
startHourAmountHoursInDay = 24,
endHourAmountHoursInDay = 24;
var startDateMoment = startDate
var endDateMoment = endDate
var startDateHour = parseInt(startDateMoment, 10);
var endDateHour = parseInt(endDateMoment, 10);
var hoursInProject = (endDateHour - startDateHour) * 60;
console.log('startDate: ', startDate);
console.log('endDate: ', endDate);
console.log('hoursInProject: ', hoursInProject);
console.log('startMonthAmountDaysInMonth: ', startHourAmountHoursInDay);
console.log('endMonthAmountDaysInMonth: ', endHourAmountHoursInDay);
console.log('Hours', startDateHour + ' & ' + endDateHour);
console.log('startDateHour: ' + startDateHour);
console.log('endDateHour:' + endDateHour);
var startDateEl = $(".hours li[data-hour='" + startDateHour + "']").offset().left - 10;
var endDateEl = $(".hours li[data-hour='" + endDateHour + "']").offset().left;
var endDateElEnd = endDateEl;
var timeSlotWidth = endDateElEnd - startDateEl;
var pixelsPerHour = (Math.round(firstHoursLiElWidth / startHourAmountHoursInDay) * hoursInProject + 'px');
console.log('Month start: ', startDateEl);
console.log('pixelsPerHour: ', pixelsPerHour);
console.log('Month end: ', endDateEl);
console.log('Day end: ', endDateEl);
console.log('Element length: ', timeSlotWidth);
element.css('margin-left', startDateEl);
element.width(pixelsPerHour);
console.log('=============================');
});
})();
</script>
</html>
HTML5先驱
- 00:00
- 01:00
- 02:00
- 03:00
- 04:00
- 05:00
- 06:00
- 07:00
- 08:00
- 09:00
- 10:00
- 11:00
- 12:00
- 13:00
- 14:00
- 15:00
- 16:00