原生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 相关文章推荐
分享几个超级震憾的图片特效
Jan 08 Javascript
js局部刷新页面时间具体实现
Jul 04 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
Nov 19 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
May 20 Javascript
原生js的数组除重复简单实例
May 24 Javascript
js实现悬浮窗效果(支持拖动)
Mar 09 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
AngularJS封装$http.post()实例详解
May 06 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
js禁止表单重复提交
Aug 29 Javascript
js封装成插件的步骤方法
Sep 11 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
Jan 23 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
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
php获取图片信息的方法详解
2015/12/10 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
Javascript 日期处理之时区问题
2009/10/08 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
JavaScript获得表单target属性的方法
2015/04/02 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
package.json文件配置详解
2017/06/15 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
Python OpenCV去除字母后面的杂线操作
2020/07/05 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
python 制作磁力搜索工具
2021/03/04 Python
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
爸爸的花儿落了教学反思
2014/02/20 职场文书
花坛标语大全
2014/06/30 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
图解上海144收音机
2021/04/22 无线电
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL