谁能提供一下哪里有制作电子报刊的软件.拜托了

html-css023

谁能提供一下哪里有制作电子报刊的软件.拜托了,第1张

一、EXE输出格式类制作工具

这是目前比较流行也是被许多人青睐的一种电子读物档案格式。这种格式的相关制作工具也是最多的。它最大的特点就是阅读方便、制作简单且制作出来的电子读物相当精美而且无需专门的阅读器支援就可以阅读。这种格式的电子读物对执行环境并无很高的要求。但是这种格式的电子图书也有一些不足之处,如多数相关制作软件制作出来的EXE档都不支援Flash和Java及常见的音频视频档,需要IE浏览器支援等。常见EXE输出格式类制作工具:

1、ActivE-BookCompiler4.22

软件大小:2.14MB

软件类型:共享软件

公司网站:http://www.ebookcompiler.com

执行平台:Windows9X/NT/2000

下载地址:http://www.answers2000.freeserve.co.uk/422/aeb422a.exe该软件是同类产品中比较出色的一款。它支援基本的HTML元素、图片、音频、表格、框架、CSS、javascript、Add-Ins等。软件的操作介面从左到右共分为9个选择标签,即电子图书资讯、加密、过期、安装、开始执行资讯、用户介面、输入档案资讯、Add-Ins和输出档案资讯,所有选项一目了然,为我们提供了强大的编辑功能并且使用起来也十分的方便。另外,该软件对中文的支援也很好。

注意事项:在操作过程中,如果需要修改某一项的属性值,选中那一项并双击滑鼠,软件会自动弹出该选项相应的编辑视窗,修改完毕后软件会自动纪录您的操作。由于该软件的未注册版本对使用者的操作做了很大程度上的限制,强烈建议您注册该产品。

2、ePublisherGold1.5

软件大小:559KB

软件类型:共享软件

公司网站:http://www.inzonesoftware.com

执行平台:Windows9X/NT/2000

下载地址:http://www.inzonesoftware.com/epublish.zip该软件是使用向导的方式引导用户制作出版电子图书。软件支援基本HTML元素、CSS、javascript等相关技术。软件要求制作者和读者的电脑上安装有IE4.0或以上版本。软件除基本功能以外还具有以下特色:可以加入作者版权资讯;支援自己编写电子图书资讯(即"关于"对话方块);可以对全部档案或者单个档案进行存取许可权限制;软件制作的EXE档压缩率高于同类产品,这也是软件的一个优点。

制作步骤:单击Next按钮略过欢迎面板,加入制作者、网址和版本资讯。接下来的页面中我们需要加入待组建的档案(注意最好将图片档和页面档放置在同一个目录下面)。然后设置执行时出现的图片、起始页面、首页、关于对话方块文本等,可以对页面进行保护,可以是单个页面也可以是多个页面。最后一步就可以组建输出EXE档了。

3、E-BookHTMLCompilerPro2.12

软件大小:1.62MB

软件类型:共享软件

公司网站:http://www.bigwig.net

执行平台:Windows9X/NT/2000

下载地址:http://www.win2000.com.cn/down/ebook.zip该软件提供了最基本的制作选项,软件的操作介面如图所示。软件支援最基本的HTML元素,如框架、图片、表格等,支援使用48*36图元的动态图片作为产品的标识。但不可以直接换掉EXE档案图示,不支援CSS、javascript等技术。与其他软件不同的是,该软件可以按照用户显示器的解析度来随意调整执行的默认视窗大小。另外软件还支援点击音效,并且在安装档中有一个名为E-BookCompilerEncryption的工具,可以使用该工具来对档案进行加密。在E-BookHTMLCompilerPro+版本中,软件还给我们提供了设置产品存取权的面板。软件的使用方法与其他软件类似。在使用该软件的过程中要注意以下两点:

1.单击打开档案以后,您选择的目录下面的所有档案将会被加入到档案列表框中。但是请您注意,如果您制作完一个产品之后,请务必将档案列表清空!否则下一次软件还会将上一次的档案捆绑到当前的EXE档案当中。

2.软件在组建HTML档以前,要求用户输入EXE档执行的起始页面,否则将会提示找不到页面,请注意一定要保证档案名的尾码也一定要正确。

4、HTML2EXE2.2

软件大小:1.28MB

软件类型:共享软件

公司网站:http://www.html2exe.com

执行平台:Windows9X/NT/2000

下载地址:http://www.html2exe.com/dl/h2e22d.zip

