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 相关文章推荐
Javascript 错误处理的几种方法
Jun 13 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
Jun 01 Javascript
简介JavaScript中getUTCMonth()方法的使用
Jun 10 Javascript
网页从弹窗页面单选框传值至父页面代码分享
Sep 29 Javascript
node.js下LDAP查询实例分享
Sep 30 Javascript
websocket+node.js实现实时聊天系统问题咨询
May 17 Javascript
react中fetch之cors跨域请求的实现方法
Mar 14 Javascript
纯js封装的ajax功能函数与用法示例
May 14 Javascript
Vue中全局变量的定义和使用
Jun 05 Javascript
layui自己添加图片按钮并点击跳转页面的例子
Sep 14 Javascript
vue 内联样式style中的background用法说明
Aug 05 Javascript
Vue的生命周期一起来看看
Feb 24 Vue.js
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
PHP 模拟$_PUT实现代码
2010/03/15 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
php中使用websocket详解
2016/09/23 PHP
php 数据结构之链表队列
2017/10/17 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
详解Vue方法与事件
2017/03/09 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
Python自动扫雷实现方法
2015/07/25 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
python读取ini配置文件过程示范
2019/12/23 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
业务员薪酬管理制度
2014/01/15 职场文书
学校安全工作制度
2014/01/19 职场文书
幼儿园小班植树节活动方案
2014/03/04 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
村安全生产责任书
2014/08/25 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
python实现过滤敏感词
2021/05/08 Python