最近在做前端的东西比较多,为更好的掌握的前端技能水平,想通过写web前端组件来提供前端代码能力,第一个组件选了Windows 7右下角的日历为模仿对象
效果如下
Javascript代码
<script type="text/javascript"> var weekAry = ['日', '一', '二', '三', '四', '五', '六']; var monthAry = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']; var currentYear; var currentMonth; var navYear; var attachParent = null; var sourcePosition; //月份模式选择时的年 $(document).ready(function() { $('#birthday').bind('focus', function() { attachParent = $(this); sourcePosition = $(this).offset(); var showDate = new Date(); render_calendar(); }); $('#birthday').bind('focusout', function() { //$("#cal").hide(); }); $('#n_img').bind('click', function() { var neighboring = neighboringMonth(currentYear, currentMonth, 'n'); render_calendar(new Date(neighboring.year, neighboring.month - 1, 1)); }); $('#p_img').bind('click', function() { var neighboring = neighboringMonth(currentYear, currentMonth, 'p'); render_calendar(new Date(neighboring.year, neighboring.month - 1, 1)); }); $(document).bind('keypress', function(event) { if($('#cal').css('display') == 'block') { if(event.keyCode == 27) {//ESC $('#cal').hide(); } else if(event.keyCode == 33) {//Page Up var neighboring = neighboringMonth(currentYear, currentMonth, 'p'); render_calendar(new Date(neighboring.year, neighboring.month - 1, 1)); } else if(event.keyCode == 34){//Page Down var neighboring = neighboringMonth(currentYear, currentMonth, 'n'); render_calendar(new Date(neighboring.year, neighboring.month - 1, 1)); } } }); }); //点击 从输入框中获取日期,然后弹出日历框 跳到对应日期 如果日期为空则为当天日期 function show_calendar(input) { } //画日历 function render_calendar(to_showday) { $("#cal_tab thead tr").remove(); $("#cal_tab tbody tr").remove(); $('#yms').html(""); var showday = to_showday || new Date(); var year = showday.getFullYear(); var month = showday.getMonth() + 1; var day = showday.getDate(); var dayOfWeek = showday.getDay(); //星期几 currentYear = year; currentMonth = month; navYear = year; $("#cal_tab thead").append('<tr></tr>'); for(var i = 0; i < weekAry.length; i++) { $("#cal_tab thead tr").append('<td>' + weekAry[i] + '</td>'); } var firstDay = new Date(year, month - 1, 1); //日历显示月的1号 var firstDayOfWeek = firstDay.getDay(); //一号是星期几 var days = getDaysOfMonth(year, month); var lastMonthDays = month == 1 ? getDaysOfMonth(year - 1, 12) : getDaysOfMonth(year, month - 1); //前一个月有几天 var dayArry = []; //上一个月 var lastMonthBegin = firstDayOfWeek == 0 ? 7 : firstDayOfWeek; for(var i = lastMonthBegin - 1; i >= 0; i--) { dayArry.push(lastMonthDays - i); } //当前月 for(var i = 1; i <= days; i++) { dayArry.push(i); } //下个月 var leftDay = 42 - dayArry.length; for(var i = 1; i <= leftDay; i++) { dayArry.push(i); } //生成当前月 $("#cal_tab tbody").append('<tr></tr>'); for(var i = 0; i < 42; i++) { if(i <= lastMonthBegin - 1) { $("#cal_tab tbody tr:last").append("<td class='pm d_cell'>" + dayArry[i] + "</td>"); } else if(i < lastMonthBegin + days) { $("#cal_tab tbody tr:last").append("<td class='cm d_cell'>" + dayArry[i] + "</td>"); } else { $("#cal_tab tbody tr:last").append("<td class='nm d_cell'>" + dayArry[i] + "</td>"); } if(i != 0 && (i + 1) % 7 == 0) { $("#cal_tab tbody").append('<tr></tr>'); } } $('#cal_tab tbody tr td').bind('click', function() { if($(this).hasClass('pm')) { var neighboring = neighboringMonth(currentYear, currentMonth, 'p'); $('#birthday').val(neighboring.year + '-' + neighboring.month + '-' + $(this).text()); $('#cal').hide(); } else if($(this).hasClass('cm')) { $('#birthday').val(currentYear + '-' + currentMonth + '-' + $(this).text()); $('#cal').hide(); } else { var neighboring = neighboringMonth(currentYear, currentMonth, 'n'); $('#birthday').val(neighboring.year + '-' + neighboring.month + '-' + $(this).text()); $('#cal').hide(); } }); $('#yms').bind('click', showYearTable); $('#yms').html(year + "年" + month + "月"); if(sourcePosition != null){ $("#cal").css({'left':sourcePosition.left,'top':sourcePosition.top+20,'position':'absolute'}); } else { } $("#cal").show(); $("#day_cal").show(); } function showYearTable() { $('#day_cal').hide(); $('#month_cal table tr').remove(); $('#yyyy').html(navYear + '年'); $('#month_cal table').append('<tr></tr>'); for(var i = 0; i < monthAry.length; i++) { $('#month_cal table tr:last').append("<td class='m_cell' m='" + (i + 1) + "'>" + monthAry[i] + "</td>"); if((i + 1) % 4 == 0 && i != monthAry.length - 1) { $('#month_cal table').append('<tr></tr>') } } // py_img ny_img $('#py_img').unbind('click'); $('#py_img').bind('click', function() { navYear = navYear - 1; showYearTable(); }); $('#ny_img').unbind('click'); $('#ny_img').bind('click', function() { navYear = navYear + 1; showYearTable() }); $('.m_cell').unbind('click'); $('.m_cell').bind('click', function() { var m = $(this).attr('m'); $('#month_cal').hide(); $('#day_cal').show(); render_calendar(new Date(navYear, parseInt(m) - 1, 1)); }); $('#cal').show(); $('#month_cal').show(); } /** * flag 'n' or 'p' */ function neighboringMonth(year, month, flag) { if(flag === 'n') { var nYear = month === 12 ? year + 1 : year; var nMonth = month === 12 ? 1 : month + 1; return { 'year' : nYear, 'month' : nMonth }; } else { var nYear = month === 1 ? year - 1 : year; var nMonth = month === 1 ? 12 : month - 1; return { 'year' : nYear, 'month' : nMonth }; } } function getDaysOfMonth(year, month) { var dayOfMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var dayOfMonthLeap = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if(year % 100 == 0 && year % 400 == 0) { return dayOfMonthLeap[month - 1]; } else if(year % 4 == 0) { return dayOfMonthLeap[month - 1]; } else { return dayOfMonth[month - 1]; } } </script>
html代码
<body> <h1>仿Windows 7 日历</h1> <form style="position: absolute;top:60px;left: 50px;"> <label for="birthday">生日</label> <input type="text" style="width: 100px;" class="date_select" id="birthday"/> <label for="birthday">名字</label> <input type="text" style="width: 100px;" class="date_select" id="yourname"/> </form> <div id="cal" style="width: 175px;height: 150px;display: none;"> <div id="day_cal"> <div><img src="img/p_month.jpg" id="p_img"/><span id="yms" style=""></span><img src="img/n_month.jpg" id="n_img"/> </div> <table id="cal_tab"> <thead> <tr></tr> </thead> <tbody></tbody> </table> </div> <div id="month_cal"> <div><img src="img/p_month.jpg" id="py_img"/><span id="yyyy"></span><img src="img/n_month.jpg" id="ny_img"/> </div> <table id="month_tab"></table> </div> </div> </body>
日历组件代码还需要改进,包括功能改进、如何被其它页面调用等,有空再继续完善
相关推荐
在实际的网页开发中,实现仿Windows风格的时间和日历组件可能会涉及到以下技术点: 1. HTML结构:HTML代码将定义日历和时间组件的基本布局,包括时间的显示区域、日历的打开和关闭按钮等。 2. CSS样式:CSS将用于...
开发者可以通过研究这些源码学习如何创建交互式的Web日历组件,并可以根据需要自定义其样式和功能。此外,如果博客文章提供了详细的教程或解释,那么这对提升开发者在前端交互设计和JavaScript编程技能上会有很大...
【Windows风格的js日历插件(基于my97)】是一个JavaScript实现的日期选择器,它模拟了经典的Windows操作系统的界面风格,为网页提供了一种熟悉且易于使用的日期选择体验。这款插件的主要特点是对旧版Windows界面的...
总结来说,这个实例展示了如何利用原生JavaScript实现一个功能完备的日历组件,包括获取当前日期和时间、动态生成年月选择器、以及创建交互式的日历表格。这个日历组件可以被应用于各种Web项目中,提供日期选择功能...
"WIN7 财经日历Gadget"是一款专为Windows 7操作系统设计的小工具,它集成在桌面侧边栏,提供实时的财经新闻、股市数据、经济指标等信息,帮助用户快速掌握金融市场动态。这款小工具是Windows 7用户进行金融投资决策...
描述中提到的"会根据当月的日期数量展示"意味着日历组件需要动态调整布局,以适应不同月份的天数。例如,2月可能只需要4行,而4月或6月可能需要6行。此外,为了提高用户体验,日历应该支持用户点击日期,触发相应的...
将JSP文件的后缀名改为HTML,说明这个日历组件在客户端也能以静态HTML的形式预览,这可能是通过在JSP中嵌入静态HTML和JavaScript代码实现的。开发者为了便于测试和调试,给出了这种简单快捷的查看方式。 【标签】:...
【win8风格日历】是一种基于Windows 8操作系统界面设计灵感的日历组件,它提供了现代化、用户友好的日期和时间选择功能。在Web开发中,此类控件常常用于提升网站或应用的用户体验,使得用户能够方便地输入或选择日期...
在Java中,Swing和JavaFX提供了内置的日历组件,而在.NET Framework中,Windows Forms和WPF也有相应的控件。对于移动开发,iOS的UIKit和Android的Material Design都包含了日历组件,同时还有第三方库如React Native...
【Kalendar:浏览器中功能齐全,...综上所述,Kalendar是一个强大的JavaScript日历组件,结合Vue.js的灵活性和响应式设计的优势,为Web开发人员提供了一种高效、易用的解决方案,用于构建具有优秀日历功能的应用程序。
7. 响应式设计:虽然从内容描述中没有明确提及,但是一个优秀的日历组件还应考虑到屏幕尺寸变化时的适应性,即响应式设计,以便在不同尺寸的设备上都能提供良好的用户体验。 8. 代码规范和维护性:为了保证代码的...
开发者在实现日历组件时,可能需要使用特定的ActiveX控件或者JavaScript库来模拟日历功能,因为这些旧版本的IE不支持HTML5的`<input type="date">`。然而,从IE8开始,微软开始逐步支持HTML5,所以在这些较新的版本...
- 框架集成:在React、Vue、Angular等现代前端框架中,有许多第三方组件库提供了丰富的日历组件,如Ant Design的Calendar、Element UI的DatePicker等。 4. 平台应用: - 移动端:在iOS和Android应用中,日历控件...
"漂亮的日历控件"通常指的是那些不仅功能强大,而且设计美观,能够提升用户体验的日历组件。这类控件能够让用户在直观的界面中选择日期,进行事件安排或数据输入。 DaintyDateDemo可能是一个示例项目或者一个库,它...
- 有时,开发者会利用开放源码的日历组件,如Google Calendar API或iCal格式,以集成到自己的应用中。 4. **另类应用**: - 日历不仅可以用于基本的时间管理,还可以与其他功能结合,如天气预报、工作任务、会议...
在移动端应用开发中,日历组件通常是必不可少的元素,例如在事件管理、约会安排或者时间选择等场景下。Mobiscroll不仅提供了基本的日历视图,还支持时间选择器、日期时间选择器等多种模式,能满足不同应用场景的需求...
同时,第三方控件库如DevExpress、Telerik等提供了丰富的日历组件,它们不仅外观精美,还包含许多高级功能,如多选日期、拖放操作等,极大地提高了开发效率。 在设计日历控件时,用户体验是关键。良好的设计应考虑...
7. **兼容性问题**:由于ActiveX主要与Windows和Internet Explorer兼容,因此在非IE浏览器或非Windows操作系统上可能无法工作,这限制了其在现代Web开发中的广泛应用。 8. **安全性**:ActiveX控件可能带来安全风险...
在Web开发中,JavaScript库如jQuery UI、Bootstrap Datepicker或Angular Material提供了现成的下拉日历组件。这些库通常提供丰富的配置选项,可以自定义样式、日期格式、禁用日期等。在原生移动应用开发中,iOS的...