Archive for the ‘Web技术’ Category

关于密码输入延迟屏蔽的UE细节

六月 25th, 2010

最近看到有一些网站开始启用一个类似Iphone、Google Andriod手机的密码输入体验,大致效果如下图,在用户输入密码的时候可以将用户的输入以明文的方式短时间延迟屏蔽。提高用户输入密码的正确率。有点意思,分享一下:

网易通行证的登录页面

目前我看到可用的体验地址有:网易通行证登录页面 网易邮箱注册页面,之前看到新浪邮箱也用了,现在找不到了。

实现原理

从上面两个例子的源代码中可以找到,网易登录页面的是使用的一个开源的项目,叫dpassword,而邮箱注册页面是自己写的javascript文件

Html代码部分

我们知道,原生态的密码输入框是做不到这种效果的,为了实现这种体验,其实是使用了“障眼法”的。在html中,放置了2个input控件,只是一个是用来显示效果的,一个是真正用于保存密码的,如:

<input type="hidden" id="pwd" value="" name="password">
<input type="text" value="" maxlength="16" class="inp ipt-normal" id="password">

将type=”hidden”的那个隐藏input控件来记录用户输入的密码,将type=”text”的这个拿出来做延迟效果。

Javascript部分

javascript需要实现的,无非就是做两件事:

  • 将用户在假的密码输入框中的输入记录到input type=”hidden”这个隐藏控件中去。
  • 在暴露出来的这个假的input type=”text”中去实现延迟屏蔽的动态效果。

为什么需要2个input控件才能完成这个任务,这也是“障眼法”的关键所在,传统密码输入框输入任何字符,都直接是以“圆点”类似的不可见的方式出现的,根本不可能实现先是明文,然后延迟变为“圆点”类的显示方式,此处输入的“圆点”,其实真的是通过javascript将用户输入的字符替换为一个“圆点”的特殊符号的。

所以在网易邮箱注册的那段javascript文件中,可以看到这样的代码片段:

var replacement = unescape('%u25CF');
//定义一个用于替换的“圆点”的字符,% u25CF
function getpass(passin,passstore)//passin为假的密码输入框的ID;passstore为隐藏控件的ID
{
	var passwd=document.getElementById(passstore);
	var strin=passin.value;
	var strcache=passwd.value;
	var password="";
	var strout="";
	for(i=0;i<strin.length;i++)
	{
		switch(strin.charAt(i))
		{
			case replacement:
				password+=strcache.charAt(i)==""?strin.charAt(i):strcache.charAt(i);
				break;
			default:
				password+=strin.charAt(i);
				break;
		}
		strout+=replacement;//将用户输入的变为了“圆点”
	}
	passwd.value=password;
	passin.value=strout;//将假的输入框中的字符替换为“圆点”
}

我的理解

我不确定这种体验是否是源于Iphone,但目前我知道的应该就是Iphone、Google Andriod手机上是这样的。这种良好的手机输入体验,一定是因为触摸屏的高出错率(相对我们的PC键盘输入)驱动的。所以在网站上应用这种细节,它的价值一定是比应用在触摸屏手机上要小的多的……对于稍微熟悉电脑的用户,盲打输入密码还是没有问题的,这种出错率远比误打开caps lock键出现的次数要小的多。

当然,此举也引起了部分不明真相的网民的恐慌,呵呵。

HTML5的表单验证

四月 5th, 2010
  • 输入框自动获取焦点

    在网页加载完成是,光标自动聚焦在用户需要输入的地方,比如邮箱登陆页面的输入用户名,之前我们需要在网页onload的时候来用javascript代码指定某个输入框获取焦点的做法,现在html 5直接支持在输入框中加入autofocus属性。

    <input type="text" id="username" name="username" autofocus />
    
  • 文本框的输入提示

    之前我们需要用javascript的onblur、onfocus来实现一个输入框的提示信息,现在只需要增加一个placeholder属性。

    <input type="email" id="uemail" name="uemail" placeholder="[email protected]" required />
    
  • 强大的表单验证功能

    判断必填项

    判断数据格式

  • 有趣的input type=”range”

    可以直接拖动,可以设置最小值、最大值、以及每拖动一格的步长。

    <input type="range" min="1" max="100" step="10" name="s" />
    
  • input type=”number”

    可以通过点击右侧的上下箭头,直接进行加减操作。

  • 输入框下拉提示

    可以用作现在很流行的ajax输入提示,也可以当作是一个可编辑的下拉菜单。即可自行输入,也可以直接下拉选择。

    <input id="search" type="url" list="searchlist" required />
    <datalist id="searchlist">
    	<option value="http://www.google.com" label="Google" />
    	<option value="http://www.yahoo.com" label="Yahoo" />
    	<option value="http://www.bing.com" label="Bing" />
    	<option value="http://www.baidu.com" label="Baidu" />
    </datalist>
    
  • 还有默认的日期选择

    <input type="date" name="birthday" />
    

