angular仿支付宝密码框

前端之家收集整理的这篇文章主要介绍了angular仿支付宝密码框前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

http://www.qdfuns.com/notes/13457/2212f3d3af79179f3275dc5b7c0282e3.html


最终演示如下【点击观看在线地址演示】:



完整代码如下:


  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <Meta charset="UTF-8">
  5. <Meta name="viewport"
  6. content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0">
  7. <Meta name="format-detection" content="telephone=no"/>
  8. <title>使用ng仿写支付宝密码框</title>
  9. <style>
  10. *{ margin: 0; padding: 0;}
  11. .t{ margin-left: 100px;}
  12. .pass-form{position:relative;top:20px; left: 50px; width:100%;}
  13. .pass-form .pass-input{position:absolute;top:0;height:75px;line-height:75px;font-size:14px;color:#000;opacity:0;Box-shadow:none}
  14. .pass-form .pass-border-Box{position:absolute;top:0;font-size:0}
  15. .pass-form .pass-border-Box .faguang{position:absolute;top:0;left:0;z-index:9;Box-shadow:0 0 8px rgba(60,100,.6);width:75px;height:75px;background:#fff;opacity:0}
  16. .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}
  17. .pass-form .pass-border-Box .pass-border:first-child{border-left:solid 1px #dcdcdc}
  18. .pass-form .pass-border-Box .pass-border.active{background:url(../img/icons/icon_guangbiao.gif) no-repeat center center #fff}
  19. .pass-form .pass-border-Box .pass-border i{display:block;margin:0 auto;margin-top:22px;width:20px;height:20px;border-radius:100%}
  20. </style>
  21. </head>
  22. <body ng-app="demo" ng-controller="pageCtrl">
  23.  
  24. <div class="t">ng仿写支付宝密码框</div>
  25.  
  26. <form class="pass-form" name="pass_form" novalidate pass-form>
  27. <label for="pass">
  28. <input class="pass-input Jpass" type="tel" name="pass" id="pass" autocomplete="off" ng-model="pass" required maxlength="6" />
  29.  
  30. <div class="pass-border-Box">
  31. <span class="pass-border"><i>dot</i></span>
  32. <span class="pass-border"><i>dot</i></span>
  33. <span class="pass-border"><i>dot</i></span>
  34. <span class="pass-border"><i>dot</i></span>
  35. <span class="pass-border"><i>dot</i></span>
  36. <span class="pass-border"><i>dot</i></span>
  37. <div class="faguang Jfaguang"></div>
  38. </div>
  39. </label>
  40. </form>
  41. <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
  42. <script>
  43. var app=angular.module('demo',[]);
  44. app.controller('pageCtrl',function($scope,$interval,$http,$q){
  45. $scope.pass='';
  46. // $interval(function(){
  47. // console.log('定时检查:'+$scope.pass);
  48. // },5000);
  49. })
  50. .directive('passForm',function($http){
  51. return {
  52. restrict: 'EA',link: function(scope,ele,attr){
  53. var inputDom=angular.element(ele[0].querySelector('.Jpass'));//密码框
  54. var spanDoms=ele.find('span');//光标span
  55. var faguang=angular.element(ele[0].querySelector('.Jfaguang'));//发光外框
  56. var that=this;
  57. inputDom.on('focus blur keyup',function(e){
  58. e=e? e : window.event;
  59. e.stopPropagation();
  60.  
  61. console.log('value len:'+this.value.length);
  62. console.log(e.type);
  63. if(e.type==='focus'){
  64. var _currFocusInputLen=this.value.length===6? 5 : this.value.length;
  65. spanDoms.eq(_currFocusInputLen).addClass('active');
  66. faguang.css({left: _currFocusInputLen * 75+'px',opacity: 1});
  67. }else if(e.type==='blur'){
  68. var _currBlurInputLen = this.value.length;
  69. spanDoms.eq(_currBlurInputLen).removeClass('active');
  70. faguang.css({opacity: 0});
  71. }else if(e.type==='keyup'){
  72. //console.log(this.value);
  73. //键盘上的数字键按下才可以输入
  74. if(e.keyCode == 8 || (e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)){
  75. var curInputLen = this.value.length;//输入的文本内容长度
  76. for (var j = 0; j < 6; j++) {
  77. spanDoms.eq(j).removeClass('active');
  78. spanDoms.eq(curInputLen).addClass('active');
  79. spanDoms.eq(curInputLen - 1).next().find('i').css({backgroundColor: 'transparent'});
  80. spanDoms.eq(curInputLen - 1).find('i').css({backgroundColor: '#000'});
  81. faguang.css({
  82. left: curInputLen * 75 + 'px'
  83. });
  84. }
  85. if (curInputLen === 0) {
  86. spanDoms.find('i').css({backgroundColor: 'transparent'});
  87. }
  88. if (curInputLen === 6) {
  89. spanDoms.eq(5).addClass('active');
  90. faguang.css({
  91. left: '375px'
  92. });
  93. //直接发起密码验证
  94. var doSubmitCallback=function(){
  95. scope.pass='';
  96. spanDoms.find('i').css({backgroundColor: 'transparent'});
  97. spanDoms.removeClass('active').eq(0).addClass('active');
  98. faguang.css({
  99. left: '0'
  100. });
  101. };
  102. // $http.get('http://xxxx/test.PHP?pass='+this.value)
  103. // .success(function(res){
  104. // console.log(res);
  105. // if(res.status){
  106. // doSubmitCallback();
  107. // console.log(that.value+'-----');
  108. // }else{
  109. // doSubmitCallback();
  110.  
  111. // }
  112. // });
  113. }
  114. }else{
  115. this.value = this.value.replace(/\D/g,'');
  116. }
  117.  
  118. }
  119. });
  120. }
  121. }
  122. });
  123. </script>
  124. </body>
  125. </html>

猜你在找的Angularjs相关文章