angular仿支付宝密码框输入效果


Posted in Javascript onMarch 25, 2017

项目需求,使用ng写一个密码框格子支付模块,一开始使用一个input+letter-spacing来分割字符,但是发现间距非常不好控制,随着字符的输入文本框字符串间距还会自动调整。最终从网上查找到一款jq仿支付宝密码输入框,于是我模仿编写了个指令模块。

效果如下:

angular仿支付宝密码框输入效果

完整代码如下:

<!DOCTYPE html> 
<html> 
<head lang="en"> 
 <meta charset="UTF-8"> 
 <meta name="viewport" 
    content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 
 <meta name="format-detection" content="telephone=no"/> 
 <title>使用ng仿写支付宝密码框</title> 
 <style> 
  *{ margin: 0; padding: 0;} 
  .t{ margin-left: 100px;} 
  .pass-form{position:relative;top:20px; left: 50px; width:100%;} 
  .pass-form .pass-input{position:absolute;top:0;height:75px;line-height:75px;font-size:14px;color:#000;opacity:0;box-shadow:none} 
  .pass-form .pass-border-box{position:absolute;top:0;font-size:0} 
  .pass-form .pass-border-box .faguang{position:absolute;top:0;left:0;z-index:9;box-shadow:0 0 8px rgba(60,100,100,.6);width:75px;height:75px;background:#fff;opacity:0} 
  .pass-form .pass-border-box .pass-border{display:inline-block;position:relative;z-index:10;width:75px;height:75px;border:solid 1px #dcdcdc;border-left:none;-webkit-box-sizing:border-box;box-sizing:border-box} 
  .pass-form .pass-border-box .pass-border:first-child{border-left:solid 1px #dcdcdc} 
  .pass-form .pass-border-box .pass-border.active{background:url(../img/icons/icon_guangbiao.gif) no-repeat center center #fff} 
  .pass-form .pass-border-box .pass-border i{display:block;margin:0 auto;margin-top:22px;width:20px;height:20px;border-radius:100%} 
 </style> 
</head> 
<body ng-app="demo" ng-controller="pageCtrl"> 
 
<div class="t">ng仿写支付宝密码框</div> 
 
<form class="pass-form" name="pass_form" novalidate pass-form> 
 <label for="pass"> 
  <input class="pass-input Jpass" type="tel" name="pass" id="pass" autocomplete="off" ng-model="pass" required maxlength="6" /> 
 
  <div class="pass-border-box"> 
   <span class="pass-border"><i>dot</i></span> 
   <span class="pass-border"><i>dot</i></span> 
   <span class="pass-border"><i>dot</i></span> 
   <span class="pass-border"><i>dot</i></span> 
   <span class="pass-border"><i>dot</i></span> 
   <span class="pass-border"><i>dot</i></span> 
   <div class="faguang Jfaguang"></div> 
  </div> 
 </label> 
</form> 
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> 
<script> 
 var app=angular.module('demo', []); 
 app.controller('pageCtrl', function($scope, $interval, $http, $q){ 
  $scope.pass=''; 
//  $interval(function(){ 
//   console.log('定时检查:'+$scope.pass); 
//  }, 5000); 
 }) 
  .directive('passForm', function($http){ 
   return { 
    restrict: 'EA', 
    link: function(scope, ele, attr){ 
     var inputDom=angular.element(ele[0].querySelector('.Jpass'));//密码框 
     var spanDoms=ele.find('span');//光标span 
     var faguang=angular.element(ele[0].querySelector('.Jfaguang'));//发光外框 
     var that=this; 
     inputDom.on('focus blur keyup', function(e){ 
      e=e? e : window.event; 
      e.stopPropagation(); 
 
      console.log('value len:'+this.value.length); 
      console.log(e.type); 
      if(e.type==='focus'){ 
       var _currFocusInputLen=this.value.length===6? 5 : this.value.length; 
       spanDoms.eq(_currFocusInputLen).addClass('active'); 
       faguang.css({left: _currFocusInputLen * 75+'px', opacity: 1}); 
      }else if(e.type==='blur'){ 
       var _currBlurInputLen = this.value.length; 
       spanDoms.eq(_currBlurInputLen).removeClass('active'); 
       faguang.css({opacity: 0}); 
      }else if(e.type==='keyup'){ 
       //console.log(this.value); 
       //键盘上的数字键按下才可以输入 
       if(e.keyCode == 8 || (e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)){ 
        var curInputLen = this.value.length;//输入的文本内容长度 
        for (var j = 0; j < 6; j++) { 
         spanDoms.eq(j).removeClass('active'); 
         spanDoms.eq(curInputLen).addClass('active'); 
         spanDoms.eq(curInputLen - 1).next().find('i').css({backgroundColor: 'transparent'}); 
         spanDoms.eq(curInputLen - 1).find('i').css({backgroundColor: '#000'}); 
         faguang.css({ 
          left: curInputLen * 75 + 'px' 
         }); 
        } 
        if (curInputLen === 0) { 
         spanDoms.find('i').css({backgroundColor: 'transparent'}); 
        } 
        if (curInputLen === 6) { 
         spanDoms.eq(5).addClass('active'); 
         faguang.css({ 
          left: '375px' 
         }); 
         //直接发起密码验证 
         var doSubmitCallback=function(){ 
          scope.pass=''; 
          spanDoms.find('i').css({backgroundColor: 'transparent'}); 
          spanDoms.removeClass('active').eq(0).addClass('active'); 
          faguang.css({ 
           left: '0' 
          }); 
         }; 
//         $http.get('http://xxxx/test.php?pass='+this.value) 
//          .success(function(res){ 
//           console.log(res); 
//           if(res.status){ 
//            doSubmitCallback(); 
//            console.log(that.value+'-----'); 
//           }else{ 
//            doSubmitCallback(); 
 
//           } 
//          }); 
        } 
       }else{ 
        this.value = this.value.replace(/\D/g,''); 
       } 
 
      } 
     }); 
    } 
   } 
  }); 
</script> 
</body> 
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery从头学起第三讲
Jul 06 Javascript
js 事件处理函数间的Event物件是否全等
Apr 08 Javascript
jquery中$.post()方法的简单实例
Feb 04 Javascript
关于Javascript 对象(object)的prototype
May 09 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
Jun 04 Javascript
js/jquery判断浏览器的方法小结
Sep 02 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
Mar 23 Javascript
深入浅析JS Function()构造函数
Aug 22 Javascript
JavaScript交换两个变量值的七种解决方案
Dec 01 Javascript
AngularJS获取json数据的方法详解
May 27 Javascript
学习Vue组件实例
Apr 28 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
May 16 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
Mar 25 #jQuery
axios基本入门用法教程
Mar 25 #Javascript
Bootstrap DateTime Picker日历控件简单应用
Mar 25 #Javascript
ECMAScript6 新特性范例大全
Mar 24 #Javascript
Three.js获取鼠标点击的三维坐标示例代码
Mar 24 #Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
Mar 24 #jQuery
Node.js和Express简单入门介绍
Mar 24 #Javascript
You might like
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
GreyBox技术总结(转)
2010/11/23 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
Vuex的API文档说明详解
2020/02/05 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
python编程培训 python培训靠谱吗
2018/01/17 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
python用户管理系统
2018/03/13 Python
python判断列表的连续数字范围并分块的方法
2018/11/16 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
Python如何发送与接收大型数组
2020/08/07 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
2015年幼儿园学前班工作总结
2015/05/18 职场文书
矛盾论读书笔记
2015/06/29 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android
python Django框架快速入门教程(后台管理)
2021/07/21 Python
MySQL优化之慢日志查询
2022/06/10 MySQL