完整的DEMO:http://www.oneflash.net/demo/html5-form-demo.html,请使用最新版本的Chrome+Oprea一起浏览,才能看到全部效果……

HTML5的写法

四月 5th, 2010

对比一下XHTML 1.0 Transitional的规范,html5基本上没有XHTML 1.0 Transitional严格的要求,并且简化了很多东西。

  • 文档声明更简单了。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <!--在HTML5中,这样写:-->
    <!DOCTYPE html>
    
  • html标签上不需要声明命名空间。

    <html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
    <!--在HTML5中,这样写:-->
    <html  lang="zh-CN">
    
  • 字符集编码声明也简单了

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <!--在HTML5中,这样写:-->
    <meta charset="UTF-8" />
    
  • 可以不用给css及javascript代码写type属性了

    <script type="text/javascript"></script>
    <style type="text/css"></style>
    <!--在HTML5中,可以直接写:-->
    <script></script>
    <style></style>
    
  • 没有XHTML代码规范的要求

    所有的标记都必须要有一个相应的结束标记;
    所有标签的元素和属性的名字都必须使用小写;
    所有的XML标记都必须合理嵌套;
    所有的属性必须用引号”"括起来;

    <div class=test></div>
    <br>
    <INPUT TYPE="TEXT" />
    <!--这些都不做严格要求-->
    

分享:用纯CSS绘制的网站图标

三月 24th, 2010


在Google Reader上看到网友分享的一个链接,真的发现自己已经out了。上面的这张图,是纯CSS实现的,没有背景图、没有Javascript代码,更让我惊讶的是,它的html代码居然是如此的漂亮,没有一丝丝的代码冗余:

<ul>
   <li class="facebook"><a href="#non" title="Share on Facebook">Facebook</a></li>
   <li class="twitter"><a href="#non" title="Share on Twitter">Twitter</a></li>
   <li class="rss"><a href="#non" title="Subscribe to the RSS feed">RSS</a></li>
   <li class="flickr"><a href="#non" title="Share on Flickr">Flickr</a></li>
   <li class="delicious"><a href="#non" title="Bookmark on Delicious">Delicious</a></li>
   <li class="linkedin"><a href="#non" title="Share on LinkedIn">LinkedIn</a></li>
   <li class="google"><a href="#non" title="Bookmark with Google">Google</a></li>
   <li class="orkut"><a href="#non" title="Share on Orkut">Orkut</a></li>
   <li class="technorati"><a href="#non" title="Add to Technorati">Technorati</a></li>
   <li class="netvibes"><a href="#non" title="Add to NetVibes">NetVibes</a></li>
</ul>

作者的原文在这里,作者的Demo在这里,完整的CSS文件在这里,为了能看到如图所示的效果,请使用Firefox或Google Chrome等支持css3的浏览器。
Read more »

如何通过网页发送会议请求

十月 1st, 2009

之前为公司设计了一套内部使用招聘系统,目的就是将招聘过程中的简历筛选、初试、复试、终试等繁琐的线下操作全部无纸化操作,其中有一个功能就是安排面试,简历经过筛选后HR可以在系统中选择面试官、面试时间、面试地点来安排面试,当然我希望的是邮件能直接以Outlook Meeting的方式直接推送到面试官的日程安排中去,而不是以一份普通的通知邮件来告知面试官。如下图:
发送会议请求

点击接受了之后,就直接出现在他的日历中,并且会提前提醒。

发送会议请求

结果开发的同事做出来果然是简单的邮件通知,我猜想可能是需要基于Microsoft Office做一些额外的开发,但Outlook的会议请求是可以直接发给Gmail的。而且Goole日历与Outlook两者之间是互通的,那就基本上与Office无关了。

剩下的只能是格式了,Google了半天找到iCalendar格式的相关资料,普通邮件的格式是text/html,而会议请求、Google日历中的活动都是text/calendar的格式。但自己打开vs2008搞了个demo,捣腾了半天也发不出来,结果证明,我开发能力太菜了……

目前的解决方案倒是有一个,可惜是收费的。

www.aspnetemail.com网站上提供完整的解决方案[Samples],下载了他的代码下来看了看,实现方法基本和我说的一样,只是他封装了dll,还搞了license,着实麻烦……说了这么多,其实我想说的是,哪位大哥帮忙写一下代码吧?这个需求应该还是比较普遍的,非常好用!希望有朋友能Share一下代码。

===========无奈的分割线=========

好长的假呀,买不到火车票的人好惨呀……

记录我的301转向

八月 29th, 2009

博客换域名1周了,分享一下经验,并记录一下现在的结果。

准备工作

  1. 保留老域名iwcn.net的程序运行。
  2. PJblog转换Wordpress
  3. 修改Pjblog的default.asp及article.asp代码做301转向(永久迁移),[方法]。
  4. 新博客生成sitemap.xml提交Google WebmasterBing WebmasterYahoo Site Explorer

