Archive for the ‘编程’ Category

基于 jQuery 的旗帜效果纵向多级导航菜单

星期天, 五月 10th, 2009

最近看了一些基于 jQuery 的好玩的导航菜单,然后就想到了这样一个效果的菜单,其实我也不知道该叫它什么效果,就叫旗帜效果 (flag style) 吧。 先来看看最终效果是什么样的: 演示(Demo) 一个导航菜单,最重要的是可访问性,其他的效果都是为了锦上添花的,所以首先我们要做一个纯 CSS 的纵向导航菜单,这样即使用户关闭了 JavaScript 也能无障碍的访问。 第一步: 一个语义化的 HTML 结构 [code lang="html"] <h2>Flag Navigation</h2> <ul id="nav" class="nav"> <li><a href="#">1 HTML</a></li> <li><a href="#">2 CSS</a> <ul> <li><a ...

Circle Tag Cloud Plugin for jQuery

星期一, 五月 4th, 2009

昨天看到某个 blog 上一个 3D Tag Cloud 插件,效果很炫,是用 Flash 写的。很想把它移植到 JavaScript 来,不过尝试失败,最后得到的效果不甚理想,不过还是记录下来吧,也算是一个学习的过程。 *演示(Demo) *下载(Download) 这个效果是基于 jQuery 编写的,也用到了 GSGD 的 Easing Plugin (如果选择使用 jQuery 自带的 "linear" 或者 "swing" 效果的话则不需要包含此插件)。 首先需要一个适当的 html 结构: [sourcecode language="html"]<h2>Circle Tag Cloud</h2> <div id="tag_cloud"> <a id="tag1" href="#1" style="font-size: 20pt; color:blueviolet">UED</a> <a id="tag2" href="#2" style="font-size: 10pt; color:maroon">JavaScript</a> ...

你的第一条饭否/ Twitter 消息

星期一, 四月 27th, 2009

前天在饭否上看到有些人在玩一个 Twitter 应用,这个应用可以查出你加入 Twitter 的时间。觉得蛮好玩的,因为我用 Twitter 很少(主要是觉得网页版速度不够快,又不想再开一个客户端),所以想看看能不能移植到饭否来。虽然饭否的 API 和 Twitter 的基本相同,但是在用户信息这部分稍有不同,饭否并没有提供用户的创建时间这个字段。 没办法,只好曲线救国了... 我用了搜索用户消息的办法来查找用户的第一条消息,虽然这和用户的创建时间不一定一样,不过这也算是另一种应用吧 ^_^ 第一次使用 Google App Engine 来部署应用,不过没用到 Python (因为不会 =,= ),只是直接使用了静态文件: 你在饭否的第一条消息? 不幸的发现饭否的 API 也有同样的限制,虽然没有在文档里写明,但是经过测试,只能得到最多 3,200 条用户消息... Update 了一个新的版本,现在应该可以查询所有人的第一条消息了,即使你是消息数超过 3,200 的饭否狂人 :) Your First Twitter? Twitter 这个版本有点问题,由于 API 的限制,只能得到最多 3,200 条用户消息,所以消息数超过 3,200 的目前还无法查到第一条消息... Rest API Limit Clients may request up to 3,200 statuses via the page and ...

Opera浏览器处理disabled属性的bug

星期三, 十一月 26th, 2008

