jquery编写的简单日历

以前在开发web页面的时候遇到日历,都是直接引入一些日历组件来用,一直不太明白实现原理,总感觉挺复杂的。

今天尝试着用jquery写了一个简单的日历功能,可以选择年份,月份,返回今天,原来简单的日历功能自己也是可以写的。至于日历中的其他一些强大功能相信只要努力,也是可以实现的。

下面贴出实现的代码,供小伙伴们参考,希望对你们有一些帮助。

一、首页是html代码,其中的css,js引入路径和文件名需要自己改一下,其中我用的是jquery的1.8.3,可以引入其他更高版本,自行引入。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>日历</title>
 6     <link rel="stylesheet" href="css/style.css">
 7     <script src="js/jquery-1.8.3.min.js"></script>
 8     <script src="js/demo.js"></script>
 9 </head>
10 <body>
11     <div class="main clearfix">
12         <div class="menu clearfix">
13             <div class="select fl pr">
14                 <ul class="select-list select-year pa none">
15                     <li value="2015">2015年</li>
16                     <li value="2016">2016年</li>
17                     <li value="2017">2017年</li>
18                 </ul>
19                 <div class="select-text year"><span class="year-text" value="2016">2016年</span>▼</div>
20             </div>
21             <a class="select-prev fl" href="javascript:;">&lt;</a>
22             <div class="select month fl pr">
23                 <ul class="select-list pa none">
24                     <li value="1">1月</li>
25                     <li value="2">2月</li>
26                     <li value="3">3月</li>
27                     <li value="4">4月</li>
28                     <li value="5">5月</li>
29                     <li value="6">6月</li>
30                     <li value="7">7月</li>
31                     <li value="8">8月</li>
32                     <li value="9">9月</li>
33                     <li value="10">10月</li>
34                     <li value="11">11月</li>
35                     <li value="12">12月</li>
36                 </ul>
37                 <div class="select-text"><span class="month-text" value="1">1月</span>▼</div>
38             </div>
39             <a class="select-next fl" href="javascript:;">&gt;</a>
40             <a class="select-today fl" href="javascript:;">返回今天</a>
41             <div class="time fl">10:40:05</div>
42         </div>
43         <ul class="title">
44             <li>日</li><li>一</li><li>二</li><li>三</li><li>四</li><li>五</li><li>六</li>
45         </ul>
46         <ul class="table">
47             <li><span>1</span></li><li><span>2</span>
48         </ul>
49     </div>
50 </body>
51 </html>