该软件支援常见HTML基本元素,包括表格、表单、图片、背景音乐等,但不支援Java、javascript、CSS等相关技术。软件的操作介面很美观并采用了IE风格的浮动图片变色按钮。虽然软件的操作比较简单,但是软件在作品的版权保护方面还需加强。另外,我们可以指定当前默认的HTML编辑器对页面进行编辑。但是需要向大家说明一点:不要使用中文作为组建的档案和资料夹名。软件提供给我们两种储存格式:EXE和H2E。如果储存成后者,则只能使用该软件的Viewer进行存取。在读者的电脑没有安装浏览器的情况下,这种方式便显得十分有用了。软件还会对输出的档案进行LZH压缩,而且还可以更换成品的标识(bmp或ico格式)。

5、InfoCourier1.38(该软件不再更新)

软件大小:617KB

软件类型:共享软件

公司网站:http://www.smartcode.com

执行平台:Windows9X

下载地址:ftp://ftp.smartcode.com/icour.zip

该软件与Webcompiler2000都是一个公司的产品。但是由于InfoCourier是一个16位元的软件,所以它不能正常工作在WindowsNT或Windows2000下。软件的操作介面十分简单。组建档案时提供的选项很少,只能设置常用的工具是否可用、视窗状态、过期时间等。另外,软件只支援基本的HTML标识,不支援框架、CSS、动态GIF图片、javascript等。要说明一点,由于在InfoCourier中浏览的页面效果和IE以及Netscape稍有不同,所以请在组建前仔细检查每一个页面以保证读者看到相同的效果。

6、MediaPacker2.0

软件大小:1.93MB

软件类型:共享软件

公司网站:http://www.microdream.com

执行平台:Windows9X/NT/2000

下载地址:http://www.newhua.com.cn/down/mediapacker20.zip该软件组建生成的档案介面与其他软件风格不同,翻页、列印、关闭等按钮均在视窗的右上方并且阅读介面近乎全萤幕。软件要求读者的电脑上安装有IE4.0或以上版本。该软件支援图片、表格、框架、CSS等HTML基本元素。软件以向导的方式一步一步引导用户制作电子读物。整个制作过程明朗、简单,提供了相当多的选项给用户来设置最后EXE档的格式。而且对电子读物的安全性和版权等相关问题都作了相当多的考虑。另外值得一提的是,软件安装后带有一个提供给用户的KeyGenerator,这个工具是用来设置出版的电子读物的使用权限的。它较好的保护了作者和出版商的利益。这也是该软件最有特点的地方。

注意事项:在汇入组建出版档的时候,由于软件不能自动搜寻放置在其他目录下的档案,请注意把图片等与页面相关的档案和页面档案放置于同一目录下,否则将会出现组建后的EXE档无法显示图片等相关档案的现象。

7、WebExe1.4

软件大小:1.6MB

软件类型:共享软件

公司网站:http://www.aw-soft.com

执行平台:Windows9X/NT/2000

下载地址:http://www.aw-soft.com/wexsetup.exe

该软件是专门用来制作HTML档转化成EXE档的。软件的优点在于它使用了智慧的向导来引导使用者一步一步完成整个制作过程。所以,我们不用担心制作的时候忘记什么,按照软件提供的向导我们可以轻松制作出精美的电子图书来。另外,软件的操作介面简洁、明了,使用起来很方便。但是不足之处是,软件不支援Java,javascript、DHTML、Flash等技术,不可以直接换掉输出档的图示,必须借助于相关的工具来制作。该软件到目前为止还没有Linux以及Mac版本。

8、WebCompiler20001.5

软件大小:2138KB

软件类型:共享软件

公司网站:http://www.webcompiler.com

执行平台:Windows9X/NT/2000

下载地址:ftp://ftp.webcompiler.com/wc2k.zip

该软件是德国WebCompiler公司出品的用于将多个HTML页面(包括图像档)组建成可执行性档案的软件,目前是同类产品中比较出色的一款软件。其最大的特点就是软件本身相当于一个小型的Web浏览器,对原来的HTML档不会产生任何的损伤。软件支援CSS,javascript等常见Web技术。但是不支援Java和Flash,而软件对是否支援Plugin和ActivX的回答是"也许\",因为这要看Plugin和ActivX的安全程度等相关问题。另外,WebCompiler2000不支援ActiveServerPages。软件需要制作者的电脑上面装有IE4.0或以上版本,并且该软件没有Unix,Mac版本,也没有基于Natscape浏览器的版本。但是软件由于是32Bit,所以基于微软Windows平台的作业系统均可以执行。

注意事项:在制作的过程中,请不要使用中文名作为需要组建的档案或者资料夹名称,否则软件将会弹出视窗提示找不到页面的资讯。另外,您可以制作自己的标识和图示来作为您作品的标志。但是您必须拥有注册版的Webcompiler2000。

9、WebCompiler981.14汉化版

软件大小:356KB

软件类型:免费软件

作者网站:http://lytes.home.chinaren.com

执行平台:Windows9X/NT/2000

下载地址:http://www.guxiang.com/epubcn/so ... er.exeWebCompiler98是WebCompiler2000的前身,具有WebCompiler2000的几乎所有功能。由于该汉化版本非常成功,几乎所有的地方都作了详细的汉化,所以现在很多朋友都在使用该软件。但是由于该汉化版是在解密WebCompiler98的基础之上才汉化的,所以软件目前还具有某些缺憾:即作品的标志和图示不可以换。

10、EbookBuilder4.0

软件大小:615KB

软件类型:免费软件

作者网站:http://members.xoom.com/JanVee/freeware.htm执行平台:Windows9X/NT/2000

下载地址:http://www.newhua.com.cn/down/ebookbuilder4.zip该软件最大的特点就是它的拖拽操作,即当我们打开一个目录时,软件将会将目录中的所有档案显示在档案列表中,我们可以从列表中选中一个或者多个档案通过拖拽的方法将档案加入待组建档案列表中。而我们可以在待组建档案列表中控制档案的排序和执行顺序。另外在制作过程中我们可以任意并且最好指定整个档案执行的开始和结尾。软件支援HTML基本元素以及CSS,但是不支援javascript、Java等技术。另外,软件在组建输出的EXE档执行过程中可以直接跳到指定的页面,这是很方便的一项功能。但是软件没有对组建档作任何的版权限制,所以这不利于作者以及出版商的权利和利益。

软件以档案总管的样式设计。在左上角选择需要组建的档案所在路径,则选中的资料夹中的所有档案将会出现在左下方的档案列表当中。然后从这些档案中选择全部或者部分档案(可以多选),然后使用滑鼠将这些档案拖拽到右边的待组建档案列表当中即可。在最后组建输出以前,请读者最好加入整个档案执行的开始和结尾标识,即单击软件功能表Insert下的BookBegin和BookEnd来指明执行的开始和结尾之处。当然,我们需要将右边待组建的档案进行排序,否则很可能最后的执行顺序不对。另外,如果您首次执行组建后的EXE档,您会发现当前页面会以分屏的方式显示,选中功能表Options>SinglePage选项即可。

11、HyperMakerHTML2002.06

软件大小:2.5MB

软件类型:共享软件

公司网站:http://bersoft.com

执行平台:Windows9X/NT/2000

下载地址:http://bersoft.com/hmhtml/hypermaker.exeHyperMakerHTML2000是同类产品中支援档案格式和效果最多的软件,性能相当出色。该软件支援HTML3.0及以后版本大部分的识别字;支援Flash、Acrobat、AVI和MPEG;可以嵌入Word、PowerPoint、Zip格式的档案;支援动态标识的使用;使用HyperMakerViewer存取支援点击音效。值的一提的是,软件自身带有阅读器,虽然我们在输出档案以后不需要专门的阅读器就可以进行存取,但是软件自身的阅读器方便我们在制作过程当中察看页面的浏览效果是否符合要求。另外,该阅读器可以播放MIDI、WAV、MP3、AVI和MPG格式的音频视频档,可以存取PDF和Flash档案,可以存取Word、Excel等档案,这些特性都是同类产品所无法比拟的。所以通过上面可以看出,软件在同类产品中的确具备相当专业的水准。

不足之处是,HyperMakerHTML2000软件的制作过程相对于其他软件来说较复杂,并且软件没有给我们提供向导功能,所以整个制作步骤需要我们手动完成。另外,软件不支援CSS,输出档案的大小在同样的条件下比别的要大一些。

12、WebPaker1.29

软件大小:1.26MB

软件类型:共享软件

公司网站:http://bersoft.com

执行平台:Windows9X/NT/2000

下载地址:http://bersoft.com/webpacker/webpacker.exe该软件与HyperMakerHTML2000是同一个公司的产品。从操作介面上来看,该软件更像是HyperMakerHTML2000的简化版本。软件依然保持了HyperMaker的操作风格,并且支援基本HTML元素、CSS、Flash、javascript、Java、AVI、各种音频档等等。所以,该软件也是同类产品当中支援的档案格式比较多的一款。与HyperMaker相比,该软件去掉了Interface、Options、External、Setup、Viewer五个选项标签,而把Interface和Options两个标签合为一个名为MainOptions的选项标签。另外,软件不像HyperMaker那样,需要先生成Publication档然后才能生成EXE档,软件可以直接将所有档案组建输出成EXE档。另外建议读者注册该软件,否则组建的EXE档只能存活7天,并且软件的某些功能不可以使用。

13、WinEBookCompiler2.3

软件大小:2.42MB

软件类型:共享软件

公司网站:http://superwin.com

执行平台:Windows9X/NT/2000

下载地址:http://regvac.com/wnebookc.exe

SWB档案格式是该软件专有的档案格式。这种格式的档案需要WinEbookCompilerViewer来阅读。软件支援TXT、RTF两种档案格式,而且软件可以对页面进行编辑,如插入图片、超连结等。值得一提的是,软件支援播放背景音乐。这是一个非常好的功能,读者可以设想边看书边听音乐的感觉,而且可以根据书中不同的情节设置不同的音乐。软件的其他显著的特性:档案的页面切换效果独一无二,翻页的时候,下一页会从萤幕右方"滚动"出来并带有音效,还可以控制翻页速度;支援人声朗读文本,但目前还不支援中文朗读;无需返回目录即可通向任意页面(通过下拉功能表实现);支援放大缩小文本;支援档案加密功能。

由此可以看出,软件具备其他很多软件没有的优点,但是由于所支援的档案格式只限于TXT和RTF,所以很多目前基于Web的技术都不能够实现。另外对软件的局限提出以下三点,希望读者注意:1.不可以超过100个Chapter;2.每一个Chapter的大小最好不要超过312KB,否则打开时将会等待很长时间;3.最好不要打开超过5个阅读视窗,否则将会出现某些问题。

14、NeoBook4.0.9

软件大小:3.8MB

软件类型:共享软件(30天使用限制)

公司网站:http://www.neosoftware.com

执行平台:Windows9X/NT/2000

下载地址:http://www.neosoftware.com/software/nbw40.exe该软件是同类产品中比较"另类"的一款。我们习惯于将多个Web页面以及图片等其他档案汇入软件中,然后通过编辑直接输出EXE档。但是该软件完全不是这样。可以这样说,制作一本电子图书的所有过程需要作者手动完成,包括文字编辑、图片音频档案的插入、颜色的搭配、文字图片定位,甚至翻页按钮都得由作者来制作。所以,该软件的优点在于制作电子图书从始至终完全由作者一手来完成,而我们完全不可以将已经编辑好的HTML档插入到软件中,否则只会出现HTML档的源代码。软件默认识别的档案格式是TXT。另外,软件带有一个浮动的编辑面板,可以帮助作者编辑文字、插入图片、制作按钮等等。当然,用户也可以自己来指定编辑各种格式的档案的编辑器。汇出的EXE档在执行的时候将以全萤幕的方式来显示。

软件还有一个显著的特点,那就是允许用户自己编写Action。例如,如果你想实现翻页按钮的功能,那么你必须加入例如GotoPrevPage这样的Action。在页面切换的时候也可以加入相应的Action。软件在编辑使用的灵活度上给我们留下了极大的余地,而且我们可以根据自己的喜好创建很多动态的效果。但是软件抛开了传统的插入HTML档汇出EXE档的模式,这对于初学者来说不是很好的一件事情。

15、EasyBook2.5

软件大小:1.34MB

软件类型:共享软件(30次使用限制)

公司网站:http://www.easyteach.com

执行平台:Windows9X/NT/2000

下载地址:http://www.easyteach.com/download/ezbook1.exe该软件只能汇入TXT、RTF和EZF格式的档案,不支援使用图片等其他与Web相关的元素。就是说,它只能将纯文本形式的档案组建成EXE档。软件的易用性做的不是很好,而且选项比较复杂而且层层嵌套,对初学者来说不是一个最好的选择。软件需要先建立一个工程档,然后在此工程档的基础之上一篇一篇地加入文本,最后将所有文本组建成EXE档。软件每一步的设计几乎都可以预览当前编辑的状态。这里要说明一点,如果您使用的是非注册版本,那么将会有30次使用限制,而且不可以输出EXE档。所以建议您注册该软件。

16、BoxBuilder

软件大小:476KB

软件类型:免费软件(需要执行密码)

执行平台:Windows9X/NT/2000

