找回密码
 立即注册
首页 业界区 业界 从登录框看前端

从登录框看前端

晌集涟 2025-5-29 16:55:06
我们会骂 12306 的网站界面挫,效果差,速度慢,回头看看自己写的代码,是不是也一样的狗血!在前端,很多看似简单的东西,内藏无数玄机。本文将以一个小小的登录框为入口,谈一谈如何完善自己的程序。
在很多人眼里,前端就是 DIV+CSS+JQuery,甚至还有些人停留在 table 布局的迷雾当中(这些人应该跟 IE6 一样,随着历史渐渐被尘封)。但,前端绝不是你所看到的那样。举个例子,登录页面几乎是每一个系统不可或缺的模块,很多娴熟的人可以在一刻钟之内写好一个登录页面,两个 input,一个提交 button,万事 OK。
  1. Username: <input type="text" /><br />
  2. Password: <input type="password" /><br />
  3. <input type="sbumit" />
复制代码
当然,作为一个完成登录验证的页面,这几个元素完全可以胜任,但我只能说你完成了一个可以用的页面,这种页面完全没有用户体验可言,完全不符合一个具有的严谨的思维的程序员的作风!
本文地址:http://www.cnblogs.com/hustskyking/p/user-exprience-in-login-box.html
一、一切以良好用户体验为基础

1. 视觉效果

界面的设计就不用多说了,一般情况这个属于美工的活儿,这里要谈的是几个最基础的点。
第一,你的页面兼容性如何?各个元素的长宽、行高等在不同浏览器上是否表现一致,如果这个都没有保证,那一定是不合格的。
第二,移动终端上的体验问题,如今很多页面 PC 和移动终端都用的一套结构,也就是我们所说的响应式布局,本博客就使用了响应式布局,缩小窗口可以看到效果,响应式布局是为了让不同的移动终端也能得到同样的优质体验,可是很多开发者却忽略了横屏时的效果。下面是常见的几个移动终端的像素比例:
Mobilepx rateIphone5320*568Iphone4320*480Galaxy S 3/4360*640Lumia 920384*640iPad768*1024照顾用户的响应式布局除了要考虑这些屏幕的横屏,还得把竖屏考虑进去。我简单的做了一个登陆页面:
1.jpeg

正确的账号是:barret,密码是:123,你可以用错误的信息先去测试下~
可以戳这个DEMO:http://qianduannotes.duapp.com/demo/login/login.html
2. 交互

前面那种方式,点击提交按钮,送到后台去验证,验证没有通过则回到登录页面,这也算是一种交互,不过这种交互的体验是特别不好的,每次都得重新刷新页面,应该利用 ajax 异步去验证表单。为了省去用户的聚焦点击,可以按照下面的思路来做:

  • 用户名为空,或者格式不对 -》 提示错误,清空密码框,聚焦到用户名框,并全选用户名
  • 用户名不存在 -》同上
  • 密码错误 -》 提示错误,清空密码框,聚焦密码框
  • 聚焦到密码框,全选密码
告诉用户哪个地方出了问题,并提前预知用户遇到这些问题之后会做哪些事情,我们能够用程序解决的事情,绝不麻烦用户亲自动手操作。当提示用户名错误的时候,用户肯定会回到输入框重新输入,这个时候我们已经聚焦到用户框,并全选了之前的输入,方面用户进行删除操作。类似这样的交互,我们应该提前做预判断。
3. 状态提示

什么是状态提示?有时候因为网络原因,点击提交 button 之后,ajax 传输半天没有响应,用户等了半天页面一点提示都没有,这个肯定会让用户焦急的。回头看看 Gmail,一个把 ajax 发挥到极致的 web应用,在用户体验上做的也是相当给力的,登录邮箱的时候一个 loading 动画,旁边还放了一个加载基本HTML(供慢速网络使用),每一个操作都有提示,提示中还有一个撤销操作的按钮,数据进行加载的时候,如果加载时间过长,期间会进行多次不同的提示,并在最后给出一个确切的结果,对于一个登录框而言,需要做到这些:

  • 一个明确的用于状态提示的 box
  • 等待 3s,结果没有出来,提示用户继续等待
  • 等待 6s,结果没有出来,提示用户网络不畅通
  • 设置 10s 为超时,并告知用户提交表单失败
这些东西的实现并没有太多的技术难度,但是可以给慢速网络下的用户带来很好的体验和安全感。
4. 安全传输

用户最担心的是账号密码被截获,或者因为密码一处多用,不希望别人看到密码的明文,既然用户担心,我们就应该想办法来处理。
把密码和时间戳叠加,然后加密,传到后台的是加密的结果以及这个时间戳,如下:
  1. // 前端
  2. t = new Date();
  3. s = encode(pwd + t);
  4. post(s, t)
  5. // 后台
  6. decode(s) === pwd + t
复制代码
这样就可以保证密码的隐蔽性,如果 hacker 不知道 decode 函数,即便是拿到了 s 和 t,也是徒劳。关于安全传输,之前也写过相关的文章,OAuth认证原理及HTTP下的密码安全传输。如果要做到在用户输入的时候就绝对安全,那就必须使用类似 支付宝安全插件 这样的东西了。他的原理就是在页面中嵌入一个控件,这个控件与页面之间是相互屏蔽的,在控件内部输入也只有控件拿得到输入信息。
5. 数据走缓存

表单提交首选应该是 post,但是也不排除会用 get 方式提交,那么这个时候就应该考虑数据缓存了,如果请求的 url 相同,程序就会直接从浏览器的缓存中拿数据,并给出状态是 status: 200 OK(from cache),为了避免这些常识性的问题,记得在请求的参数中加点东西。
  1. _t = new Date*1
  2. _n = Math.random
复制代码
为了保证参数的绝对唯一性,甚至可以把 时间戳 和随机数叠加起来用
  1. _s = (new Date*1 + Math.random*1E5)/1E5
复制代码
6. 渐进增强

渐进增强这个词一般是,不支持 javascript 或者对 javascript 支持度不太好的浏览器上利用其它方式实现,或者告诉用户什么原因不能用,就是一种蜕化处理。目前不支持 javascript 的浏览器应该是绝迹了,当然也不是绝对,kindle 内置的浏览器对 javascript 的支持度就不高,或者根本就不支持。还有一种情况是用户禁用了 javascript,这个比例很小,开发者会这么干,一般的用户不会乱改浏览器设置。但是我们的程序,尤其是关键的部位(如搜索,登录,注册等)必须要考虑这一少部分群体。一般采用的方式是:
1)使用 noscript 标签,这个是最常用,也是最实用的。

2)hack 方式,document.write("
您需要登录后才可以回帖 登录 | 立即注册