`
chm2920
  • 浏览: 46005 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于zepto.js 的日期选择插件

 
阅读更多

展示:



 

js 代码:

 

Zepto.datepicker = function(target){	
	var datepicker = {
		init : function(){
			this._target = target;			
			this._date = new Date();
			this._formatDate();
		},
		bind: function(){
			this._picker = (function(){
				var arr = [];
				arr.push('<div class="datepicker-box">');
				arr.push('	<div class="datepicker-header">');
				arr.push('		<span class="datepicker-pre"><b></b></span>');
				arr.push('		<span class="datepicker-next"><b></b></span>');
				arr.push('		<h4></h4>');
				arr.push('	</div>');
				arr.push('	<table class="datepicker-body">');
				arr.push('		<thead>');
				arr.push('			<tr>');
				arr.push('				<th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th class="datepicker-weekend">六</th><th class="datepicker-weekend">日</th>');
				arr.push('			</tr>');
				arr.push('		</thead>');
				arr.push('		<tbody>');
				arr.push('		</tbody>');
				arr.push('	</table>');
				arr.push('</div>');
				return $(arr.join(''));
			})();
			this._generateDays();
	
			var p = this;
			this._picker.find('span').on('touchstart', function(){
				$(this).addClass('hover');
			}).on('touchend', function(){
				$(this).removeClass('hover');
			}).click(function(){
				if($(this).hasClass('datepicker-pre')){
					p._date.setMonth(p._date.getMonth() - 1);
				} else {
					p._date.setMonth(p._date.getMonth() + 1);
				}				
				p._generateDays();
			});			
			
			this._picker.click(function(e){
				e.preventDefault();
				e.stopPropagation();
			});
			
			$(document).click(function(e){
				if(e.target != p._picker[0] && e.target != p._target[0]){
					p._picker.hide();
				}
			});
			return this;
		},
		insert : function(){
			this._picker.insertAfter(this._target);
		},
		show : function(){
			this._picker.show();
		},
		hide : function(){
			this._picker.hide();
		},
		_generateDays : function(){
			var year = this._date.getFullYear()
				, month = this._date.getMonth() + 1
				, day = this._date.getDate()
				, days = new Date(new Date(year, month, 1) - 24*60*60*1000).getDate()
				, week = (function(){
						var tDate = new Date(year, month-1, 1);
						var week = tDate.getDay();
						if(week == 0){
							week = 7;
						}
						return week;
					})();
					
			this._picker.find('h4').html(year + ' 年 ' + month + ' 月');
	
			var arr = []
				, d = 1;
				
			arr.push('<tr>');
			for(var j = 1; j < week; j ++){
				arr.push('<td>&nbsp;</td>');
			}
			for(var j = week; j < 8; j ++, d ++){
				arr.push('<td class="datepicker-td');
				if(d == day){
					arr.push(' cur');
				}
				if(j >= 6){
					arr.push(' datepicker-weekend');
				}
				arr.push('">');
				arr.push(d);
				arr.push('</td>');
			}
			arr.push('</tr>');
			
			for(var i = 0, l = Math.ceil((days + week) / 7) - 2; i < l; i ++){			
				arr.push('<tr>');
				for(var j = 1; j < 8; j ++, d ++){
					arr.push('<td class="datepicker-td');
					if(d == day){
						arr.push(' cur');
					}
					if(j >= 6){
						arr.push(' datepicker-weekend');
					}
					arr.push('">');
					arr.push(d);
					arr.push('</td>');
				}
				arr.push('</tr>');
			}
			
			var l = days - d + 1;
			if(l != 0){
				arr.push('<tr>');
				for(var i = 0; i < l; i ++, d ++){
					arr.push('<td class="datepicker-td');
					if(d == day){
						arr.push(' cur');
					}
					if(i >= 6){
						arr.push(' datepicker-weekend');
					}
					arr.push('">');
					arr.push(d);
					arr.push('</td>');
				}
				for(var i = l + 1; i < 8; i ++){
					arr.push('<td>&nbsp;</td>');
				}
				arr.push('</tr>');
			}
			this._picker.find('tbody')[0].innerHTML = arr.join('');
			
			var p = this;
			this._picker.find('.datepicker-td').unbind().on('touchstart', function(){
				$(this).addClass('hover');
			}).on('touchend', function(){
				$(this).removeClass('hover');
			}).click(function(){
				p._picker.find('.datepicker-td').removeClass('cur');
				$(this).addClass('cur');
				var day = parseInt($(this).text(), 10);
				p._date = new Date(year, month - 1, day);
				p.hide();
				p._formatDate();
			});
		},
		_formatDate: function(){
			var weekDays = ['日', '一', '二', '三', '四', '五', '六'];
			this._target.text(this._date.getFullYear() + '年' + (this._date.getMonth() + 1) + '月' + this._date.getDate() + '日(周' + weekDays[this._date.getDay()] + ')');
		}
	};
	
	datepicker.init();
	
	var initialised = false;
	
	var self = this;
	target.click(function(){
		if(!initialised){
			datepicker.bind().insert();
			initialised = true;
		}
		datepicker.show();
	});
};

$.fn.datepicker = function(options){
	$.datepicker(this);
};

 

样式:

 

 

.datapicker{background:url(../img/datapicker.gif) no-repeat 230px center #FFF;}
.datepicker-box{position:relative;top:-36px;left:0;margin-bottom:-36px;border:1px solid #d9d9d9;}

.datepicker-header{background:#F8F8F8;border-bottom:1px solid #EEE;}
.datepicker-header span{text-align:center;padding:12px 15px 10px;}
.datepicker-header span.hover{background:#EEE;}
.datepicker-header span b{display:block;width:0;height:0;font-size:0;border:8px solid #F8F8F8;}
.datepicker-pre{float:left;}
.datepicker-next{float:right;}

.datepicker-header span.datepicker-pre b{border-left:0;border-right:8px solid #444;}
.datepicker-header span.datepicker-next b{border-right:0;border-left:8px solid #444;}
.datepicker-header h4{padding:10px 0;height:20px;line-height:20px;text-align:center;font-size:16px;font-weight:normal;}

.datepicker-body{width:100%;border:0;border-collapse:collapse;border-spacing:0;}
.datepicker-body th, .datepicker-body td{height:20px;line-height:20px;text-align:center;font-size:14px;}
.datepicker-body th.datepicker-weekend, .datepicker-body td.datepicker-weekend{color:#FF0000;}
.datepicker-body th{padding:6px 0;font-weight:normal;color:#333;}
.datepicker-body td{padding:4px 0;}
.datepicker-body td.cur{background:#DDD;border:1px solid #CCC;color:#FFF;}
 

 

 

分享到:
评论

相关推荐

    基于zepto的移动端日历插件,适用于HTML5制作的webAPP.zip

    其次,我们关注的是一个日历插件,它基于Zepto.js库。最后,我们有一个名为"dataPicker-master"的压缩包子文件,这可能是一个项目源代码的主目录。 **HTML5**: HTML5是超文本标记语言的最新版本,为Web开发者提供了...

    基于zepto的mobiscroll版时间 日期 下拉 省市区级联

    "基于zepto的mobiscroll版时间 日期 下拉 省市区级联"是一个针对移动设备优化的解决方案,它提供了高效且用户友好的时间、日期选择以及省市区级联下拉功能。这个解决方案主要利用了Zepto.js库和Mobiscroll插件,两者...

    weui 时间控件含全天 上午 下午 选择

    6. `jquery-weui.min.js`:WeUI的JavaScript插件库,封装了与WeUI组件相关的JavaScript功能,包括我们关注的时间选择控件。 综合以上信息,我们可以推测这个时间控件的实现方式可能包括: - 使用HTML元素(如`...

    7天日历左右切换--zepto

    "7天日历左右切换--zepto"是一个基于Zepto.js库实现的特定日历组件,它专注于展示并切换近一周(7天)的日期。下面我们将详细探讨这个组件的相关知识点。 1. **Zepto.js**: Zepto.js 是一个轻量级的JavaScript库...

    基于zepto的移动端轻量级日期插件–date_picker

    【基于zepto的移动端轻量级日期插件–date_picker】是专为移动Web开发设计的日期选择解决方案,旨在解决现有插件过于依赖大型库、功能复杂度高、不适合移动端性能优化的问题。这款插件的核心目标是保持轻量化、低...

    16款最流行的JavaScript框架-开源中国社区.docx

    它处理DOM操作、事件处理、动画效果和Ajax请求等方面,同时还拥有大量的插件生态系统,如LightBox、日期插件和图表插件等。 2. **Dojo Toolkit** - Dojo是一个强大的JavaScript框架,由Core、Dijit和DojoX三个主要...

    countdown:带有 jquery 或 zepto 的倒计时插件

    倒计时插件的实现原理通常是基于JavaScript的Date对象,通过计算目标日期与当前日期的时间差来更新显示。它可能包含以下关键组件和功能: 1. **初始化设置**:开发者可以通过参数配置倒计时的结束时间、时间格式、...

    自己常用框架插件

    9. **jQuery UI**:jQuery UI是基于jQuery的用户界面库,提供了一套完整的可交互的组件,如日期选择器、拖放功能、对话框等,增强了网页的交互性。 这些框架和插件在实际开发中各有所长,可以根据项目需求灵活选择...

    devTools:常用的开发工具库、插件

    4. **layDate**:layDate是一款功能齐全的JavaScript日期时间插件,适用于Web和移动端。它提供了多种日期时间选择样式,包括日历、时间轴、年月选择等,同时支持自定义格式化和国际化,使得日期时间输入更加友好和...

    JQuery技巧学习附带API文档

    然而,随着现代浏览器的发展,考虑使用原生JavaScript或轻量级库(如zepto.js)可能是更优的选择,特别是在移动设备上。 ### 10. 结合其他库和框架 jQuery可与其他库(如Lodash)或现代框架(如React, Angular, ...

    web常用插件

    在Web开发领域,插件是不可或缺的工具,它们极大地扩展了浏览器和JavaScript库的功能,提升了开发效率和用户体验。本文将详细介绍这些"web常用插件",包括AngularJS、RequireJS、H-UI、jQuery、Zepto、jQuery UI以及...

    cxCalendar:jQuery cxCalendar 日期选择器

    cxCalendar 是基于 jQuery 的日期选择器插件,支持日期、时间、月份、年份等多种类型。 它灵活自由,你可以自定义外观,日期的范围,返回的格式等。 同时兼容 Zepto,方便在移动端使用。 若从 1.x 版本升级迁移,请...

    前端开发资源.docx

    - **简介**:轻量级的时间日期处理库,API设计与 Moment.js 类似。 - **应用场景**:适用于需要频繁处理日期时间的项目。 - **关键特性**:体积小,仅2KB;易于上手,文档齐全。 5. **big.js**: - **简介**:...

    JQuery中文文档

    jQuery的生态系统丰富,有许多第三方插件可供使用,如Bootstrap、jQuery UI等,它们扩展了jQuery的功能,如弹出框、日期选择器、轮播图等。开发者也可以根据需求编写自己的插件。 ### 8. 兼容性和性能优化 虽然...

    HTML5从零到实战.pptx

    4. **JavaScript教程**:JavaScript是一种解释型的、基于原型的脚本语言,常用于网页和网络应用开发。学习JavaScript包括了解基本语法、数据类型、函数声明、对象创建和继承,以及DOM(文档对象模型)操作和Cookie的...

Global site tag (gtag.js) - Google Analytics