从登录框看前端
来源:互联网 发布:灼华网络 编辑:程序博客网 时间:2024/06/04 19:30
我们会骂12306的网站界面挫,效果差,速度慢,回头看看自己写的代码,是不是也一样的狗血!在前端,很多看似简单的东西,内藏无数玄机。本文将以一个小小的登陆框为入口,谈一谈如何完善自己的程序。
在很多人眼里,前端就是DIV+CSS+JQuery,甚至还有些人停留在table 布局的迷雾当中(这些人应该跟IE6 一样,随着历史渐渐被尘封)。但,前端绝不是你所看到的那样。举个例子,登录页面几乎是每一个系统不可或缺的模块,很多娴熟的人可以在一刻钟之内写好一个登录页面,两个input,一个提交button,万事OK。
Username:
当然,作为一个完成登录验证的页面,这几个元素完全可以胜任,但我只能说你完成了一个可以用的页面,这种页面完全没有用户体验可言,完全不符合一个具有的严谨的思维的程序员的作风!
一、一切以良好用户体验为基础
1、视觉效果
界面的设计就不用多说了,一般情况这个属于美工的活儿,这里要谈的是几个最基础的点。
第一,你的页面兼容性如何?各个元素的长宽、行高等在不同浏览器上是否表现一致,如果这个都没有保证,那一定是不合格的。
第二,移动终端上的体验问题,如今很多页面 PC 和移动终端都用的一套结构,也就是我们所说的响应式布局,本博客就使用了响应式布局,缩小窗口可以看到效果,响应式布局是为了让不同的移动终端也能得到同样的优质体验,可是很多开发者却忽略了横屏时的效果。下面是常见的几个移动终端的像素比例:
Mobile
px rate
Iphone5
320*568
Iphone4
320*480
Galaxy S 3/4
360*640
Lumia 920
384*640
iPad
768*1024
照顾用户的响应式布局除了要考虑这些屏幕的横屏,还得把竖屏考虑进去。我简单的做了一个登陆页面
正确的账号是: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. 安全传输
用户最担心的是账号密码被截获,或者因为密码一处多用,不希望别人看到密码的明文,既然用户担心,我们就应该想办法来处理。
把密码和时间戳叠加,然后加密,传到后台的是加密的结果以及这个时间戳,如下:
//
表单提交首选应该是 post,但是也不排除会用get 方式提交,那么这个时候就应该考虑数据缓存了,如果请求的 url 相同,程序就会直接从浏览器的缓存中拿数据,并给出状态是
_t
6. 渐进增强
渐进增强这个词一般是,不支持javascript 或者对 javascript支持度不太好的浏览器上利用其它方式实现,或者告诉用户什么原因不能用,就是一种蜕化处理。目前不支持javascript 的浏览器应该是绝迹了,当然也不是绝对,kindle内置的浏览器对javascript 的支持度就不高,或者根本就不支持。还有一种情况是用户禁用了javascript,这个比例很小,开发者会这么干,一般的用户不会乱改浏览器设置。但是我们的程序,尤其是关键的部位(如搜索,登录,注册等)必须要考虑这一少部分群体。一般采用的方式是:
1)使用noscript 标签,这个是最常用,也是最实用的
2)hack方式,document.write("<" + "!--")
document.write("<"
这是一种特别巧妙的处理手段,也是值得推荐的。
7. 浏览器后退按钮
这个在注册或者登陆的时候是一个普遍的问题,登陆之后,跳转到另外一个页面,我的鼠标有两个侧键,是用于前进和后退的,有时候会误点侧键,这个时候页面又会回到之前的登录页面,但事实是用户已经登录了,所有页面的状态都应该是已登录的,不管什么情况下都不应该让用户在看到这个页面。用户的点击操作会引发上面的问题,而程序
这样的问题处理方案比较简单,ajax 拿到 success 的状态码时立刻做跳转,但是这里不能用
8. 记住密码
用户最烦的就是每次登录页面都要输入长长的账号密码,如果没有勾选“记住密码”,则用户的登录状态保存在回话的session 中,关闭页面或者浏览器的时候,回话结束,session 被删除,这样当用户下次登录的时候又需要重新输入密码。表单页面的“记住密码”复选框默认状态应该是已选择,用户的潜意识行为都是要少操作的。
当用户提交信息成功之后,直接在 cookie 中保存账号密码?这样的做法显然是不合理的,密码怎么能够明文保存呢,有人会想到加密处理密码然后再保存,或者使用服务器来设置cookie,这些做法都是可以的,不过最好的方式是,当用户成功提交信息时,服务器给前端提供一个token,这个token 是用于自动登录的,我们只需要保存 token 就行了,这样就很好的避免了 cookie 中存放用户隐私信息了。
还有一个要注意的是,当用户取消了“记住密码”的复选框时,应该立即清除相关cookie。
二、其他相关的几个点
1、用户忘记密码
如果用户很长时间没有来你的网站,他可能会忘记自己设置的密码,一些奇葩的用户甚至会忘记自己的用户名,但是用户永远是没有错的,出错的只有我们的程序和写程序的人。对于忘记密码的人,可以在填写密码的旁边加上一个链接“忘记密码?”,让用户利用邮箱或者绑定的手机来找到密码,对于忘记密码以及用户名的人,内伤中...
2. 脚本注入
表单信息应该做正则匹配,或者信息的过滤,防止脚本注入,这个主要是后台要考虑的问题,就不多说了。
3. 多次提交
我们发微博的时候经常会遇到的问题,因为网络原因,会多次点击发布按钮,这个问题有多种处理方案:
发布之前先从服务器拿 token,该token 只有一次有效
后端判断一定时间内用户发布的多条信息,相同的信息去...
三、容易出错的几个知识点
1. setRequestHeader
利用ajax来 post信息,有的人可能遇到过,后台拿不到数据。原因是没有重写请求头的Content-Type,
xhr.open("POST",
一般浏览器不支持 GET 方式时 xhr.send 中添加参数,但是 POST 是可以,也是必须的,如果没有设置 Content-Type 的头部,数据送到后端便没办法解析成 key-value 的模式,后台(PHP)通过$_POST 也拿不到数据。
2. checkbox
这里也是一个体验问题,一些人把checkbox 和他相关的文字分开写,结果没有使用label 来指向,如:记住密码
很显然,我们点击后面的文字是不会让 input改变状态的,有些人会这么处理:
记住密码
这样处理之后,点击文字当然可以选中input,但是这种处理方式是不合理的,label 本来就是标记 input 框用的,他的内容应该是文字,不应该包含 input 这个框,所以合理的做法应该是这样:
记住密码
四、小结
上面说了一大堆,很多问题都是站在用户的角度去思考的,我们是程序员,但是我们也是用户,我们会吐槽,但是我们也会被吐槽。
把用户体验做到极致,这个十分重要,不要放过任何一个细节!
本文来自:博客园
- 从登录框看前端
- 从登录框看前端
- 从登录框看前端
- 从登录框看前端
- 从登陆框看前端(转)
- 从双十一看前端
- 从php/mysql的登录看安全
- 【技术研究】从一场旅游看单点登录
- 从2014年D2前端技术论坛看前端发展趋势
- 从最新的技术趋势看前端的未来
- 从软件工程角度看大前端技术栈
- 从CSDN的登录系统看中国软件业
- Struts2 实战:从 登录Demo 看 Struts2 应用开发
- GitChat·前端 | 从软件工程角度看大前端技术栈
- GitChat · 前端 | 从软件工程角度看大前端技术栈
- 从前端菜鸟到大神,看这一篇就够了
- 从前端菜鸟到大神,看这一篇就够了
- 【从开发者角度看测试】php+mysql+js登录注册系统
- 【C++总结】函数形参,返回const对象与非const对象,成员函数,函数指针
- 9个段子胜过你今年读的所有微信
- HTML5入门指南
- 如何成为一个真正在路上的Linuxer
- 你可以使用HTML Meta标签来做…
- 从登录框看前端
- 给HTML初学者的30条最佳实践
- ubuntu 12.04英文版设置成中文版
- Ubuntu命令大全
- 10个不可忽视的CSS代码片段
- 你是码农还是优秀程序员
- 面试经验分享之数据结构、算法题
- 人类真的需要密码吗
- 搭建Android开发环境