原生js开发的日历插件


Posted in Javascript onFebruary 04, 2017

效果如下所示:

原生js开发的日历插件

代码如下:

<style type="text/css">
 * {
 margin: 0;
 padding: 0;
 }
 ul, li {
 list-style: none;
 }
 #week {
 width: 350px;
 height: 350px;
 border: 1px solid #ccc;
 }
 #week h6 {
 font-size: 20px;
 overflow: hidden;
 height: 40px;
 line-height: 40px;
 }
 #week h6 div {
 float: left;
 width: 250px;
 text-align: center;
 }
 #week .prev {
 float: left;
 font-size: 12px;
 width: 50px;
 cursor: pointer;
 }
 #week .next {
 float: right;
 font-size: 12px;
 width: 50px;
 cursor: pointer;
 }
 #week p span {
 width: 50px;
 float: left;
 text-align: center;
 height: 30px;
 line-height: 30px;
 }
 #week p {
 background: #ccc;
 overflow: hidden;
 height: 30px;
 }
 #week ul {
 margin-top: 10px;
 }
 #week ul li {
 width: 50px;
 float: left;
 text-align: center;
 height: 30px;
 cursor: pointer;
 }
 </style>
<input type="text" id="ele" onfocus="currentWeek(this)"/>
<script>
 function currentWeek(ele) {
 var obj = offset(ele);
 var x = obj.left;
 var y = obj.top + ele.offsetHeight + 1;
 //创建日历界面
 if (!document.getElementById('week')) {
 var oDiv = document.createElement('div');
 document.body.appendChild(oDiv);
 oDiv.id = 'week';
 oDiv.style.top = y + "px";
 oDiv.style.left = x + "px";
 //创建日历title
 var h6 = document.createElement('h6');
 oDiv.appendChild(h6);
 var prev = document.createElement('div');
 h6.appendChild(prev);
 prev.className = 'prev';
 prev.innerHTML = '上个月';
 var content = document.createElement('div');
 content.className = "content";
 h6.appendChild(content);
 var next = document.createElement('div');
 h6.appendChild(next);
 next.className = 'next';
 next.innerHTML = '下个月';
 //创建星期日到星期六的文字行
 var oPs = document.createElement('p');
 oPs.className = "rlTitle";
 oDiv.appendChild(oPs);
 var opsCont = ['日', '一', '二', '三', '四', '五', '六'];
 for (var i = 0; i <= 6; i++) {
 var oSpan = document.createElement('span');
 oPs.appendChild(oSpan);
 oSpan.innerHTML = opsCont[i];
 }
 //创建日历上面的日期行数所需要的变量
 var oUl = document.createElement('ul');
 oUl.className = "rlCenter";
 oDiv.appendChild(oUl);
 var currentDate = new Date();
 var currentYear = currentDate.getFullYear();
 var currentMonth = currentDate.getMonth();
 active(currentMonth);//传参数月份
 //创建日历上下翻月
 prev.onclick = function () {
 active(--currentMonth);
 };
 next.onclick = function () {
 active(++currentMonth);
 };
 }
 //动态创建日历上面日期,变包装成方法
 function active(m) {
 oUl.innerHTML = ''; //切忌一定要把这个内容去掉,要不然会点一次翻页都在日历下面依次显示出来
 var activeDate = new Date(currentYear, m, 1); //外面传进来的不断变化的日期对象
 var year = activeDate.getFullYear();
 var month = activeDate.getMonth(); //把当前的月份保存下来只是为了给title获取月份
 content.innerHTML = year + '年' + (month + 1) + '月';
 //创建日历上面的日期行数
 var n = 1 - activeDate.getDay();
 if (n == 1) {
 n = -6;
 } //为了日历更友好的显示三个月,让用户看的更明白。
 activeDate.setDate(n); //如果n为负数,则减少月份.在用这个月最后一天减去这个值就可以获得日历从哪天开始的。
 for (var i = 0; i < 42; i++) {
 var oLi = document.createElement('li');
 oUl.appendChild(oLi);
 var date = activeDate.getDate(); //返回日期1-31号
 oLi.innerHTML = date;
 oLi.dateValue = year + "-" + (activeDate.getMonth() + 1) + "-" + date; //这里必须是activeDate.getMonth()+1,不能用m+1。因为这个是一直变化的。要不然日历不管点哪天都是属于当前月份的。
 oLi.onclick = function () {
  ele.value = this.dateValue;//文本框获取的年月日
  document.body.removeChild(oDiv); //获取到年月日,日历取消
  oDiv = null;
 };
 if (activeDate.getMonth() != month) {
  oLi.style.color = "#ccc"; //不是本月的天数颜色变成灰色 
 }
 //切忌下面这个增加天数语句,一定要判断完上面是不是本月的天数,然后在添加这条增加语句,要不然会出现错误。
 activeDate.setDate(date + 1); //如果超出该月份应有的天数则增加月份
 }
 }
 }
 function offset(ele) {
 var l = ele.offsetLeft;
 var t = ele.offsetTop;
 var p = ele.offsetParent;
 while (p) {
 if (window.navigator.userAgent.indexOf("MSIE 8") > -1) {
 l += p.offsetLeft;
 t += p.offsetTop;
 } else {
 l += p.offsetLeft + p.clientLeft;
 t += p.offsetTop + p.clientTop;
 }
 p = p.offsetParent;
 }
 return {
 left: l,
 top: t
 }
 }
</script>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
cnblogs中在闪存中屏蔽某人的实现代码
Nov 14 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
Mar 09 Javascript
jquery实现左右滑动菜单效果代码
Aug 27 Javascript
jquery.serialize() 函数语法及简单实例
Jul 08 Javascript
js基于myFocus实现轮播图效果
Feb 14 Javascript
canvas压缩图片转换成base64格式输出文件流
Mar 09 Javascript
利用JS实现scroll自定义滚动效果详解
Oct 17 Javascript
Vue中render方法的使用详解
Jan 26 Javascript
Vue-cli中为单独页面设置背景色的实现方法
Feb 11 Javascript
JS中min函数实例讲解
Feb 18 Javascript
JS中注入eval, Function等系统函数截获动态代码
Apr 03 Javascript
实现一个 Vue 吸顶锚点组件方法
Jul 10 Javascript
JS Select下拉框(支持输入模糊查询)
Feb 04 #Javascript
原生js实现打字动画游戏
Feb 04 #Javascript
js实现自定义路由
Feb 04 #Javascript
jQuery窗口拖动功能的实现代码
Feb 04 #Javascript
简单易懂的天气插件(代码分享)
Feb 04 #Javascript
URL中“#” “?” &amp;“”号的作用浅析
Feb 04 #Javascript
Angularjs 依赖压缩及自定义过滤器写法
Feb 04 #Javascript
You might like
php xml文件操作代码(一)
2009/03/20 PHP
PHP 字符串 小常识
2009/06/05 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
JavaScript实现事件的中断传播和行为阻止方法示例
2017/01/20 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
Python操作列表的常用方法分享
2014/02/13 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
初步理解Python进程的信号通讯
2015/04/09 Python
python函数的5种参数详解
2017/02/24 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
Python实现Event回调机制的方法
2019/02/13 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
python opencv实现图像配准与比较
2021/02/09 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
数学国培研修感言
2014/02/13 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
寒暑假实习证明书模板
2014/11/29 职场文书
投资申请报告
2015/05/19 职场文书
死亡诗社观后感
2015/06/05 职场文书
初中化学教学反思
2016/02/22 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL