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

2015-02-18 19:54:25  访问(1468) 赞(0) 踩(0)

  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>JS仿支付宝input文本输入框放大组件</title>
    
        <script type="text/javascript" language="javascript" src="<%=jQuery%>"></script>
    
        <style>
            *
            {
                margin: 0;
                padding: 0;
            }
            .parentCls
            {
                margin: 5px 60px 0;
            }
            .js-max-input
            {
                border: solid 1px #ffd2b2;
                background: #fffae5;
                padding: 0 10px 0 10px;
                font-size: 20px;
                color: #ff4400;
            }
        </style>
        <%=VersionHideInfo%>
    </head>
    <body>
        <h2>
            输入框放大镜的demo</h2>
        <div style="height: 50px;">
        </div>
        <div style="margin-left: 56px; margin-top: 6px;">
            我的方向是向上,允许输入长度11位</div>
        <div class="parentCls">
            <input type="text" class="inputElem" autocomplete="off" maxlength="11" />
        </div>
        <div style="margin-left: 56px; margin-top: 6px;">
            我的方向是向右,允许输入长度18位</div>
        <div class="parentCls">
            <input type="text" class="inputElem1" autocomplete="off" maxlength="18" />
        </div>
        <div style="margin-left: 56px; margin-top: 6px;">
            我的方向是向下,允许输入长度18位</div>
        <div class="parentCls">
            <input type="text" class="inputElem2" autocomplete="off" maxlength="18" />
        </div>
    
        <script type="text/javascript" language="javascript" src="<%=strWebPhyPath%>/jsresult.aspx?id=349"></script>
    
        <script type="text/javascript" language="javascript">
            // 初始化
            $(function() {
                new TextMagnifier({
                    inputElem: '.inputElem',
                    align: 'top'
                });
                new TextMagnifier({
                    inputElem: '.inputElem1',
                    align: 'right',
                    splitType: [4, 4, 4, 6]
                });
                new TextMagnifier({
                    inputElem: '.inputElem2',
                    align: 'bottom',
                    splitType: [6, 4, 4, 4]
                });
            });
        </script>
    
    </body>
    </html>
    
    

  • 
    /**
     * JS仿支付宝的文本输入框放大组件
     */ 
    /* 代码整理:霜叶工作室www.slowx.net */
    
     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();
    		
    		/* 代码整理:霜叶工作室www.slowx.net */
    	 },
    	 /*
    	  * 在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;
    		}
    	 },/* 代码整理:霜叶工作室www.slowx.net */
    	 /**
    	  * 绑定事件
    	  * @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;
    		}
    	 }
     };
    /* 代码整理:霜叶工作室www.slowx.net */
    

参考来源:http://www.lanrenzhijia.com/others/2736.html


上一条:

下一条:


版权声明:
如果本站的资源使用了您的作品,请联系我们,我们会及时的注明
本站所有的资源均为免费自由下载,目的是让大家学习和交流
由于收集过程中几经转载,所以很多作品的原作者不详
如果您不愿在本站展示,请联系我们,我们会及时删除
 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)