原生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 相关文章推荐
autoIMG 基于jquery的图片自适应插件代码
Mar 12 Javascript
用js实现小球的自由移动代码
Apr 22 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
Sep 02 Javascript
JQuery datepicker 用法详解
Dec 25 Javascript
特殊日期提示功能的实现方法
Jun 16 Javascript
Bootstrap 网站实例之单页营销网站
Oct 20 Javascript
vue axios整合使用全攻略
May 24 Javascript
浅谈vue首屏加载优化
Jun 28 Javascript
浅谈vue方法内的方法使用this的问题
Sep 15 Javascript
layui radio单选限制下一个radio单选的实例
Sep 03 Javascript
js实现掷骰子小游戏
Oct 24 Javascript
vue-property-decorator用法详解
Dec 12 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
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
jQuery的链式调用浅析
2010/12/03 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
python使用opencv进行人脸识别
2017/04/07 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
详解python之heapq模块及排序操作
2019/04/04 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
Python爬虫开发与项目实战
2020/12/16 Python
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
密封类可以有虚函数吗
2014/08/11 面试题
精彩自我鉴定
2014/01/16 职场文书
cf收人广告词
2014/03/14 职场文书
股东合作协议书范本
2014/04/14 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
财务总监岗位职责
2015/02/03 职场文书
在职证明书模板
2015/06/15 职场文书