1. [代码] 采用工厂模式封装 !doctype htmlhtml head meta charset="UTF-8" meta name="Keywords" content="" meta name="Description" content="" titleDocument/title style type="text/css"*{margin:0;padding:0;}body{font-size:14px;font-fami
1. [代码]采用工厂模式封装
<!doctype html> <html > <head> <meta charset="UTF-8"> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> <style type="text/css"> *{margin:0;padding:0;} body{font-size:14px;font-family:"微软雅黑"} a{text-decoration:none;color:#000} ul li{list-style:none} #calBox{width:350px;height:370px;margin:100px auto;text-align:center;border-radius:100px;background:#ccc;border:5px solid #ccc;border-radius:5px;} #calBox #box1{width:350px;height:20px;background:#00ff99;} #calBox #box1 .year{display:inline-block;width:40px;} #calBox #box1 .month{display:inline-block;width:40px;} #calBox ul{width:350px;height:350px;} #calBox ul li{width:50px;height:50px;float:left;border-radius:25px;background:#eee;line-height:50px;} .iconfont{cursor:pointer} </style> <link rel="stylesheet" href="iconfont/iconfont.css"> </head> <body> <div id="calBox"> <div id="box1"> <span> <i class="iconfont add"></i> <span class="year"></span> <i class="iconfont delet"></i> 年 </span> <span> <i class="iconfont add"></i> <span class="month"></span> <i class="iconfont delet"></i> 月 </span> </div> <ul> </ul> </div> <script type="text/javascript"> window.onload = function(){ //阻止对文本的复制粘贴 document.oncontextmenu=new Function("event.returnValue=false"); document.onselectstart=new Function("event.returnValue=false"); function Factory(type){ return new this[type](); }; Factory.prototype.cal = function (){ //初始化万年历 this.setCal = function(){ var date = new Date(); //获取当年的年月日 var year = date.getFullYear();; var month = date.getMonth(); var dates = date.getDate(); var yearDom = getDomByClassName("box1","year"); var monthDom = getDomByClassName("box1","month"); yearDom.innerHTML = year; monthDom.innerHTML = month+1; //显示当前年月对应的万年历 this.cal(yearDom.innerHTML,monthDom.innerHTML-1,dates); }; //显示万年历 this.cal = function cal(year,month,dates){ var ulDom = dom("calBox").children[1]; ulDom.innerHTML=""; ulDom.innerHTML+="<li>日</li>"+ "<li>一</li>"+ "<li>二</li>"+ "<li>三</li>"+ "<li>四</li>"+ "<li>五</li>"+ "<li>六</li>"; var array = this.getArray(year,month); var firstDay = this.myTime(year,month).startDay; var days = this.myTime(year,month).days; for(var i=0;i<42;i++){ var html = "<li>"+array[i]+"</li>"; ulDom.innerHTML+=html; } for(j=firstDay;j<=firstDay+days-1;j++){ if(array[j] == dates){ ulDom.children[j+7].style.background = "#ccff99"; } } //添加鼠标点击事件 var $this = this; var iDoms = dom("box1").getElementsByTagName("i"); for(var k=0,len=iDoms.length;k<len;k++){ if(iDoms[k].className.search("add")!=-1){ iDoms[k].onclick = function (){ $this.add(this); }; }else{ iDoms[k].onclick = function (){ $this.delet(this); }; } } }; //显示本月份的数字排序 this.getArray = function getArray(year,month){ //获取本月份的对象 var newJson = this.myTime(year,month); //获取本月份第一天的星期数 var firstDay = newJson.startDay //获取本月份总共的天数 var days = newJson.days; //获取上个月份的总天数 var lastDays = ((month==0)?this.myTime(year-1,11):this.myTime(year,month-1)).days; //定义一个数组,将需要展示的数字都保存进去; var array = []; for(var i=(lastDays-firstDay+1);i<=lastDays;i++){ array.push(i); } for(var j=1;j<=days;j++){ array.push(j); } for(var k=1;k<=42-days-firstDay;k++){ array.push(k); } return array; }; //设置时间函数,参数为年月,结果返回月份对应的总天数和当月第一天所在的星期数 this.myTime = function myTime(year,month){ var json = {}; //设置时间 var myDate = new Date(); //设置当前时间为该月份的第一天 myDate.setFullYear(year,month,1); //获取月份第一天的星期数,并保存在json中 var firstDay = myDate.getDay(); json.startDay = firstDay; //将月份对应的天数保存在数组中 var daysArray = (year%4==0)?[31,29,31,30,31,30,31,31,30,31,30,31]:[31,28,31,30,31,30,31,31,30,31,30,31]; //判断该月份的天数,并保存在json中 json.days = daysArray[month]; return json; }; //添加add事件 this.add = function add(iDom){ var timeDom = iDom.parentElement.children[1]; var count = timeDom.innerHTML*1; if(timeDom.className=="month"){ timeDom.innerHTML = (count+1>12)?1:count+1; }else{ timeDom.innerHTML = count+1; }; var yearDom = getDomByClassName("box1","year"); var monthDom = getDomByClassName("box1","month"); this.cal(yearDom.innerHTML*1,monthDom.innerHTML-1,1); }; //添加delet事件 this.delet = function delet(iDom){ var timeDom = iDom.parentElement.children[1]; var count = timeDom.innerHTML*1; if(timeDom.className=="month"){ timeDom.innerHTML = (count-1<1)?12:count-1; }else{ timeDom.innerHTML = count-1; }; var yearDom = getDomByClassName("box1","year"); var monthDom = getDomByClassName("box1","month"); this.cal(yearDom.innerHTML*1,monthDom.innerHTML-1,1); }; }; new Factory("cal").setCal(); }; //通过className找到元素对象的方法 function getDomByClassName(id,className){ var clockDom = document.getElementById(id); var childDoms = clockDom.getElementsByTagName("*"); for(var i=0,len=childDoms.length;i<len;i++){ if(childDoms[i].className==className){ return childDoms[i]; } } }; function dom(id){ return document.getElementById(id); }; </script> </body> </html>