JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

var SmartPass = function(input) {

if (input instanceof Node) {

if (input.tagName == 'INPUT' && input.type == 'password') {

var self = this;

this.input = input;

this.element = document.createElement('div');

this.element.style.width = this.input.offsetWidth + 'px';

this.element.style.height = this.input.offsetHeight + 'px';

this.cursor = document.createElement('div');

this.cursor.className = 'smartpass-cursor';

this.element.className = 'smartpass';

this.dots = [];

this.cursorDelta = 0;

this.typingInterval = 200;

this.typingTimeout = null;

this.typing = function() {

this.cursor.className += ' hit';

setTimeout(function() {

self.cursor.className = self.cursor.className.replace(/\bhit\b/g, '');

}, this.typingInterval / 2);

if (this.typingTimeout !== null) clearTimeout(this.typingTimeout);

this.element.className += ' typing';

this.typingTimeout = setTimeout(function() {

self.element.className = self.element.className.replace(/\btyping\b/g, '');

}, this.typingInterval);

};

this.appendDots = function(n) {

if (typeof n != 'number') n = 1;

for (var i = 0; i < n; i++) {

var dot = document.createElement('div');

dot.className = 'smartpass-dot';

this.dots.push(dot);

this.element.appendChild(dot);

}

};

this.removeDots = function(n, animation) {

if (typeof n != 'number') n = 1;

if (n > this.dots.length) n = this.dots.length;

var remove = function(dot) {

setTimeout(function() {

dot.parentNode.removeChild(dot);

}, 100);

};

if (animation !== false) {

for (var i = this.dots.length - n; i < this.dots.length; i++) {

this.dots[i].className += ' out';

remove(this.dots[i]);

}

} else {

for (var i = this.dots.length - n; i < this.dots.length; i++) {

this.dots[i].parentNode.removeChild(this.dots[i]);

}

}

this.dots.splice(this.dots.length - n, n);

};

this.updateDots = function(animation) {

var n = this.input.value.length - this.dots.length;

if (n > 0) this.appendDots(n);

else if (n < 0) this.removeDots(-n, animation);

};

this.updateCursor = function(delta) {

if (typeof delta == 'number') this.cursorDelta += -this.cursorDelta >= this.dots.length && delta < 0 ? 0 : delta;

if (this.cursorDelta > 0) this.cursorDelta = 0;

var left = this.element.offsetWidth / 2 - 1;

if (this.dots.length > 0) {

var dotStyle = getComputedStyle(this.dots[0]);

var dotWidth = 6;

dotWidth += parseInt(dotStyle.getPropertyValue('margin-right'));

dotWidth += parseInt(dotStyle.getPropertyValue('margin-left'));

left += (this.dots.length + this.cursorDelta * 2) * dotWidth / 2;

}

if (left > this.element.offsetWidth - 2) left = this.element.offsetWidth - 2;

else if (left < 0) left = 0;

this.cursor.style.left = left + 'px';

};

this.confirm = function(check) {

this.element.className = this.element.className.replace(/\b(correct|wrong)\b/g, '');

setTimeout(function() {

self.element.className += check ? ' correct' : ' wrong';

}, 1);

if (check) this.input.blur();

else {

setTimeout(function() {

self.input.value = '';

self.updateDots(false);

self.updateCursor();

self.element.className = self.element.className.replace(/\bwrong\b/g, '');

}, 500);

}

};

this.reset = function() {

this.input.value = '';

this.updateDots();

this.updateCursor();

this.element.className = 'smartpass';

setTimeout(function() {

self.input.focus();

}, 300);

};

this.input.addEventListener('keydown', function(event) {

self.typing();

setTimeout(function() {

self.updateDots();

self.updateCursor(event.keyCode == 39 ? 1 : (event.keyCode == 37 ? -1 : 0));

});

});

this.input.addEventListener('focus', function() {

self.updateDots();

self.updateCursor();

self.element.className += ' focus';

});

this.input.addEventListener('blur', function() {

self.element.className = self.element.className.replace(/\bfocus\b/g, '');

});

this.input.parentNode.insertBefore(this.element, this.input);

this.input.parentNode.removeChild(this.input);

this.element.appendChild(this.input);

this.element.appendChild(this.cursor);

this.updateDots();

this.updateCursor();

setTimeout(function() {

self.input.focus();

}, 300);

}

}

};

var smartPass = new SmartPass(document.getElementById('input'));

document.getElementById('form').onsubmit = function() {

if (document.getElementById('input').value == 'password') {

smartPass.confirm(true);

document.getElementById('confirm').className = 'correct';

setTimeout(function() {

document.getElementById('confirm').className = '';

}, 1800);

setTimeout(function() {

smartPass.reset();

}, 2000)

} else {

smartPass.confirm(false);

document.getElementById('confirm').className = '';

}

return false;

};

