源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

JS日历 推荐

  • 时间:2022-05-25 11:21 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JS日历 推荐
两年前写过一个日历,可是兼容性不好. 这次重新写了一次.  兼容多种浏览器  了解了不少东东,特别是对于W3C标准化.  如 FF和IE 对box模型的理解不同  box.style{width:100;border 1px;}  ie理解 为 box.width = 100  ff 理解 为 box.width = 100 + 1*2 = 102  可以使用这种方法使两种浏览器都可以正常浏览  box.style{width:100!important; width /**/:120px;border 1px;}  注意 width(空格)/**/ [img]http://www.1sucai.cn/images/download.gif[/img] [url=http://www.1sucai.cn/downtools/jsCalendar.rar]下载此文件[/url]
[u]复制代码[/u] 代码如下:
/***********************  * 创建对象  var c = new Calendar("c"); document.write(c);  * 调用方法 c.show(arg1,arg2,arg3)  * 参数1: 文本输入框(必填). 如 onfocus="c.show(this)";  * 参数2: 按钮或其它可用单击事件的HTML元素(如果使用按钮方式则必填).       如 onclick="c.show(this,c.getObjById(*))" *=文本输入框名称  * 参数3: 如果没有文本框没有值则使用该值初始化日历(选填).       如 onfocus="c.show(this,'2006-01-01')  * 注: 参数顺序不分先后. MSIE6/Opera8/FireFox1.5 下测试通过     ***如果您使用本日历控件 请保留该信息 谢谢! *****   * http://2lin.net  * Email:caoailin@gmail.com  * QQ:38062022  * Creation date: 2006-11-22  ************************************/  function Calendar(objName)   {  this.style = {    borderColor    : "#909eff", //边框颜色    headerBackColor   : "#909EFF", //表头背景颜色    headerFontColor   : "#ffffff", //表头字体颜色    bodyBarBackColor  : "#f4f4f4", //日历标题背景色    bodyBarFontColor  : "#000000", //日历标题字体色    bodyBackColor   : "#ffffff", //日历背景色    bodyFontColor      : "#000000", //日历字体色    bodyHolidayFontColor   : "#ff0000", //假日字体色    watermarkColor   : "#d4d4d4", //背景水印色    moreDayColor       : "#cccccc"  };  this.showMoreDay = false; //是否显示上月和下月的日期  this.Obj = objName;  this.date = null;  this.mouseOffset = null;  this.dateInput = null;  this.timer = null;  };  Calendar.prototype.toString = function()  {     var str = this.getStyle();    str += '<div Author="alin" class="calendar" style="display:none;" onselectstart="return false" oncontextmenu="return false" id="Calendar">\n';    str += '<div Author="alin" class="cdrWatermark" id="cdrWatermark"></div><div id="cdrBody" style="position:absolute;left:0px;top:0px;z-index:2;width:140px;">';    str += this.getHeader();    str += this.getBody();     str += '</div><div Author="alin" id="cdrMenu" style="position:absolute;left:0px;top:0px;z-index:3;display:none;" onmouseover="' + this.Obj + '.showMenu(null);" onmouseout="' + this.Obj + '.hideMenu();"></div></div>';    return str;  };  Calendar.prototype.getStyle = function()  {    var str = '<style type="text/css">\n';  str += '.calendar{position:absolute;width:140px!important;width /**/:142px;height:184px!important;height /**/:174px;background-color:'+this.style.bodyBackColor+';border:1px solid ' + this.style.borderColor + ';left:0px;top:0px;z-index:9999;}\n';  str += '.cdrHeader{background-color:'+ this.style.headerBackColor +';width:140px;height:22px;font-size:12px;color:'+this.style.headerFontColor+';}\n';  str += '.cdrWatermark{position:absolute;left:0px;top:55px;width:140px;font-family: Arial Black;font-size:50px;color:'+this.style.watermarkColor+';z-index:1;text-align:center;}\n';  str += '.cdrBodyBar{background-color:' + this.style.bodyBarBackColor + ';font-size:12px;color:' + this.style.bodyBarFontColor + ';width:140px;height:20px;}\n';  str += '.cdrBody{width:140px;height:122px!important; height /**/:110px;font-size:12px;cursor:pointer;color:' + this.style.bodyFontColor + ';}\n';  str += '.dayOver{height:16px;padding:0px;border:1px solid black;background-color:#f4f4f4;}\n';  str += '.dayOut{padding:1px;border:none;height:16px;}\n';    str += '.menuOver{background-color:'+this.style.headerBackColor+';color:'+this.style.headerFontColor+';font-size:12px;}\n';  str += '.headerOver{border:1px solid black;background-color:#f4f4f4;color:black;cursor:default;}\n';  str += '.cdrMenu{font-size:12px;border:1px solid #000000;background-color:#ffffff;cursor:default;width:100%}\n';  str += 'html>body #Calendar{width:142px;174px;}';  str += '</style>\n';  return str;  };  Calendar.prototype.getHeader = function()  {    var str = '<table Author="alin" class="cdrHeader" cellSpacing="2" cellPadding="0"><tr Author="alin" align="center">\n';  str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="previousYear" title="上一年份" style="cursor:pointer;width:10px;" onclick="'+this.Obj+'.onChangeYear(false);"><<</td>\n';  str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="previousMonth" title="上一月份" style="cursor:pointer;width:10px;" onclick="'+this.Obj+'.onChangeMonth(false);"><</td>\n';  str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" id="currentYear" style="width:50px;" onclick="' + this.Obj + '.showMenu(true);" onmouseout="' + this.Obj + '.hideMenu();this.className=\'\';">0</td>\n';  str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" id="currentMonth" onclick="' + this.Obj + '.showMenu(false);" onmouseout="' + this.Obj + '.hideMenu();this.className=\'\';">0</td>\n';  str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="nextMonth" title="下一月份" style="cursor:pointer;width:10px;" onclick="'+this.Obj+'.onChangeMonth(true);">></td>\n';  str += '<td Author="alin" onmouseover="this.className=\'headerOver\'" onmouseout="this.className=\'\'" id="nextYear" title="下一年份" style="cursor:pointer;width:10px;" onclick="'+this.Obj+'.onChangeYear(true);">>></td></tr>\n';  str += '</table>\n';  return str;  };  Calendar.prototype.getBody = function()  {    var n = 0;    var str = this.getBodyBar();    str += '<table Author="alin" class="cdrBody" cellSpacing="2" cellPadding="0">\n';     for(i = 0; i < 6; i++)  {      str += '<tr Author="alin" align="center">';  for(j = 0; j < 7; j++)  {  str += '<td Author="alin" class="dayOut" id="cdrDay'+(n++)+'" width="13%"></td>\n';  }  str += '</tr>';  }    str += '</table>\n';    str += '<table Author="alin" class="cdrBodyBar" cellSpacing="2" cellPadding="0"><tr align="center" Author="alin"><td Author="alin" style="cursor:pointer;" onclick="'+this.Obj+'.getToday();">今天:'+new Date().toFormatString("yyyy年mm月dd日")+'</td></tr></table>\n';    return str;  };  Calendar.prototype.getBodyBar = function()  {    var str = '<table Author="alin_bar" id="cdrBodyBar" class="cdrBodyBar" style="cursor:move;" cellSpacing="2" cellPadding="0"><tr Author="alin_bar" align="center">\n';    var day = new Array('日','一','二','三','四','五','六');    for(i = 0; i < 7; i++)    {     str += '<td Author="alin_bar">' + day[i] + '</td>\n';      }    str += '</tr></table>';    return str;   }  Calendar.prototype.getYearMenu = function(year)  {    var str = '<table Author="alin" cellSpacing="0" class="cdrMenu" cellPadding="0">\n';    for(i = 0; i < 10; i++)  {      var _year = year + i;  var _date = new Date(_year,this.date.getMonth(),this.date.getDate());    str += '<tr Author="alin" align="center"><td Author="alin" width="13%" height="16" ';  if(this.date.getFullYear() != _year)  {  str += 'onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" ';  }  else  {    str += 'class="menuOver"';  }  str += 'onclick="' + this.Obj + '.bindDate(\'' + _date.toFormatString("-") + '\')">' + _year + '年</td>\n';  str += '</tr>';  }    str += '<tr Author="alin" align="center"><td Author="alin"><table Author="alin" style="font-size:12px;width:100%;" cellSpacing="0" cellPadding="0">\n';    str += '<tr Author="alin" align="center"><td Author="alin" onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" onclick="'+this.Obj+'.getYearMenu('+ (year - 10) + ')"><<</td>\n';    str += '<td Author="alin" onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" onclick="'+this.Obj+'.getYearMenu('+ (year + 10) +')">>></td><tr>\n';    str += '</table></td></tr>\n';    str += '</table>';    var _menu = getObjById("cdrMenu");  _menu.innerHTML = str;  };  Calendar.prototype.getMonthMenu = function()  {    var str = '<table Author="alin" cellSpacing="0" class="cdrMenu" cellPadding="0">\n';    for(i = 1; i <= 12; i++)  {   var _date = new Date(this.date.getFullYear(),i-1,this.date.getDate());  str += '</tr><tr Author="alin" align="center"><td Author="alin" height="16" ';  if(this.date.getMonth() + 1 != i)  {  str += 'onmouseover="this.className=\'menuOver\'" onmouseout="this.className=\'\'" ';  }  else  {    str += 'class="menuOver"';  }  str += 'onclick="' + this.Obj + '.bindDate(\'' + _date.toFormatString("-") + '\')">'+i+'月</td></tr>\n';  }    str += '</table>';    var _menu = getObjById("cdrMenu");  _menu.innerHTML = str;   };  Calendar.prototype.show = function()  {    if (arguments.length > 3 || arguments.length == 0)    {     alert("对不起!传入参数不对!" );   return;  }     var _date = null;    var _evObj = null;    var _initValue = null     for(i = 0; i < arguments.length; i++)    {     if(typeof(arguments[i]) == "object" && arguments[i].type == "text")    {_date = arguments[i];}   else if(typeof(arguments[i]) == "object")    {_evObj = arguments[i];}   else if(typeof(arguments[i]) == "string")    {_initValue = arguments[i];}     }    _evObj = _evObj || _date;  inputObj = _date;  targetObj = _evObj  if(!_date){alert("传入参数错误!"); return;}    this.dateInput = _date;    _date = _date.value;    if(_date == "" && _initValue) _date = _initValue;     this.bindDate(_date);        var _target = getPosition(_evObj);     var _obj = getObjById("Calendar");    _obj.style.display = "";       _obj.style.left = _target.x + 'px';    if((document.body.clientHeight - (_target.y + _evObj.clientHeight)) >= _obj.clientHeight)    {         _obj.style.top = (_target.y + _evObj.clientHeight) + 'px';  }  else  {        _obj.style.top = (_target.y - _obj.clientHeight) + 'px';  }  };  Calendar.prototype.hide = function()  {    var obj = getObjById("Calendar");  obj.style.display = "none";   };  Calendar.prototype.bindDate = function(date)  {  var _monthDays = new Array(31,30,31,30,31,30,31,31,30,31,30,31);  var _arr = date.split('-');    var _date = new Date(_arr[0],_arr[1]-1,_arr[2]);  if(isNaN(_date)) _date = new Date();  this.date = _date;  this.bindHeader();  var _year = _date.getFullYear();  var _month = _date.getMonth();  var _day = 1;  var _startDay = new Date(_year,_month,1).getDay();  var _previYear = _month == 0 ? _year - 1 : _year;  var _previMonth = _month == 0 ? 11 : _month - 1;  var _previDay = _monthDays[_previMonth];  if (_previMonth == 1) _previDay =((_previYear%4==0)&&(_previYear0!=0)||(_previYear%400==0))?29:28;  _previDay -= _startDay - 1;  var _nextDay = 1;  _monthDays[1] = ((_year%4==0)&&(_year0!=0)||(_year%400==0))?29:28;  for(i = 0; i < 40; i++)  {    var _dayElement = getObjById("cdrDay" + i);  _dayElement.onmouseover = Function(this.Obj + ".onMouseOver(this)");  _dayElement.onmouseout = Function(this.Obj + ".onMouseOut(this)");  _dayElement.onclick = Function(this.Obj + ".onClick(this)");  this.onMouseOut(_dayElement);  _dayElement.style.color = "";  if(i < _startDay)  {    //获取上一个月的日期  if(this.showMoreDay)  {    var _previDate = new Date(_year,_month - 1,_previDay);    _dayElement.innerHTML = _previDay;    _dayElement.title = _previDate.toFormatString("yyyy年mm月dd日");      _dayElement.value = _previDate.toFormatString("-");    _dayElement.style.color = this.style.moreDayColor;      _previDay++;  }else  {    _dayElement.innerHTML = "";      _dayElement.title = "";  }  }  else if(_day > _monthDays[_month])  {    //获取下个月的日期    if(this.showMoreDay)  {   var _nextDate = new Date(_year,_month + 1,_nextDay);   _dayElement.innerHTML = _nextDay;   _dayElement.title = _nextDate.toFormatString("yyyy年mm月dd日");     _dayElement.value = _nextDate.toFormatString("-");   _dayElement.style.color = this.style.moreDayColor;     _nextDay++;    }else  {    _dayElement.innerHTML = "";      _dayElement.title = "";  }  }  else if(i >= new Date(_year,_month,1).getDay() && _day <= _monthDays[_month])  {        //获取本月日期    _dayElement.innerHTML = _day;    if(_day == _date.getDate())    {     this.onMouseOver(_dayElement);   _dayElement.onmouseover = Function("");      _dayElement.onmouseout = Function("");         }        if(this.isHoliday(_year,_month,_day))    {     _dayElement.style.color = this.style.bodyHolidayFontColor;      }    var _curDate = new Date(_year, _month, _day);    _dayElement.title = _curDate.toFormatString("yyyy年mm月dd日");    _dayElement.value = _curDate.toFormatString("-");    _day++;  }  else  {    _dayElement.innerHTML = "";    _dayElement.title = "";  }  }  var _menu = getObjById("cdrMenu");  _menu.style.display = "none";  };  Calendar.prototype.bindHeader = function()  {    var _curYear = getObjById("currentYear");    var _curMonth = getObjById("currentMonth");    var _watermark = getObjById("cdrWatermark");    _curYear.innerHTML = this.date.toFormatString("yyyy年");    _curMonth.innerHTML = this.date.toFormatString("mm月");    _watermark.innerHTML = this.date.getFullYear();    };  Calendar.prototype.getToday = function()  {    var _date = new Date();    this.bindDate(_date.toFormatString("-"));  };  Calendar.prototype.isHoliday = function(year,month,date)  {    var _date = new Date(year,month,date);    return (_date.getDay() == 6 || _date.getDay() == 0);  };  Calendar.prototype.onMouseOver = function(obj)  {    obj.className = "dayOver";  };  Calendar.prototype.onMouseOut = function(obj)  {    obj.className = "dayOut";  };  Calendar.prototype.onClick = function(obj)  {    if(obj.innerHTML != "") this.dateInput.value = obj.value;   this.hide();  };  Calendar.prototype.onChangeYear = function(isnext)  {    var _year = this.date.getFullYear();    var _month = this.date.getMonth() + 1;    var _date = this.date.getDate();    if(_year > 999 && _year <10000)    {      if(isnext){_year++;}else{ _year --;}    }    else    {     alert("年份超出范围(1000-9999)!");    }    this.bindDate(_year + '-' + _month + '-' + _date);  };  Calendar.prototype.onChangeMonth = function(isnext)  {    var _year = this.date.getFullYear();    var _month = this.date.getMonth() + 1;    var _date = this.date.getDate();    if(isnext){ _month ++;} else {_month--;}    if(_year > 999 && _year <10000)    {      if(_month < 1) {_month = 12; _year--;}  if(_month > 12) {_month = 1; _year++;}    }    else    {     alert("年份超出范围(1000-9999)!");    }     this.bindDate(_year + '-' + _month + '-' + _date);  };  Calendar.prototype.showMenu = function(isyear)  {   var _menu = getObjById("cdrMenu");   if(isyear != null)   {  var _obj = (isyear)? getObjById("currentYear") : getObjById("currentMonth");  if(isyear)  {    this.getYearMenu(this.date.getFullYear() - 5);    }  else  {    this.getMonthMenu();    }  _menu.style.top = (_obj.offsetTop + _obj.offsetHeight) + 'px';  _menu.style.left = _obj.offsetLeft + 'px';  _menu.style.width = _obj.offsetWidth + 'px';    }  if (this.timer != null) clearTimeout(this.timer);  _menu.style.display="";  }  Calendar.prototype.hideMenu = function()  {    var _obj = getObjById("cdrMenu");    this.timer = window.setTimeout(function(){_obj.style.display='none';},500);  }  Number.prototype.NaN0 = function()  {    return isNaN(this) ? 0 : this;  }  Date.prototype.toFormatString = function(fs)  {    if(fs.length == 1)    {     return this.getFullYear() + fs + (this.getMonth() + 1) + fs + this.getDate();    }    fs = fs.replace("yyyy",this.getFullYear());    fs = fs.replace("mm",(this.getMonth() + 1));    fs = fs.replace("dd",this.getDate());    return fs;  }  /******************************************公用方法及变量********************************************************/  var inputObj = null; //输入对象  var targetObj = null; //单击目标对象  var dragObj = null; //拖动目标对象  var mouseOffset = null; //拖动目标的位置  //获取对象  function getObjById(obj)  {    if(document.getElementById)    {     return document.getElementById(obj);    }    else    {     alert("浏览器不支持!");    }  }  //获取鼠标位置  function mouseCoords(ev)  {  if(ev.pageX || ev.pageY){  return {x:ev.pageX, y:ev.pageY};  }  return {  x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,  y:ev.clientY + document.body.scrollTop - document.body.clientTop  };  }  //获取目标的绝对位置  function getPosition(e)  {  var left = 0;  var top = 0;  while (e.offsetParent){  left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);  top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);  e   = e.offsetParent;  }  left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);  top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);  return {x:left, y:top};  }  //获取鼠标的偏移值  function getMouseOffset(target, ev)  {  ev = ev || window.event;  var docPos  = getPosition(target);  var mousePos = mouseCoords(ev);  return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};  }  //关闭日历  function closeCalendar(evt){  evt = evt || window.event;  var _target= evt.target || evt.srcElement;  if(!_target.getAttribute("Author") && _target != inputObj && _target != targetObj)  {    getObjById("Calendar").style.display = "none";    }   }  //拖动日历开始  function dragStart(evt){    evt = evt || window.event;  var _target= evt.target || evt.srcElement;  if(_target.getAttribute("Author") == "alin_bar")  {      dragObj = getObjById("Calendar");      mouseOffset = getMouseOffset(dragObj, evt);  }   }  //拖动日历中  function drag(evt)  {    evt = evt || window.event;  if(dragObj)  {     var mousePos = mouseCoords(evt);   dragObj.style.left = (mousePos.x - mouseOffset.x) + 'px';   dragObj.style.top = (mousePos.y - mouseOffset.y) + 'px';    }  }  //拖动结束  function dragEnd(evt)  {    dragObj = null;    }  /*****end 公用方法***************/  document.onclick = closeCalendar;  document.onmousedown = dragStart;  document.onmousemove = drag;  document.onmouseup = dragEnd;  /*****************结束********************/
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部