原生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 相关文章推荐
javascript 获取iframe里页面中元素值的方法
Feb 17 Javascript
Javascript实现禁止输入中文或英文的例子
Dec 09 Javascript
angularJS 中$scope方法使用指南
Feb 09 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
Jul 18 Javascript
js实现简洁的TAB滑动门效果代码
Sep 06 Javascript
jQuery Mobile 和 Kendo UI 的比较
May 05 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
Dec 26 Javascript
解决微信二次分享不显示摘要和图片的问题
Aug 18 Javascript
JavaScript模块模式实例详解
Oct 25 Javascript
基于Vue 服务端Cookies删除的问题
Sep 21 Javascript
JS获取月的第几周和年的第几周实例代码
Dec 05 Javascript
详解Vue中的scoped及穿透方法
Apr 18 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 file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
2016/03/04 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
vue axios登录请求拦截器
2018/04/02 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
python实现调用其他python脚本的方法
2014/10/05 Python
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
python的scipy实现插值的示例代码
2019/11/12 Python
python 如何对logging日志封装
2020/12/02 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
2014年向国旗敬礼活动方案
2014/09/27 职场文书
求职自我推荐信
2015/03/24 职场文书
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android