html登录页面的校验控件,HTML5一款有趣智能的密码输入界面控件相关推荐

  1. html5人脸拼图,面向眼机交互的界面控件设计方法研究.pdf

    摘要 摘要 眼机交互是目前人机交互技术中具有前瞻性研究价值的新方向,目前已逐步应用在 虚拟现实.残疾人辅助.医疗.教育和军事等诸多领域.近年来,越来越多的设备将眼 机交互的方式加入到人机对话中,发挥其 ...

  2. android获取支付宝登录账号密码错误,Android实现支付宝6位密码输入界面

    我们先来照图分析一下: (1)限制输入6位,每一位都有自己的框格,每个格显示一位: (2)有回退/取消支付按钮: (3)有忘记密码链接: (4)自定义的只能输入数字的键盘输入区: (5)在6位输完后自 ...

  3. 用户注册登录页面实例 web前端开发HTML5 JavaScript css

    根据清华大学出版社的HTML5网页前端设计实战课后实战 代码与注释如下 <!doctype html> <html> <head> <meta charset ...

  4. Android自定义类似支付宝密码输入的控件

    前言:感觉自己记忆力不是很好,很多写过的东西容易忘记,所以还是写个博客记录一下,菜鸟一枚,望各位师傅指点. 嘿喂狗,来看我们要实现的效果(如果你说:"开发之前当然看不到效果,看个diao啊& ...

  5. (转)基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

    http://www.cnblogs.com/wuhuacong/p/3317223.html 在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中界面部分的 ...

  6. 测试篇(三):测试用例的万能公式、对水杯和登录页面设计测试用例、测试用例的设计方法

    目录 一.测试用例的万能公式 二.对登录页面设计测试用例 三.测试用例的设计方法 3.1 基于需求的设计方法 3.2 等价类 3.3 边界值 3.4 判定表 3.5 正交排列 3.6 场景设计法 3. ...

  7. 几个不错的开源的.net界面控件

    转自原文 几个不错的开源的.net界面控件 (转) 几个不错的开源的.net界面控件 - zt 介绍几个自己觉得不错的几个开源的.net界面控件,不知道是否有人介绍过. DockPanel Suite ...

  8. 抖音短视频登录页面功能测试条例

    抖音登录测试条例 在点击"我",界面 点击遇到问题,是否可以跳转页面,点击返回是否可退出当前页面 是否可以点击"x"关闭"我"界面 点击手机 ...

  9. CH3-Android常见界面控件

    目标 掌握简单控件的使用,能够独立搭建一个注册界面 掌握ListView控件与RecyclerView控件的使用,能独立搭建列表界面 掌握自定义控件的定义方式,能够自定义一个简单的控件 ​ 几乎每一个 ...

最新文章

  1. 2015-12-15 关于就近日期
  2. php 网站数量,PHP给网站添加在线人数统计
  3. 201671010128 2017-09-24《Java程序设计》之继承
  4. 一步一步搭建hibernate4+ spring+ struts2
  5. 【前端后端运维】Web开发人员学习路线,汇总整理
  6. PHP回顾之多进程编程
  7. 手把手搭建WAMP+PHP+SVN开发环境
  8. 413.等差数列划分
  9. python网络蜘蛛
  10. 最全的软件开发报价标准
  11. android使用App Link或者URL Scheme直接跳转第三方app信息收集
  12. 51nod-1682 中位数计数
  13. 黑苹果之联想Y430P亮度记忆功能
  14. 拼团功能建议人手一套
  15. 华华跟奕奕玩游戏(数学期望递推式)
  16. 计算机私密相册安全吗,一张照片竟能泄露这么多隐私?这个功能不可不知
  17. 英语差能学好Python吗?学Python有捷径吗?
  18. 计算机设备的工作原理,计算机工作原理
  19. 微信jssdk录音功能开发记录
  20. 第一阶段冲刺团队贡献值分析

热门文章

  1. imp遇到重复数据_数据挖掘入门 - 泰坦尼克号生存预测
  2. windows卸载qt_如何在Qt中显示一个窗口并在关闭后立即将其删除?
  3. python设计要求_Python高级应用程序设计任务要求
  4. python解释器安装步骤_Python 解释器
  5. Docker安装实践Jenkins
  6. c语言 参数经过运算后还原为输入值,1:编程实现由键盘输入两个整数,将其赋给变量x和y并输出,交换x和y的值后再输出 用函数输出!...
  7. linux 游戏 黑白,黑白迭代官方版游戏-黑白迭代下载v0.5-Linux公社
  8. php怎么给页面链接,怎么给一个PHP密码访问页面加超链接
  9. C++ vector所有操作,你真的掌握vector了吗?两万总结带你干穿vector
  10. OpenShift 4 - 使用 Trivy Operator 对项目中的镜像进行安全扫描