下载地址:http://download2.ccidnet.com/school0622/boxbuilder.zip该软件是我见过的同类软件当中最简单的一个。我没有抓取该软件的介面图是因为根本没有必要抓。执行软件以后(如果是首次执行,软件将会提示输入密码,这个密码在软件的打包档中有),视窗上面只有三个按钮:SelectSourceFiles(选择原始档案)、CreateTarget(创建目标)、Help(帮助文档)。软件几乎不支援所有的Web技术,而且你需要将图片档放置在和html档相同的目录下面,否则软件是不会自动找到图片的正确位置的。软件的操作步骤极其简单(两步):选择html档(多选);输出成exe档。软件无任何输出档设置选项,没有防止拷贝等相关的保护措施,就连最后输出的exe档的工具列也只有一个---Home按钮。根据以上我们可以看出,如果你想偷懒的话,这个软件是再适合不过了,两步就搞定!

17、SbookBuilder7

软件大小:575KB

软件类型:免费软件

公司网站:http://jansfreeware.com

执行平台:Windows9X/NT/2000

下载地址:http://jansfreeware.com/sbookbuilder7.zip该软件可以称的上是“傻瓜式”的EXE文档制作软件。软件组建输出档案后还会报告最后的压缩率是多少,但是经过我的测试,呵呵,这个所谓的“压缩率”是有点儿骗人的:我使用200KB(包括HTML和几张图片)的档案组建输出后有900多KB!输出文档的介面也过于简单,总之,我认为使用该软件来发行正式的EXE电子文档不是一个好的选择。但是,软件非常适合初学者使用,对于私下里的文档传送也很方便。

18、E-ditor2.01

软件大小:1613KB

软件类型:共享软件

公司网站:http://www.e-ditorial.com

执行平台:Windows9X/NT/2000

下载地址:http://www.e-ditorial.com/editor201.exe

该软件的前身是“E-ditorPro”。它是EXE类电子文档制作软件中又一个佼佼者。该软件制作出的电子文档,其最大的特点就是可以加入一个“SplashScreen”。其他方面和我们常见的制作工具类似。软件采用了向导的方式来引导使用者。软件支援使用用户自己的ico和bmp档作为图示和标志。软件可以说是继承了当前各大流行制作软件的优点于一身。从设置视窗大小(提出了一种新的概念:DirectXResolutions)、电子文档资讯、密码、Icon置换(32*32)、工具条外观选择、SplashScreen、加密页面和拷贝限制、标志选择等等常见的功能它都具有。其中,SplashScreen是我们常见的在执行软件装载时出现的停留画面,用以转移用户的视线。这将使你的作品更酷!

由于软件采用了向导的方式,所以使用过程非常简单,有一定英文基础的朋友都可以轻松的掌握它。软件可以通过输入用户名和注册码来达到注册目的,感兴趣的朋友可以找一下或者直接注册该软件,我们认为非常值得!

~~~~~~~~~~~~~~~~~~~~~

可能你认为复制的,不可取

你可以仔细看下的

图片显示位置——个人档案照片下面:

#m_pro div.act{margin-top:5pxbackground:url(http://escati.linkopp.net/cgi-bin/date.cgi?trgb=red&srgb=red&prgb=red&timezone=GMT-0500) no-repeat bottompadding-bottom: 22pxmargin-bottom: 6px}

图片显示位置——文章列表 标题下面:

#m_blog div.tit{font-size:14pxfont-weight:boldbackground:url(http://escati.linkopp.net/cgi-bin/date.cgi?trgb=red&srgb=red&prgb=red&timezone=GMT-0500) no-repeat bottompadding-bottom: 22pxmargin-bottom: 6px}

图片显示位置——文章列表 标题左面:

#m_blog div.tit{font-size:14pxfont-weight:boldline-height:24pxtext-indent:120pxbackground:url(http://escati.linkopp.net/cgi-bin/date.cgi?trgb=red&srgb=red&prgb=red&timezone=GMT-0500) no-repeat}

图片显示位置——文章列表 标题栏:

#tabline{top:89pxbackground:url(http://escati.linkopp.net/cgi-bin/date.cgi?trgb=red&srgb=red&prgb=red&timezone=GMT-0500) no-repeat bottompadding-bottom: 32pxmargin-bottom: 6px}

图片显示位置——相册下面:

#m_album div.image{text-align:centerbackground:url(http://escati.linkopp.net/cgi-bin/date.cgi?trgb=red&srgb=red&prgb=red&timezone=GMT-0500) no-repeat bottompadding-bottom: 45pxmargin-bottom: 1px}

图片显示位置——每个友情链接下面:

#m_links div.line{margin-top:5pxline-height:8pxborder-top:1px solid #F4C1B5background:url(http://escati.linkopp.net/cgi-bin/date.cgi?trgb=red&srgb=red&prgb=red&timezone=GMT-0500) no-repeat bottompadding-bottom: 16pxmargin-bottom: 10px}

图片显示位置——每个最新评论下面:

#m_comment div.item{color:#000000font-size:12pxbackground:url(http://escati.linkopp.net/cgi-bin/date.cgi?trgb=red&srgb=red&prgb=red&timezone=GMT-0500) no-repeat bottompadding-bottom: 22pxmargin-bottom: 6px}

图片显示位置——每个文章分类下面:

#m_artclg div.line{margin-top:5pxline-height:8pxborder-top:1px solid #F4C1B5background:url(http://escati.linkopp.net/cgi-bin/date.cgi?trgb=red&srgb=red&prgb=red&timezone=GMT-0500) no-repeat bottompadding-bottom: 16pxmargin-bottom: 10px}

图片显示位置——其他区域:

#comm_info div.line{margin-top:5pxline-height:8pxborder-top:1px solid #BBC1C6background:url(http://escati.linkopp.net/cgi-bin/date.cgi?trgb=red&srgb=red&prgb=red&timezone=GMT-0500) no-repeat bottompadding-bottom: 22pxmargin-bottom: 6px}

公告栏可以通过自定义模块设置

需要放控件的页面

<link rel="stylesheet" type="text/css" href="ezcalendar.css" />

<script type="text/javascript" src="ezcalendar.js"></script>

<input type="text" name="datetime" size="12" rows="3" id="datetime" value="" onClick="javascript: showCalendar(datetime)">

<IMG SRC="data.jpg" WIDTH="18" HEIGHT="17" BORDER="0" onClick="javascript: showCalendar(datetime)">

文件 ezcalendar.js

var EZcalendar = false // Loaded or not?

var bfadeIn = false // Fade in or not? Not suitable for slow machines

var selectedDate // whether the users cursor is over the calendar

var target// the target element for the date value

var dateSeparator = " "// date separator unit

var overCalendar = false// whether the users cursor is over the calendar

var months = new Array("一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月")

// simply return an object by id

function getID(id) {

return document.getElementById(id)

}

// return a number with 2 digits ("2" becomes "02")

function formatNumber(n) {

return (n<10) ? "0"+n : n

}

function getScrollFromTop() {

if (self.pageYOffset) {

return self.pageYOffset

} else if (document.documentElement &&document.documentElement.scrollTop) {

return document.documentElement.scrollTop

} else {

return document.body.scrollTop

}

}

// return a number >10 as one single digit ("09" becomes "9")

function removeFormatNumber(n) {

return (n.substr(0,1)=="0") ? n.substr(1,1) : n

}

// return the on-screen LEFT(x) position of an element

function getPageOffsetLeft(el) {

return (el.offsetParent != null) ? el.offsetLeft + getPageOffsetLeft(el.offsetParent) : el.offsetLeft

}

// return the on-screen TOP(y) position of an element

function getPageOffsetTop(el) {

return (el.offsetParent != null) ? el.offsetTop + getPageOffsetTop(el.offsetParent) : el.offsetTop

}

// Checks a string to see if it in a valid date format

// of (D)D/(M)M/(YY)YY and returns true/false

function isValidDate(s) {

// format D(D)/M(M)/(YY)YY

var dateFormat = /^\d{1,2}\/\d{1,2}\/\d{2,4}$/

if (dateFormat.test(s)) {

// remove any leading zeros from date values

s = s.replace(/0*(\d*)/gi,"$1")

var dateArray = s.split("/")

// correct month value

dateArray[1] = dateArray[1]-1

// correct year value

if (dateArray[2].length<4) {

// correct year value

dateArray[2] = (parseInt(dateArray[2]) <50) ? 2000 + parseInt(dateArray[2]) : 1900 + parseInt(dateArray[2])

}

var testDate = new Date(dateArray[2], dateArray[1], dateArray[0])

if (testDate.getDate()!=dateArray[0] || testDate.getMonth()!=dateArray[1] || testDate.getFullYear()!=dateArray[2]) {

return false

} else {

return true

}

} else {

return false

}

}

// get the calendar week of a date

function getWeek(d) {

/* thanks to http://www.quirksmode.org/js/week.html */

var today = new Date(d)

Year = today.getFullYear()

Month = today.getMonth()

Day = today.getDate()

now = Date.UTC(Year,Month,Day+1,0,0,0)

var Firstday = new Date()

Firstday.setYear(Year)

Firstday.setMonth(0)

Firstday.setDate(1)

then = Date.UTC(Year,0,1,0,0,0)

var Compensation = Firstday.getDay()

if (Compensation >3) Compensation -= 4

else Compensation += 3

NumberOfWeek = Math.round((((now-then)/86400000)+Compensation)/7)

return formatNumber(NumberOfWeek)

}