最近在看John Resig的《精通JavaScript》,作为JQuery的作者之一,技术实力自然不在话下。不过如果仔细看某些源代码的话,还是有些小问题的,也许是作者比较粗心吧,这里是中文版的勘误页面,再版的时候估计会好很多。 趁着读书时的热情,做了一些小的demo来练习,在上一个demo中发现opera浏览器在处理xhtml标签的"disabled"属性时有一个bug。 事情是这样的,我在页面中有一个button元素,我希望它只能被点击一次,所以我在button的click事件中将它的"disabled"属性置为true。这样,点击一次之后,这个button就变成了灰色的不可用状态,我也确实无法再通过鼠标直接点击它了。事情到此都是没有问题的,接下来我希望能用键盘快捷键来控制这个button,于是我给它添加了"accesskey"属性,然后问题就来了,在我点击一次使得button变为不可用状态后,我还是可以通过accesskey来点击它。 我在其他的浏览器上进行了同样的实验,结果表明在我现有的浏览器 (FireFox3, IE8, Safari3/win, Chrome0.4) 上都没有这个bug,除了opera。我目前使用的是opera 9.61版,不过我估计opera以前的版本也存在同样的bug。 进一步实验后,发现opera不只是在处理"accesskey"的点击时有bug,而是在处理除了鼠标直接点击之外的所有其他方式时都存在这个bug。比如在另一个JavaScript脚本里调用这个已经被禁用的button的click函数,甚至通过tab获取button焦点之后连续点击回车,都可以绕过button的disabled属性而触发它的click事件。 我写了一个demo页面来演示这个bug:Button & accesskey 还有要注意的一点就是accesskey在不同的浏览器中的使用方法并不一样。Opera中是通过shift+esc调出accesskey菜单再按相应的accesskey,IE8、Safari3/win以及Chrome0.4则都是使用alt+accesskey。FireFox3中则默认是alt+shift+accesskey,这避免了与浏览器菜单快捷键的冲突,不过可以通过修改about:config的ui.key.contentAccess键值来更改,这个键值的具体含义如下: 1 = Shift 2 = Ctrl 3 = Shift + Ctrl 4 = Alt 5 = Shift + Alt 6 = Alt + Ctrl 7 = Ctrl + Shift + Alt 另外,在做这个demo的时候还发现了IE在处理button按钮时和其他浏览器的不同。在JavaScript脚本中通过element.value来获取button的value属性的值,在IE中得到的是button的innerHTML值,而在其他浏览器中得到的是正确的value属性的值。在网上搜了一下,这个问题有不少人问,解决办法也有不少,有的人建议改用input标签,不过我觉得不符合语义化的要求。还有通过Javascript和xml来解决的,感觉太麻烦了。最后我决定使用button的title属性来存储我需要的值,没办法,妥协一下吧。

FlashFXP站点文件与FileZilla站点文件的互转

星期四, 十一月 20th, 2008

FlashFXP是windows下常用也是很流行的一款ftp下载软件,不过它是收费软件,很多人用的应该都是它的盗版产品吧。 FileZilla则是一款开源的ftp下载软件,对于普通的ftp下载来说完全可以代替FlashFXP来使用,而且FileZilla可以跨平台并且支持IPv6的站点下载。 对于想从FlashFXP迁移到FileZilla的用户来说,站点列表的迁移是个主要的问题。FlashFXP没有提供站点文件导出的功能,不过它的站点文件是保存在安装目录的Sites.dat文件中的,可以很容易找到。FileZilla则提供了完善的导入和导出功能,而且支持的格式是开放的xml格式。 前几天在水源上有人问这两个站点转换的方法,搜到一个CCF的附件,不过没法下载。所以在网上找了些资料,用php写了一个。其中主要的麻烦在于FlashFXP站点文件的格式解析,还有两种站点文件的密码加解密。不过好在已经有人研究过了,只要参考他们的写一个php版本的就行了。 在线转换地址: FlashFXP V3.0站点文件 FileZilla V2.x、V3.x站点文件 写这个在线版的时候顺便学习使用了一下Blueprint CSS Framework,很方便 ^_^ 如果担心自己的站点密码安全性,可以用下面这个CLI版本的,不过需要先安装PHP 5.0以上的版本。 CLI版: FlashFXP2FileZilla CLI版 目前这个转换程序已经实现站点基本信息以及注释的相互转换,其他的一些诸如PASV模式之类的设置没有去考虑,转换之后是默认的设置。另外在FlashFXP转到FileZilla时,将站点的默认连接数设置成了1,这样对于很多只能1 connection/ip的站点就不会有问题了。 如果发现什么bug或者有什么意见可以直接留言给我 :)