`

javascript 日历

阅读更多

 

1 html代码

<!doctype html>

<head>
<title>  </title>
<meta charset="utf-8"/>
 
 <style type="text/css">
    #calendar1 a{
    	float:left;
    	width:30px;
    }
    
    #calendar{
		background:none repeat scroll 0 0 #E0ECF9;
		width: 210px;
		border: 1px solid #479AC7;
		position:absolute;
		left:300px;
    }  
    #calendar .week{
		background:none repeat scroll 0 0 #D5F3F4;
		float:left;
		color:#808080;
    } 

    #calendar .week a{
		 cursor: auto;
    } 
      
    #calendar a{
    	float:left;
    	width:30px;
    	display:block;
    	height:25px; /* a标签 有这个值才显示 */
    	line-height:25px;
    	text-align: center;
    	cursor: pointer;
    }  

    #calendar .head a{
    	background: none repeat scroll 0 0 #479AC7;
    }  
      
      
    #calendar .weekEnd{
    	color:red;
    }

    #calendar a.day:hover {
    	background-color:#D5F3F4
    }
</style>

</head>
<body>

    <div id="calendar1" style="background:none repeat scroll 0 0 #E0ECF9;width: 210px;border: 1px solid #479AC7;position:absolute;">
    	<span style="background:none repeat scroll 0 0 #479AC7;float:left;"><a>日</a><a>一</a><a>二</a><a>三</a><a>四</a><a>五</a><a>六</a></span>
    	<a>1</a><a>1</a><a>1</a><a>1</a><a>1</a>
    	<a>1</a><a>1</a><a>1</a><a>1</a><a>1</a>
    	<a>1</a><a>1</a><a>1</a><a>1</a><a>1</a>
    	<a>1</a><a>1</a><a>1</a><a>1</a><a>1</a>
    	<a>1</a><a>1</a><a>1</a><a>1</a><a>1</a>
    	<a>1</a><a>1</a><a>1</a><a>1</a><a>1</a>
    	<a>1</a><a>1</a><a>1</a><a>1</a><a>1</a>
    	<a>1</a><a>1</a><a>1</a><a>1</a><a>1</a>
    	<a>1</a><a>1</a><a>1</a><a>1</a><a>1</a>
    </div>
 
 

</body>

 

2 js 处理

<script type="text/javascript">

/* 
* function 写日志的函数 
*  html 加载结束后在调用这个函数 即放到body下面  
*   参数1 logStr 需要写的日志 
*   参数2 id 写到什么地方   不写这个参数则打印到页面上 
*/  
function writeData( logStr ,id   ){  
    if(logStr==null || logStr=='' ) return ;  
       
    var logObjId= id==null? "":id ;  
    var logObj =  document.getElementById(logObjId);  
    //如果没有给出日志写到哪里则  
    logObj = logObj||document.getElementsByTagName('body')[0];  
    logObj.innerHTML = logObj.innerHTML + "  "+logStr ;  
}  


	//取出 日期的数组  42个格 ,在数组相应位置填充相应的日期 
	var getArray = function( date ){
		if(!date)  return ;
		
		var dates = new Array(42);
		var year = date.getFullYear();
		var month = date.getMonth();
		
		var dateFirst = new Date(year,month,1 ).getDay(); //取出当前月份的第一天是周几 
		var dateLast  = new Date(year,month+1,0 ).getDate(); //下一个月的第0天是本月的最后一天 
 
		
		for(var i=1;i<=dateLast ;i++ ){
			//dates[i] = new Date( year,month,i ).toLocaleString();
			dates[dateFirst+i-1] = year+"-"+month+"-"+i
		}
	 
		return dates;
	}
	
	//创建 外面轮廓
	var createOutline = function(){
		var outLine = document.createElement('div');
		outLine.setAttribute('id','calendar');
		var body =  document.getElementsByTagName('body')[0];
		body.appendChild( outLine );
		return outLine;
	}
 
	//用数字 取出 中文的月份 
	var getMonthZW = function(data){
		var zw =null ;
		switch (data)
		{
			case 1 :
				zw = '一月'; break;
			case 2 :
				zw = '二月'; break;
			case 3 :
				zw = '三月'; break;	
			case 4 :
				zw = '四月'; break;
			case 5 :
				zw = '五月'; break;
			case 6 :
				zw = '六月'; break;
			case 7 :
				zw = '七月'; break;
			case 8 :
				zw = '八月'; break;
			case 9 :
				zw = '九月'; break;
			case 10 :
				zw = '十月'; break;
			case 11 :
				zw = '十一月'; break;
			case 12 :
				zw = '十二月'; break;
		}
		return zw;
	} 
	
	//创建日历的头部   并添加  前后 的月份与年份 
	var createHead = function(outLine ,currentDate,aTemplate ){

		var head  = document.createElement('span');
		outLine.appendChild( head );
		head.className = 'head';

		//添加年份左
		var yearLeftNode = aTemplate.cloneNode();
		yearLeftNode.innerHTML = "<<";
		head.appendChild( yearLeftNode );
		yearLeftNode.style.width='30px';
		yearLeftNode.onclick = (function(date){
			return function(){
				drawCalendar(  preYear(date));
			}
		})(currentDate);
		
		//添加月份左 移动
		var monthLeftNode = aTemplate.cloneNode();
		monthLeftNode.innerHTML = "<";
		head.appendChild( monthLeftNode );	
		monthLeftNode.style.width='30px';
		monthLeftNode.onclick = (function(date){
			return function(){
				drawCalendar(preMonth(date) );
			}
		})(currentDate);
		
 
		//addMonthAndYear(head,aTemplate,"<", preMonth(date) ) ;
		
		
		//添加月份
		var monthNode = aTemplate.cloneNode();
		monthNode.innerHTML= getMonthZW( currentDate.getMonth()+1 );
		head.appendChild( monthNode );
		monthNode.style.width='40px';
		
		//添加年
		var yearNode = aTemplate.cloneNode();
		yearNode.innerHTML =  currentDate.getFullYear() +'年';
		head.appendChild( yearNode );
		yearNode.style.width='50px';

		
		//添加月份右  移动
		var monthRightNode = aTemplate.cloneNode();
		monthRightNode.innerHTML = ">";
		head.appendChild( monthRightNode );	
		monthRightNode.style.width='30px';
		monthRightNode.onclick = (function(date){
			return function(){
				drawCalendar(nextMonth(date) );
			}
		})(currentDate);
		
		//添加年 右 移动
		var yearRightNode = aTemplate.cloneNode();
		yearRightNode.innerHTML = ">>";
		head.appendChild( yearRightNode );	
		yearRightNode.style.width='30px';
		yearRightNode.onclick = (function(date){
			return function(){
				drawCalendar(nextYear(date) );
			}
		})(currentDate);
	} 
	
	//本来想把上面按钮封装一下,但单击时候全局变量date没想出办法处理
	 //头部 添加月份 与年份的     左右单击按钮 
	function addMonthAndYear(head,aTemplate,btnHtml, goToDate ){
		var node = aTemplate.cloneNode();
		node.innerHTML = ">";
		head.appendChild( node );	
		node.style.width='30px';
		node.onclick = (function(date){
			return function(){
				drawCalendar(date);
			}
		})(goToDate);
	}
	
	//得到下一年
	function nextYear(date){
		return new Date(date.getFullYear()+1,date.getMonth(),date.getDate() );
	}

	//得到前一月    范围 0-11 
	function nextMonth(date){
		var month = date.getMonth()+1;
		var year = date.getFullYear();
		if( month >11){
			month = 0;
			year++ ;
		}
		return new Date( year , month,date.getDate() );
	}
	//取出前一年 
	function preYear(date){
		return new Date(date.getFullYear()-1,date.getMonth(),date.getDate() );
	}
	
	//得到前一年    范围 0-11 
	function preMonth(date){
		var month = date.getMonth()-1;
		var year = date.getFullYear();
		if( month<0){
			month = 12;
			year-- ;
		}
		return new Date( year , month,date.getDate() );
	}	
	
	//创建周
	var createWeek = function( outLine,a ){
		var weeks = "日一二三四五六".split('');
		var week = document.createElement('span'); //复制一个超链接 
		week.className = 'week';
		for(var i=0;i<weeks.length;i++ ){
			var aNew = a.cloneNode();
			aNew.innerHTML= weeks[i] ;
			week.appendChild(aNew );
		}
		outLine.appendChild(week);
		return week;
	} 
	
	//创建日期显示
	var createDay= function(outLine,dates,aTemplate){
		if(!dates) return ;
		for(var i=0;i<dates.length;i++ ){
			var aNew = aTemplate.cloneNode(); //复制一个超链接 
		 
			if(dates[i] && dates[i]!='undefine'){
				 
				aNew.innerHTML=dates[i].split('-')[2] ;	 //添加 天
				aNew.className = 'day'; //添加 hover样式
				if( i%7==0 ||  i%7==6 )  aNew.className='weekEnd';
				
				//运用 闭包 在单击的时候  保存日期到单击事件中 
				aNew.onclick=(function(d){
					return function(){
						//拿到 对应位置的日期 
						alert( d);
					}
				})( dates[i] );
			} 
			outLine.appendChild(aNew );
		}
	}
	
	

	
	//画日历 
	var drawCalendar = function(date){
		//收集一个月的日期数组
		var arrs = getArray(date);
		
		var outLine = createOutline();//创建外边框
		var aTemplate = document.createElement('a'); //模板
		
		createHead(outLine, date ,aTemplate);//创建日历的头部
		createWeek(outLine,aTemplate ); //创建日历的周的部分
		createDay(outLine,arrs, aTemplate ); //创建日历的天部分 
	}
	 
	var date = new Date();
	drawCalendar(date );
 	
	
</script>

 

分享到:
评论

相关推荐

    JavaScript日历控件 六种日历

    JavaScript日历控件是网页开发中常用的一种交互元素,它能帮助用户方便地选择日期,常见于表单输入、事件安排或时间相关的功能。在给定的资源中,包含了六种不同样式的JavaScript日历,这些日历可能具有不同的设计...

    javascript日历

    JavaScript日历是一个交互式的控件,常用于网页中让用户方便地选择日期。它采用JavaScript语言编写,具有浮动特性,能够定位在页面的任意位置,并且用户可以通过点击来选取日期。这个日历的设计允许用户在不离开当前...

    完美javascript日历大集合

    在这个“完美javascript日历大集合”中,我们可能会遇到一系列使用JavaScript实现的创新日历组件,这些组件可能包括各种设计风格、功能特性和适应性,旨在提升用户体验并增强网站的互动性。 日历组件是网页中常见的...

    JavaScript日历

    JavaScript日历是一款完全使用原生JavaScript编写的日历组件,它体现了JavaScript在前端开发中的强大功能,无需依赖任何外部库如Vue或jQuery。这个组件允许用户进行上下翻页以查看不同月份的日历,并且支持点击特定...

    6种JavaScript日历控件

    JavaScript日历控件是网页开发中常用的一种交互元素,它为用户提供了一个直观的方式来选择日期,常见于表单、事件管理或在线预订系统等场景。在本文中,我们将深入探讨六种不同的JavaScript日历控件,了解它们的特点...

    js 日历 js日历 例子 javascript日历

    JavaScript日历是一个常见的网页交互元素,它为用户提供了一个方便的方式来选择日期,常见于表单填写、事件安排等场景。在Web开发中,JavaScript日历组件的实现主要依赖于JavaScript语言和CSS来完成页面布局和样式...

    javascript日历组件

    JavaScript日历组件是一种在网页上实现交互式日期选择功能的工具,它允许用户方便地查看和选择日期,常用于表单填写、事件预订或者时间安排等场景。在本案例中,我们有两个关键文件:`jscalendarx.htm` 和 `...

    javascript日历插件

    JavaScript日历插件是一种网页应用程序中的交互式组件,它允许用户在网页上选择或输入日期和时间。这种插件通常由JavaScript代码实现,利用浏览器的DOM(文档对象模型)进行操作,提供用户友好的界面来处理日期选择...

    个人收集的各种漂亮javascript日历

    JavaScript日历是网页开发中常用的一种交互元素,用于展示日期并提供用户选择日期的功能。在网页设计中,美观且易用的日历控件能够提升用户体验,使得数据输入更加直观便捷。这里我们关注的是一个个人收藏的...

    日文版javascript日历

    【标题】"日文版javascript日历"是一个专门针对日语环境设计的JavaScript日历控件,它提供了方便的日历显示和交互功能,尤其适用于需要日文日期展示的Web应用程序。这个控件不仅包含了完整的日历功能,还带有详细的...

    yearlist.zip_javascript 日历

    “有点FLASH般的闪亮效果”则暗示了这个JavaScript日历可能采用了类似早期FLASH技术中的动态光照、渐变或者透明效果,来达到吸引用户注意力并提升网页互动性目的。这样的日历组件在网页设计中可以用于日期选择、事件...

    弹出式JavaScript 日历控件

    JavaScript日历控件是网页开发中的一个重要组成部分,它为用户提供了一种直观且用户友好的方式来选择日期。Tigra Calendar是一款广泛使用的跨浏览器JavaScript日历控件,它以其弹出式的显示方式而受到青睐。在本文中...

Global site tag (gtag.js) - Google Analytics