// change the calendar to the PREVIOUS month

function prevMonth() {

var months = getID("months")

var years = getID("years")

if (parseInt(months.value) - 1 >= 0) {

months.value = parseInt(months.value) - 1

} else if (parseInt(years.value) >1901) {

months.value = 11

years.value = parseInt(years.value) - 1

}

updateCalendar()

}

// change the calendar to the NEXT month

function nextMonth() {

var months = getID("months")

var years = getID("years")

if (parseInt(months.value) + 1 <12) {

months.value = parseInt(months.value) + 1

} else if (parseInt(years.value) <2099) {

months.value = 0

years.value = parseInt(years.value) + 1

}

updateCalendar()

}

// change the calendar to the PREVIOUS year

function prevYear() {

var years = getID("years")

if (parseInt(years.value) >1901) {

years.value = parseInt(years.value) - 1

}

updateCalendar()

}

// change the calendar to the NEXT year

function nextYear() {

var years = getID("years")

if (parseInt(years.value) <2099) {

years.value = parseInt(years.value) + 1

}

updateCalendar()

}

// update the calendars values

// this changes the <a>tags innerHTML and href values

function updateCalendar() {

var today = new Date()

var y = getID("years")

var m = getID("months")

y = y.value

m = m.value

var calendarDate = new Date(y,m,1)

getID("EZcalendar_text").innerHTML = months[calendarDate.getMonth()] + " " + calendarDate.getFullYear()

var defaultMonth = calendarDate.getMonth()

var difference = calendarDate.getDay()+6

calendarDate.setDate(calendarDate.getDate()-difference)

for (r=0r<6r++) {

getID("week"+r).innerHTML = getWeek(calendarDate)

for (c=0c<7c++) {

if (calendarDate.getMonth()!=defaultMonth) {

getID("cell"+r+c).className="outsideMonth"

} else {

getID("cell"+r+c).className=""

}

// is it today's date?

if (calendarDate.getDate()+"/"+calendarDate.getMonth()+"/"+calendarDate.getFullYear()==today.getDate()+"/"+today.getMonth()+"/"+today.getFullYear()) {

getID("cell"+r+c).className="today"

}

getID("cell"+r+c).title = ""

getID("cell"+r+c).innerHTML = calendarDate.getDate()

getID("cell"+r+c).href = "javascript:setDate('" + calendarDate.getFullYear() + dateSeparator + formatNumber(calendarDate.getMonth()+1) + dateSeparator + formatNumber(calendarDate.getDate()) + "')"

calendarDate.setDate(calendarDate.getDate()+1)

}

}

}

// when a user click the show calendar link, this function opens

// the calendar and tries to show the correct calendar for the date in

// the input field.

function showCalendar(id) {

if (EZcalendar) {

target=id

var y = getID("years")

var m = getID("months")

var calendar = getID("EZcalendar")

var el = getID(id)

// test if string is valid date and if so, show calendar relative to the date they have chosen.

if (isValidDate(el.value)) {

var elDate = el.value.replace(/0*(\d*)/gi,"$1")

var dateArray = elDate.split(dateSeparator)

// correct month value

dateArray[1] = dateArray[1]-1

if (dateArray[2].length<4) {

// correct year value

dateArray[2] = (parseInt(dateArray[2]) <50) ? 2000 + parseInt(dateArray[2]) : 1900 + parseInt(dateArray[2])

}

m.value = dateArray[1]

y.value = dateArray[2]

} else {

m.value = selectedDate.getMonth()

y.value = selectedDate.getFullYear()

}

updateCalendar()

var x = getPageOffsetLeft(el)

var y = getPageOffsetTop(el) + el.clientHeight

calendar.style.top = (y+5)+"px"

calendar.style.left = x+"px"

if (bfadeIn) {

getID("EZcalendar").style.opacity = 0

getID("EZcalendar").style.filter = "alpha(opacity=0)"

setTimeout("fadeIn(5)",25)

}

calendar.style.display = "block"

} else {

alert("NOTICE:\n\nCalendar not finished loading, please wait...")

}

}

/* When the user clicks, this function tries to detect

if they have clicked outside the calendar and if so

it tries to hide it. */

function clickbg(e) {

if (!overCalendar) {

getID("EZcalendar").style.display="none"

}

}