目前结果

  • Google在老域名设置301转向的第二天,将PR4转移到了新域名。
  • 目前搜索引擎收录情况:Google 82、Yahoo 18、Bing 14、搜狗 63、有道 4(3个过期)、百度 1。
  • Alexa从1周前的1,900,000左右上升到1,116,746。

体会&分享

  • 百度是无视301转向的,或者说他对301的反应是高级迟钝。
  • 301转向一定要做首页内页全部做,这个工作量还是比较大的。
  • Google对301的反应是最快速的。
  • 做301转向的老域名及网页保留180天。
  • Google网站管理员关于301转向的文章

最后感谢及时更新我的友情链接地址的朋友!

也谈网页圆角的背景图法

三月 14th, 2009

网页的圆角处理,其实最开始的九宫格的表格处理是挺方便的,只是现在都不用表格布局了,自然就被非法取缔了。呵呵。

微软的有VML画圆角,由于只是它自家的特产,大家也都不用了,再有就是Javascript的处理方法,很多都会影响页面性能,大家也都不爱用了。

剩下来的,就只能是老老实实地用背景图了。常用的方法有:

1、固定高度的情况下,我们通常把背景图的宽度拉到足够大,做一个大图,如下:

2、同样,固定宽度的话,我们就拉长高度,如下:

原理都是一样的,就是2头拼凑到一块形成整体。第二种方法会因为在实际使用中图片可能会拉太长,我们一般会将它分为3块来实现,即头部、中间(1px背景垂直拉伸)、和底边。

3、以上是一般网站局部使用圆角的常见处理方法,但如果是整站的UI都很圆的话,显然上面2个常见的方法就不是很好用了,到处都是圆角,高度宽度都随意变换的情况下。我们有必要来一个兼容性更好的背景图法了。这也必然把我们带到了最开始的“九宫格”模式中去了。

同样是基于这种“九宫格”处理的思想,在代码实现上各个网站也有各自的招。

1、头、尾各用3个标签(div or span)来实现圆角,中间直接用border-left、border-right属性来补2边。

2、用一个很大很大的圆角图片,然后来个若干层div嵌套实现,道理和最上面说的拉长高度和拉长宽度是一样的,它这个是双向无限拉长,比如Facebooke的这个圆角处理的背景图片是2000*16像素的尺寸。更大的我看到就是饭否的这张1000*1000像素的了。请看例子。

3、图太大了,总难免是有点舍不得用的,那就用小图,看淘宝网首页的,实现圆角的图片圆角就是这样的。它的原理是在标准的边框实现之后,再额外地向4个角加上一张小图片去补圆,它这个做法,除了图片是小的之外,在网页加载背景图之前,也是有一个比较好的视觉呈现的。示意图如下:

具体代码请看例子

百度越来越像站内搜索引擎了

二月 6th, 2009

百度图片第一位!

百度视频第一位!

百度贴吧第一位!

百度百科第一位!

百度mp3第一位!

最近又出狠招,把百度“有啊”也搬上来了,现在还比较低调,搜手机、笔记本、服装、相机等热门关键词的时候还只是出现在第4位之后,不过看上面的图恐怕用不了多久它也到第一位了!开网店的朋友赶紧抓住机会哦,等哪天百度被狠狠地反垄断了一把就没的玩了!

唉,不厚道!

搜索引擎优化基础知识PPT

七月 3rd, 2008

这几天整理了一份《搜索引擎优化》的PPT,同事交流之用。主要内容有:

  1. SEO常用术语解释
  2. 如何让搜索引擎收录网站
  3. SEO的目的
  4. 站点自身内部的优化
  5. 影响排名的外部因素
  6. 常见的黑盒SEO手法

内容大多都是前辈们的东西,整理了一下而已,适合对SEO感兴趣但不熟悉的网页设计和开发人员阅读。

有兴趣的朋友可以在这里下载:《搜索引擎优化基础》

hover伪类的使用

五月 23rd, 2008

前段时间在论坛上有人问到一个淘宝网上的hover伪类实现的效果如果兼容ie6。
帖子:http://bbs.blueidea.com/thread-2854899-1-1.html
淘宝效果预览:http://list.mall.taobao.com/1343/g-s—–40-0–1343.htm

其实,问题很简单,就是hover伪类在IE6中得不到很好的支持,因为IE6只支持css1,而在css1中hover伪类只能针对a标签来起作用,看了一下淘宝的代码,他们的解决方法是:
首先,按照ie7/FF都支持的css2的写法来写。其次针对IE6不支持css2再做特殊处理。也就是通过javascript来弥补ie6下的不足。

这段javascript的原理是这样的:

根据某些特征找到需要添加hover效果的标签
对此标签添加onmouseover和onmouseout事件
在onmouseover事件中给对象赋予新的css class属性,同样,在onmouseout时移除该css class即可模拟成hover伪类的效果了。

这里有一个简单的示例,供大家参考!