纯JS写出日历
封装代码:
(function(cmf){
cmf.showDcalendar=function(){
var fnname=cmf.fn
var id="cmfrili2"
var yy=f23timeselecta1.value,mm=f23timeselecta2.value-1
var newdara=new Date()
var dd=newdara.getDate();
var d=new Date(yy,mm,1),t
if(mm==0){mm=12;yy--}
var a,b,c,d2
t='<table width=100% onselectstart="return false"><tr align=center>'
var ds='<font color=#ff0000>日</font>,一,二,三,四,五,<font color="#009900">六</font>'.split(",")
for(x=0;x<7;x++)t+='<td><b>'+ds[x]+'</b></td>'
t+='</tr><tr>'
//计算显示上个月有几号在日历上
a=d.getDay()
if(a==0)a=7
r=[]
var c2=0
for(var x=0;x<a;x++)
{
d2=new Date(d-24*3600*1000*(a-x))
r[r.length]="1"+d2.getDate()
c2++
}
//计算显示这个月有几号在日历上
mm++
if(mm==13){mm=1;yy++}
c=cmf.getMonthM(yy,mm)//计算哪年哪月 有多少天
d=new Date(yy,mm,1)
for(var x=1;x<=c;x++)r[r.length]="2"+x
//计算显示下个月有几号在日历上
c2+=c//r数组有多少个
d2=new Date(yy,mm-1,c)
a=d2.getDay()//这个月最后一天星期几
a=7-a
if(c2<36)a+=7
for(var x=1;x<a;x++)
{
r[r.length]="3"+x
}
var yy1=yy.toString()
var mm1=mm.toString()
for(var x=0;x<r.length;x++)
{
if(x%7==0)t+='<tr align=center>'
t+='<td height=25 onclick="'+fnname+'('+yy1+mm1+r[x].toString().substring(1)+',this)" onmouseover=this.bgColor="#33eeff" onmouseout=this.bgColor=""'
if(r[x]=="2"+dd)t+=' style="border:1px solid #aa0000"'
t+='>'
var cl=""
if(r[x].charAt(0)!=2)cl='999999'
else if(x%7==0)cl='ff0000'
else if(x%7==6)cl='009900'
if(cl!="")t+='<font color="#'+cl+'">'
t+=r[x].substring(1)
if(cl!="")t+='</font>'
t+='</td>'
if(x%7==6)t+='</tr>'
}
t+='</table>'
document.getElementById(id).innerHTML=t
}
cmf.getMonthM=function(y,m){//计算哪年哪月 有多少天 月份从1开始
if(m==4 || m==6 || m==9 || m==11)return 30
if(m==2)return (y%4==0 && y%100!=0)|| y%400==0?29:28
return 31
}
cmf.showd=function(id,fn){
cmf.fn=fn
var g='<div id="cmfrili1"></div><div id="cmfrili2"></div>'
var newdara=new Date()
var yy=newdara.getFullYear();
var mm=newdara.getMonth()+1;
document.getElementById(id).innerHTML=g
var s='border-width:1px;border-style:solid;border-color:#000000 #cccccc #cccccc #000000;width: 44px;'
var t=''
+'<table bgcolor="#ffffff" width=100% cellpadding=0 cellspacing=0><tr align=center><td height=44>'
+cmf.timeselect_ms(1,'<input type=text value="'+yy+'" id="f23timeselecta1" onchange="cmf.showDcalendar()" style="width:44;text-align:center;'+s+'">年')
+'</td><td>'
+cmf.timeselect_ms(2,'<input type=text value="'+mm+'" id="f23timeselecta2" onchange="cmf.showDcalendar()" style="width:22;text-align:center;'+s+'">月')
+'</td>'
document.getElementById("cmfrili1").innerHTML=t
cmf.showDcalendar()
}
cmf.timeselect_ms=function(n,m,n2)
{
var t='<table cellpadding=0 cellspacing=0 height=20><tr align=center>'
t+='<td onmouseup="cmf.timeselect_up('+n+',2)" onselectstart="return false" style="font-size:16px;cursor:pointer;"><b>◄</b></td>'
if(m!=null)t+='<td>'+m+'</td>'
t+='<td onmouseup="cmf.timeselect_up('+n+',1)" onselectstart="return false" style="font-size:16px;cursor:pointer;"><b>►</b></td>'
if(n2!=null)t+='<td>'+n2+'</td>'
t+='</tr></table>'
return t
}
cmf.timeselect_up=function(n,m){
var o=document.getElementById("f23timeselecta"+n),c=o.value
if(c=="")c=1
if(n==1)//年
{
if(m==2){//减
c--
}else if(m==1){//加
c++
}
}
else
{
if(m==2){//减
if(c<2) return
c--
}else if(m==1){//加
if(c==12) return
c++
}
}
o.value=c
if(m==1 || m==2)cmf.showDcalendar()
}
})(window.cmf={})
使用:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>日历</title>
<script src="Dcalendar.js" type="text/javascript" charset="utf-8"></script>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<div id="ri" style="width: 400px;">
</div>
</body>
<script type="text/javascript">
cmf.showd('ri','dianji')
function dianji(d,ti){
$("#ri td").css('border','')
$(ti).css('border','1px solid #aa0000')
alert(d)
}
</script>
</html>
使用代码中dianji()函数是用户点击某天弹出某天的日期;效果如下

纯JS写出日历的更多相关文章
- 用js写出光棒效应的两种方法与jquery的两中方法
<script src="js/jQuery1.11.1.js" type="text/javascript"></script> &l ...
- 使用纯js写的一个分页
上图晒效果: 网上确实有很多分页的插件以及开源代码,单本是一个后台开发猿,前台css等样式还驾驭不住,所以就开始自己去写了.其实这个分页原理很简单,就是用ajax往后台传值(当前页码),后台使用lim ...
- 用js写出一个漂亮的单选框选中效果
一般的input框比较简单,我们可以用JavaScript配合css背景图片定位让我们模拟写出一个点击选中效果 首先需要有个图片素材,当页面加载的时候是背景图片定位到左图,当我们点击图片的时候,背景图 ...
- js写个日历
其实我是一个对时间和日期不怎么感兴趣的人,小学的时候感觉时间或者日期那块就让我很晕,因为有时候是100进制有时候是60进制,搞的我对日历一直很不感兴趣,最近不知道为什么想写一个日历了,可想而知,这个玩 ...
- js写出斐波那契数列
斐波那契数列:1.1.2.3.5.8.13.21.34.…… 函数: 使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1. for循环: 从底层向上运 ...
- 自己用js写的日历(在考勤中使用,显示员工的日期的考勤情况)
1.HTML部分 <div id="AttendanceDataDetailDiv"> <div class="A_close"> &l ...
- javascript js写特效日历
<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 纯js写图片轮播插件
最近终于写成了自己创作的图片轮播插件,使用原生js编写.与目前网上流行的轮播插件相比,功能和效果稍弱,但是使用起来相当方便. 先看html代码 <!DOCTYPE html> <ht ...
- 纯JS写最简单的图片轮播
非常简单的一个大图轮播,通过将控制显示位置来进行轮播效果,写来给正在学习的新手朋友们参考交流. 先看效果:(实际效果没有这么快) 先看布局: <div id="display" ...
随机推荐
- 初识chromium thread的实现
接触chromium已有一段时间,写点东西学习一下吧. 首先说一下用法,如何利用chromium封装好的thread类来开一个线程.在base里有一个封装该类的头文件thread.h,include它 ...
- iPhone 6出现后,如何将一份设计稿支持多个尺寸?
http://mp.weixin.qq.com/s?__biz=MzA4NTQzNTMwOA==&mid=201174413&idx=3&sn=c3fe5b3459bac288 ...
- 文件上传工具swfupload[转]
转至:http://zhangqgc.iteye.com/blog/906419 文件上传工具swfupload 示例: 1.JavaScript设置SWFUpload部分(与官方例子类似): var ...
- C# 的异步
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- JAVA-应用easyui
easyui下载地址:http://www.jeasyui.com/index.php 现在还easyui之后将其解压,解压之后将文件夹中的文件除了demo文件夹之外的文件放入到Eclipse的web ...
- GDB反向调试 + 指令记录+函数历史记录
http://blog.chinaunix.net/uid-26941022-id-3199961.html b.c void fun(int a, int b){ int c; c=a+b; } v ...
- KDB调试内核
http://www.ibm.com/developerworks/cn/linux/l-kdbug/
- MapReduce中的map个数
在map阶段读取数据前,FileInputFormat会将输入文件分割成split.split的个数决定了map的个数.影响map个数(split个数)的主要因素有: 1) 文件的大小.当块(dfs. ...
- Boost Build
Window XP + Visual Studio 2008 获取Boost库源码 我们可以从http://www.boost.org/ 上获取boost的源代码.当前最新版本为1.45.0. 解压到 ...
- WebService学习笔记系列(四)
今天主要来看看服务端的编写及发布. 服务端的编写主要包括三个步骤: 1.编写一个接口,即SEI(server endpoint interface) 2.编写接口的实现类,即SIB (server i ...