二、接下来是css样式

 1 *{margin:0;padding: 0;font-family: ‘微软雅黑‘;}
 2 body{background: #fff;}
 3 ul{list-style: none;}
 4 a{text-decoration: none;color:#333;}
 5 img{border:none;}
 6 .fl{float:left;_display:inline;}
 7 .fr{float:right;_display:inline;}
 8 .pr{position: relative;}
 9 .pa{position: absolute;}
10 .none{display: none;}
11 .clearfix:before,.clearfix:after{content:"";display:table;}
12 .clearfix:after{clear:both;}
13 .clearfix{*zoom:1;}
14
15 .main{width:385px;margin:20px auto;padding:10px;border:2px #57abff solid;color:#333;}
16 .menu{font-size: 14px;}
17 .select{width:80px;height:25px;line-height:25px;border:1px #d8d8d8 solid;cursor: default;}
18 .select-text{text-align: center;}
19 .select-text:hover{box-shadow: 1px 1px 0 0 #d8d8d8 inset;}
20 .select div.current{box-shadow: 1px 1px 0 0 #d8d8d8 inset;}
21 .month{border-left:none;border-right:none;}
22 .select-list{left:-1px;top:25px;width: 80px;max-height:360px;background: #fff;border:1px #d8d8d8 solid;overflow: auto;}
23 .select-list li{height: 30px;line-height: 30px;text-indent: 10px;cursor: pointer;}
24 .select-list li.selected{background: #d8d8d8;}
25 .select-list li.on{background: #d8d8d8;}
26 .select-prev,.select-next{width:25px;height: 25px;margin-left:10px;line-height: 25px;text-align: center;border:1px #d8d8d8 solid;cursor: pointer;}
27 .select-next{margin:0;}
28 .select-today{width:80px;height: 25px;margin-left:10px;line-height: 25px;text-align: center;border:1px #d8d8d8 solid;cursor: pointer;}
29 .select-prev:hover,.select-next:hover,.select-today:hover{border:1px #57abff solid;}
30 .select-prev:active,.select-next:active,.select-today:active{background: #f0f0f0;box-shadow: 1px 1px 1px #c7c7c7 inset;}
31 .time{height: 25px;margin-left:10px;line-height: 25px;}
32 .title{height:35px;font-size: 16px;margin-top:10px;border-top:1px #57abff solid;}
33 .title li{float:left;width:55px;height:35px;line-height: 35px;text-align: center;}
34 .table li{float:left;width:55px;height:55px;border-bottom: 1px #c8cacc solid;font-size: 18px;cursor: pointer;}
35 .table li span{display: block;width:51px;height:51px;line-height: 51px;text-align: center;border:2px #fff solid;}
36 .table li span.on{border:2px #fb0 solid;}
37 .table li span.today{background: #fb0;border:2px #fb0 solid;color:#fff;}

三、最后是js了,相信熟悉jquery的都感觉很简单,不太熟悉的可以多看看jquery手册,挺简单的。

  1 $(function(){
  2     var init = {
  3         startYear: 1900, //年份列表开始年
  4         endYear: 2050 //年份列表结束年
  5     };
  6     var fun = {
  7         init: function(){
  8             this.showYear();
  9             this.timeBox();
 10             this.dateBox();
 11         },
 12         showYear: function(){ //循环年列表
 13             var startYear = init.startYear,
 14                 endYear = init.endYear,
 15                 yearHtml = ‘‘;
 16             for(;startYear <= endYear; startYear++){
 17                 yearHtml += ‘<li value="‘+startYear+‘">‘+startYear+‘年</li>‘;
 18             };
 19             $(‘.select-year‘).html(yearHtml);
 20         },
 21         timeBox: function(){ //系统时间
 22             (function(){
 23                 var date = new Date();
 24                 var h = date.getHours(),
 25                     m = date.getMinutes(),
 26                     s = date.getSeconds();
 27                 var time = h + ‘:‘ + m + ‘:‘ + s;
 28                 var time = fun.timeBu(time);
 29                 $(‘.time‘).html(time);
 30                 setTimeout(arguments.callee, 1000);
 31             })();
 32         },
 33         timeBu: function(val){
 34             var arr = val.split(‘:‘);
 35             for(var i = 0; i < arr.length; i++){
 36                 if(arr[i] < 10){
 37                     arr[i] = ‘0‘ + arr[i];
 38                 }
 39             };
 40             return arr.join(‘:‘);
 41         },
 42         showDate: function(year, month){ //日历展示
 43             //改变下拉
 44             $(‘.year-text‘).text(year + ‘年‘).attr(‘value‘, year);
 45             $(‘.month-text‘).text(month + ‘月‘).attr(‘value‘, month);
 46             $(‘.select-list li‘).removeClass(‘selected‘);
 47             //为当前已经默认的年份和月份标为选中
 48             $(‘.select-list li‘).addClass(function(i){
 49                 var value = $(this).attr(‘value‘);
 50                 if(value == year || value == month){
 51                     return ‘selected‘;
 52                 }
 53             });
 54
 55             var setDate = new Date();
 56             setDate.setFullYear(year); //设置年份
 57             setDate.setMonth(month-1); //设置月份,因为系统的月份都是比真实的小1
 58             setDate.setDate(1); //设置成当前月第一天
 59
 60             var num = setDate.getDay(); //得到本月第一天是星期几
 61
 62             setDate.setMonth(month); //设置成正确的真实月份
 63             var lastDate = new Date(setDate.getTime() - 1000*60*60*24); //计算得到当前月最后一天的日期格式
 64             var lastDay = lastDate.getDate(); //获取本月最后一天是几号
 65
 66             //利用得到的当前月总天数来循环出当前月日历
 67             var html = ‘‘;
 68             for(var i = 1; i <= lastDay; i++){
 69                 html += ‘<li><span>‘+i+‘</span></li>‘;
 70             };
 71             $(‘.table‘).html(html);
 72
 73             var first = $(‘.table li:first‘),
 74                 w = first.outerWidth();
 75             first.css(‘marginLeft‘, w * num + ‘px‘); //根据得到的本月第一天是周几得出第一个li所在的位置,从而排列好整个日历
 76
 77             var nowDate = new Date(), //得到系统当前的真实时间
 78                 nowYear = nowDate.getFullYear(),
 79                 nowMonth = nowDate.getMonth() + 1,
 80                 today = nowDate.getDate(); //获取当前是几号
 81             if(nowYear == year && nowMonth == month){ //验证当前展示中是否包含今天
 82                 $(‘.table li‘).eq(today-1).find(‘span‘).addClass(‘today‘); //标出今天
 83             }
 84
 85         },
 86         dateBox: function(){
 87             var date = new Date(),
 88                 year = date.getFullYear(), //获取当前是哪一年
 89                 month = date.getMonth() + 1; //获取当前月
 90
 91             //初始化日历
 92             fun.showDate(year, month);
 93
 94         }
 95     }
 96     fun.init(); //运行
 97     //下拉选择
 98     $(‘.select-text‘).on(‘click‘, function(e){
 99         e.stopPropagation();
100         var self = $(this);
101         self.toggleClass(‘current‘);
102         self.parent().siblings(‘.select‘).find(‘.select-list‘).hide();
103         self.prev().toggle();
104         //点击是的年份时则始终保持已经选中的年在第一位
105         if(self.hasClass(‘year‘)){
106             $(‘.select-year‘).scrollTop(0);
107             var top = $(‘.select-year .selected‘).position().top;
108             $(‘.select-year‘).scrollTop(top);
109         }
110     });
111     //下拉悬浮
112     $(‘.select-list li‘).on({
113         ‘mouseenter‘: function(){
114             $(this).addClass(‘on‘);
115         },
116         ‘mouseleave‘: function(){
117             $(this).removeClass(‘on‘);
118         }
119     });
120     $(document).on(‘click‘, function(){
121         $(‘.select-list‘).hide();
122         $(‘.select-text‘).removeClass(‘current‘);
123     });
124     //切换年,月
125     $(‘.select-list li‘).on(‘click‘, function(){
126         if($(this).hasClass(‘selected‘)){ //如果是已经选中的则不用在重新初始化日历
127             return;
128         };
129         var self = $(this),
130             text = self.text(),
131             value = self.attr(‘value‘);
132         self.addClass(‘selected‘).siblings().removeClass(‘selected‘);
133         self.parent().next().find(‘span‘).text(text).attr(‘value‘, value);
134         var year = $(‘.year-text‘).attr(‘value‘),
135             month = $(‘.month-text‘).attr(‘value‘);
136         fun.showDate(year, month);
137     });
138
139     //返回今天
140     $(‘.select-today‘).on(‘click‘, function(){
141
142         fun.dateBox();
143     });
144
145     //日期选择
146     $(‘body‘).on(‘mouseenter‘, ‘.table span‘, function(){
147         $(this).addClass(‘on‘);
148     });
149     $(‘body‘).on(‘mouseleave‘, ‘.table span‘, function(){
150         $(this).removeClass(‘on‘);
151     });
152     $(‘body‘).on(‘click‘, ‘.table span‘, function(){
153         var year = $(‘.year-text‘).attr(‘value‘),
154             month = $(‘.month-text‘).attr(‘value‘),
155             day = $(this).text();
156         var date = year + ‘-‘ + month + ‘-‘ + day;
157         alert(date);
158     });
159
160     //前一个月
161     $(‘.select-prev‘).on(‘click‘, function(){
162         var year = parseInt($(‘.year-text‘).attr(‘value‘)),
163             month = parseInt($(‘.month-text‘).attr(‘value‘));
164         if(month - 1 > 0){
165             month = month - 1;
166         }else{
167             month = 12;
168             year = year - 1;
169             if(year < init.startYear){
170                 return;
171             }
172         };
173         fun.showDate(year, month);
174     });
175     //后一个月
176     $(‘.select-next‘).on(‘click‘, function(){
177         var year = parseInt($(‘.year-text‘).attr(‘value‘)),
178             month = parseInt($(‘.month-text‘).attr(‘value‘));
179         if(month + 1 <= 12){
180             month = month + 1;
181         }else{
182             month = 1;
183             year = year + 1;
184             if(year > init.endYear){
185                 return;
186             }
187         };
188         fun.showDate(year, month);
189     })
190
191 })

将html,css,js都复制下来,放入到自己建立的对应文件中,注意把html中的引入路径修改对,别忘记引入jquery哦,最后只要双击打开html页面即可查看了。

这是最终效果图

相信明白后你也可以写出自己需要的日历功能。

时间: 2024-10-12 03:19:13

jquery编写的简单日历的相关文章

js编写当天简单日历

之前一直很想用javascript写一个日历,但是因为完全没有好的思路, 所以迟迟没有尝试.最近在网上刚好看到用javascript编写的简单日历的例子,代码量虽然不大, 但是我觉得很好地阐述了js日历的实现原理.自己也尝试着做了一下,收获蛮大,掌握了基本的实现原理后,再想增加更多的功能,完全就可以自由发挥了,先在这里分享一下吧,有兴趣的可以试试! 一.表格行数问题 既然要显示日期表格的话,首先得知道这个表格有多少行多少列,列数是已经确定的,从星期天(日历上第1列是星期天)到星期六一共7列.要解

jQuery插件之——简单日历

最近在研究js插件的开发,以前看大神们,对插件都是信手拈来,随便玩弄,感觉自己要是达到那种水平就好了,就开始自己研究插件开发了.研究了一段时间之后,就开始写了自己的第一个日历插件,由于是初学插件开发,代码的可读性可能有点差,希望各位大神可以多提点意见,以后维护代码,让这个插件更加的完整.下面就贴出代码. 首先,给插件来个整体的div容器 <div class="y-total"></div> 本人习惯给容器取class或id名时,加上自己独特的前缀,这样,有助于

编写一个简单的Jquery插件

1.实现内容 定义一个简单的jquery插件,alert传递进来的参数 2.插件js文件(jquery.showplugin.js) (function ($) { //定义插件中的方法 var methods = { //Object showName: function (name) { alert('Name:' + name); }, showAge: function (age) { alert('Age' + age); } }; //method方法名 $.fn.showplugi

jQuery Datatable 实用简单实例

目标: 使用jQuery Datatable构造数据列表,并且增加或者隐藏相应的列,已达到数据显示要求.同时,jQuery Datatable强大的功能支持:排序,分页,搜索等. Query Datatable能良好支持数据完全加载到本地后构建数据列表,排序.分页.搜索等功能就会自带,不需要我们去关心,在此主要说明通过后台动态的加载数据,已达到在大数据面前提高效率的效果. 1. 通过后台进行分页 2. 通过后台进行排序 3. 通过后台进行搜索 具体使用方法: 1. 首先构建我们需要的数据列表,以

jQuery控件简易日历表格

jQuery控件简易日历表格代码,jquery表格,jquery插件 ,jquery,日期,时间,日历表格,表格代码,jQuery控件简易日历表格代码是一款较为简单的显示日历的代码,兼容firefox,chrome,ie. 下载地址:http://www.huiyi8.com/sc/6362.html(转载请注明此处)

jquery编写插件(转)

阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文:http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用j

《java小应用程序(Applet)和java应用程序(Application)分别编写的简单计算器》

Application和Java Applet的区别.Java语言是一种半编译半解释的语言.Java的用户程序分为两类:Java Application和Java Applet.这两类程序在组成结构和执行机制上都有一定的差异,主要体现在以下几方面:(1)运行方式不同.Java Application是完整的程序,可以独立运行:Java Applet程序不能单独运行, 它必须嵌入到用HTML语言编写的Web页面中,通过与Java兼容的浏览器来控制执行.(2)运行工具不同.Java Applicat

js超简单日历

用原生js写了一个超级简单的日历.当做是练习js中的Date类型. 思路: 获取某个日期,根据年份计算出每个月的天数. 利用Date中的getDay()知道该月份的第一天为星期几. 循环创建表格,显示日历. html 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>JS简单日历</title> 5 <meta http-equiv="Content-type" content=&

使用dom元素和jquery元素实现简单增删改的练习

软件开发实际就是数据的增删改查,javascript前端开发也不例外.今天学了jquery框架的简单使用.于是用它实现简单的增删改,接着也用原始的javascript实现同样的功能,以便看出jquery的强大: 代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" con