JS 仿支付宝input文本输入框放大组件的实例


Posted in Javascript onNovember 14, 2017

input输入的时候可以在后边显示数字放大镜

<!doctype html>
<html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>JS 仿支付宝input文本输入框放大组件</title>
 <script src="js/jquery.min.js"></script>
 <style>
  * { margin: 0; padding: 0; border-width: 1px; }
  .parentCls {margin:5px 60px 0;}
  .js-max-input {border: solid 1px #ffd2b2; position:relative;background: #fffae5;padding: 0 10px 0 10px;font-size:20px;color: #ff4400}
  .inputElem4{ width: 300px; height: 36px; border: 1px solid #E0E0E0; padding-left: 10px; line-height: 36px; font-size: 14px; }
 </style>
 </head>
 <body>
 <div class="parentCls">
  <input type="text" class="inputElem4" autocomplete = "off" maxlength="18"/>
 </div>
  <script src="js/jq22.js"></script>
  <script>
   // 初始化
   $(function(){
   new TextMagnifier({
    inputElem: '.inputElem4',
    align: 'bottom',
    splitType: [6,4,4,4]
   });
   });
  </script>
 </body>
</html>
/**
 * JS 仿支付宝的文本输入框放大组件
 */ 


 function TextMagnifier(options) {

  this.config = {
  
  inputElem   :  '.inputElem',  // 输入框目标元素
  parentCls   :  '.parentCls',  // 目标元素的父类
  align    :  'right',   // 对齐方式有 ['top','bottom','left','right']四种 默认为top
  splitType   :  [3,4,4],   // 拆分规则
  delimiter   :  '-'    // 分隔符可自定义
  };

  this.cache = {
   isFlag : false
  };
  this.init(options);
 }

 TextMagnifier.prototype = {
  
  constructor: TextMagnifier,

  init: function(options) {
  this.config = $.extend(this.config,options || {});
  var self = this,
   _config = self.config,
   _cache = self.cache;
  
  self._bindEnv();
  
  
  },
  /*
  * 在body后动态添加HTML内容
  * @method _appendHTML
  */
  _appendHTML: function($this,value) {
   var self = this,
    _config = self.config,
    _cache = self.cache;

   var html = '',
    $parent = $($this).closest(_config.parentCls);

    if($('.js-max-input',$parent).length == 0) {
    html += '<div class="js-max-input"></div>';
    $($parent).append(html);
    }
    var value = self._formatStr(value);
    $('.js-max-input',$parent).html(value);
  },
  /*
  * 给目标元素定位
  * @method _position
  * @param target
  */
  _position: function(target){
  var self = this,
   _config = self.config;
  var elemWidth = $(target).outerWidth(),
   elemHeight = $(target).outerHeight(),
   elemParent = $(target).closest(_config.parentCls),
   containerHeight = $('.js-max-input',elemParent).outerHeight(); 
  
  $(elemParent).css({"position":'relative'});
  
  switch(true){
   
   case _config.align == 'top':
    
    $('.js-max-input',elemParent).css({'position':'absolute','top' :-elemHeight - containerHeight/2,'left':0});
    break;
   
   case _config.align == 'left':

    $('.js-max-input',elemParent).css({'position':'absolute','top' :0,'left':0});
    break;
   
   case _config.align == 'bottom':

    $('.js-max-input',elemParent).css({'position':'absolute','top' :elemHeight + 4 + 'px','left':0});
    break;
   
   case _config.align == 'right':

    $('.js-max-input',elemParent).css({'position':'absolute','top' :0,'left':elemWidth + 2 + 'px'});
    break;
  }
  },
  /**
  * 绑定事件
  * @method _bindEnv
  */
  _bindEnv: function(){
  var self = this,
   _config = self.config,
   _cache = self.cache;

  // 实时监听输入框值的变化
  $(_config.inputElem).each(function(index,item){

   $(item).keyup(function(e){
    var value = $.trim(e.target.value),
     parent = $(this).closest(_config.parentCls);
    if(value == '') {
     self._hide(parent);
    }else {

     var html = $.trim($('.js-max-input',parent).html());

     if(html != '') {
      self._show(parent);
     }
    }
    self._appendHTML($(this),value);
    self._position($(this));
   });

   $(item).unbind('focusin');
   $(item).bind('focusin',function(){
    var parent = $(this).closest(_config.parentCls),
     html = $.trim($('.js-max-input',parent).html());

    if(html != '') {
     self._show(parent);
    }
   });

   $(item).unbind('focusout');
   $(item).bind('focusout',function(){
    var parent = $(this).closest(_config.parentCls);
    self._hide(parent);
   });
  });
  },
  /**
  * 格式化下
  * @method _formatStr
  */
  _formatStr: function(str){
  var self = this,
   _config = self.config,
   _cache = self.cache;
  var count = 0,
   output = [];
  for(var i = 0, ilen = _config.splitType.length; i < ilen; i++){
   var s = str.substr(count,_config.splitType[i]);
   if(s.length > 0){
    output.push(s);
   }
   count+= _config.splitType[i];
  }
  return output.join(_config.delimiter);
  },
  /*
  * 显示 放大容器
  * @method _show
  */
  _show: function(parent) {
  var self = this,
   _config = self.config,
   _cache = self.cache;
  if(!_cache.isFlag) {
   $('.js-max-input',parent).show();
   _cache.isFlag = true;
  }
  },
  /*
  * 隐藏 放大容器
  * @method hide
  * {public}
  */
  _hide: function(parent) {
  var self = this,
   _config = self.config,
   _cache = self.cache;
  if(_cache.isFlag) {
   $('.js-max-input',parent).hide();
   _cache.isFlag = false;
  }
  }
 };

效果图

JS 仿支付宝input文本输入框放大组件的实例

以上这篇JS 仿支付宝input文本输入框放大组件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript脚本实现静态网页加密实例代码
Nov 05 Javascript
JavaScript 32位整型无符号操作示例
Dec 08 Javascript
javascript作用域问题实例分析
Jul 13 Javascript
js实现类似菜单风格的TAB选项卡效果代码
Aug 28 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
Nov 17 Javascript
js事件驱动机制 浏览器兼容处理方法
Jul 23 Javascript
ES6学习之变量的解构赋值
Feb 12 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
Jan 30 Javascript
Vue2 添加数据可视化支持的方法步骤
Jan 02 Javascript
详解一些适用于Node.js的命名约定
Dec 08 Javascript
分享JS表单验证源码(带错误提示及密码等级)
Jan 05 Javascript
TypeScript中条件类型精读与实践记录
Oct 05 Javascript
js实现数组内数据的上移和下移的实例
Nov 14 #Javascript
vue router使用query和params传参的使用和区别
Nov 13 #Javascript
vue+vue-validator 表单验证功能的实现代码
Nov 13 #Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
Nov 13 #jQuery
Angular实现表单验证功能
Nov 13 #Javascript
mescroll.js上拉加载下拉刷新组件使用详解
Nov 13 #Javascript
Vue.js用法详解
Nov 13 #Javascript
You might like
php+javascript的日历控件
2009/11/19 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
PHP序列号生成函数和字符串替换函数代码
2012/06/07 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
2016/07/18 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
详解Python当中的字符串和编码
2015/04/25 Python
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
应届生如何写自荐信
2014/01/05 职场文书
迟到检讨书400字
2014/01/13 职场文书
毕业生就业协议书
2014/04/11 职场文书
小学教师自我评价
2015/03/04 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
CSS基础详解
2021/10/16 HTML / CSS
Python中的datetime包与time包包和模块详情
2022/02/28 Python