/* When a user click the calendar date, this function updates the input field */

function setDate(d) {

getID("EZcalendar").style.display = "none"

getID(target).value=d

}

/* Fading in the calendar in a nice way */

function fadeIn(p) {

getID("EZcalendar").style.opacity = p/100

getID("EZcalendar").style.filter = "alpha(opacity="+p+")"

if (p<100) {

setTimeout("fadeIn("+(p+5)+")",25)

}

}

/* Loads the calendar for the first time by creating all the HTML */

function initCalendar() {

// create our container DIV

document.body.innerHTML += '\n<div id="EZcalendar" onmouseover="overCalendar=true" onmouseout="overCalendar=false"></div>'

var calendarHTML = ""

selectedDate = new Date()

calendarHTML += '<form action="#" method="get">'

calendarHTML += ' <input id="months" name="months" type="hidden" value="' + selectedDate.getMonth() + '" />'

calendarHTML += ' <input id="years" name="years" type="hidden" value="' + selectedDate.getFullYear() + '" />'

calendarHTML += ' <div id="EZcalendar_table">'

calendarHTML += ' <table border="1" cellpadding="0" cellspacing="0">'

calendarHTML += ' <tr>'

calendarHTML += '<td><input type="button" value="«" onclick="prevYear()" title="Previous Year" /></td>'

calendarHTML += '<td><input type="button" value="‹" onclick="prevMonth()" title="Previous Month" /></td>'

calendarHTML += '<td colspan="4" id="EZcalendar_text">' + months[selectedDate.getMonth()] + " " + selectedDate.getFullYear() + '</td>'

calendarHTML += '<td><input type="button" value="›" onclick="nextMonth()" title="Next Month" /></td>'

calendarHTML += '<td><input type="button" value="»" onclick="nextYear()" title="Next Year" /></td>'

calendarHTML += ' </tr>'

// build table using for loops...

calendarHTML += ' <tr>'

calendarHTML += '<th scope="col"> </th>'

calendarHTML += '<th scope="col">一</th>'

calendarHTML += '<th scope="col">二</th>'

calendarHTML += '<th scope="col">三</th>'

calendarHTML += '<th scope="col">四</th>'

calendarHTML += '<th scope="col">五</th>'

calendarHTML += '<th scope="col">六</th>'

calendarHTML += '<th scope="col">日</th>'

calendarHTML += ' </tr>'

for (r=0r<6r++) {

calendarHTML += ' <tr>'

calendarHTML += ' <th scope="row" id="week' + r + '">00</th>'

for (c=0c<7c++) {

calendarHTML += ' <td><a href="#" id="cell'+ r + "" + c +'">00</a></td>'

}

}

calendarHTML += ' </tr>'

calendarHTML += '</table>'

// ... end

calendarHTML += ' </div>'

calendarHTML += ' </form>'

getID("EZcalendar").innerHTML = calendarHTML

EZcalendar = true

document.onmousedown = clickbg

updateCalendar()

}

/* Initialise the page by preparing the calendar when the page has loaded */

document.onload = setTimeout("initCalendar()",250)

文件 ezcalendar.css

@charset "utf-8"

/* CSS Document */

#EZcalendar {

display: none

position: absolute

margin: 0

z-index: 99

background: #005083

color: #fff

/* safer to use fixed font sizes */

font: 11px Arial, Helvetica, sans-serif

border: 5px solid #044771

}

#EZcalendar form {

margin: 0

padding: 0

}

#EZcalendar table {

background: #005083

border: none

font-size: 100%

margin: 0

padding: 0

}

#EZcalendar table td, #EZcalendar table th {

width: 20px

height: 20px

line-height: 20px

text-align: center

}

/*tds*/

#EZcalendar table td a.outsideMonth {

background: gray

color: #fff

}

#EZcalendar table td a.today{

background: #aaa

color: #fff

}

#EZcalendar table td a {

background: silver

color: #333

display: block

color: #333

margin: 0

padding: 0

width: 20px

height: 20px

line-height: 20px

text-decoration: none

}

#EZcalendar table td a:hover {

color: #fff

background: red

}

#EZcalendar table td#EZcalendar_text {

background: #0E649B

text-align: center

width: 80px

height: 20px

}

#EZcalendar input {

border: none

background: #1C78B2

color: #fff

cursor: pointer

width: 20px

height: 20px

padding: 0

margin: 0

text-align: center

}

#EZcalendar input.left {

float: left

}

#EZcalendar input.right {

float: right

}

#EZcalendar_table {

clear: both

}