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 getComputedStyle获取和设置style的原理
Oct 10 Javascript
一个简单的jQuery插件制作 学习过程及实例
Apr 25 Javascript
jquery 学习之二 属性(html()与html(val))
Nov 25 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
jquery轮播的实现方式 附完整实例
Jul 28 Javascript
浅谈jQuery双事件多重加载的问题
Oct 05 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
Oct 21 Javascript
JS获取填报扩展单元格控件的值的解决办法
Jul 14 Javascript
浅谈Vue SSR 的 Cookies 问题
Nov 20 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
Nov 23 Javascript
如何用原生js写一个弹窗消息提醒插件
May 24 Javascript
vuejs中父子组件之间通信方法实例详解
Jan 17 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中MD5函数使用实例代码
2008/06/07 PHP
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
做网页的一些技巧
2007/02/01 Javascript
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
关于webpack代码拆分的解析
2017/07/20 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中非常实用的一些功能和函数分享
2015/02/14 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
keras:model.compile损失函数的用法
2020/07/01 Python
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
个人求职简历的自我评价
2013/10/19 职场文书
咖啡书吧创业计划书
2014/01/13 职场文书
消防器材管理制度
2014/01/28 职场文书
文员转正自我鉴定怎么写
2014/09/29 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
红色故事汇观后感
2015/06/18 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
python 对图片进行简单的处理
2021/06/23 Python
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers