【JS】使用原型对象封装下拉框
来源:互联网 发布:网络教育与自考哪个好 编辑:程序博客网 时间:2024/06/05 17:06
前几天面试一个前端妹纸,妹纸是应届毕业生,样式切图等也还使得,提及JS脚本时就有些吃力了,问及jQuery优缺点时,竟来了一句大实话“很好呀,没有缺点”。提及原型链和闭包等原生基础知识,妹纸也是一脸为难,其实这些看起来高(ting)大(bu)上(dong)的名字,也没那么可怕啦,毕竟我们也不是写什么惊天地泣鬼神的程序,平时用用就好了。
这次写一下平时用jQuery时怎么做数据封装和插件封装,在一些不使用前端框架的项目里,jQuery还是用得比较多的,现在jQuery升级到3.0以上了,有兴趣的可以去了解一下。
个人感觉使用jQuery的项目有两个不容忽视的问题,一个是运行速度慢;另一个是后台数据和前端数据交互时,各种DOM操作和数据同步烦不胜烦。这两个方面提前优化好,基本上在开发过程中也会轻松一些。
本次内容主要分为以下两块
- 原型对象的基础知识;
- 常用移动端下拉框对象封装
原型对象的基础知识:
原型对象代码一般长下面这样:
// 原型模式创建对象function Animal(name){ this.name=name;}Animal.prototype.sayName=function(){ alert(this.name);}var animal1=new Animal('熊猫');animal1.sayName();//熊猫
每个通过new创建出来的对象都会有一个原型属性prototype,对象从原型prototype继承方法和属性,例如通过new Array()创建的对象原型是Array.Prototype,数组从Array.Prototype继承数组操作方法。
上面例子中animal1对象的原型是Animal.prototype,通过在Animal.prototype上添加sayName方法,使animal1对象也拥有sayName方法。同样的将a对象的原型赋值给b对象,b对象拥有a对象的方法和属性,就可以实现继承。更多的知识大家可以去搜搜资料,网上有很多详细的文章。
常用移动端下拉框对象封装:
首先来分析一下下拉框DroptList的组成:
- 从标签上来讲:我一般会有一个文本标签接收下拉框选中的值,其次就是下拉列表;
- 从样式上来讲:我用bottom属性模拟标签的显示隐藏;
- 从功能上来讲:下拉框一般包括初始化(init),赋值(setValue),显示(showDropt),隐藏(hideDropt),基本上满足数据交互需求。
Html代码
<div id="dropeList2"> <a href="javascript:;" class="dropValue">请选择</a> <!-- 下拉选项 S --> <div class="dropList"> <span class="dropList-title">所属分公司</span> <ul class="dropList-detial"> <li svalue="0"><span class="valueLi">请选择</span><i class="iconfont rbx-ico"></i></li> <li svalue="1"><span class="valueLi">市公司</span><i class="iconfont rbx-ico"></i></li> <li svalue="2"><span class="valueLi">分公司一</span><i class="iconfont rbx-ico"></i></li> <li svalue="3"><span class="valueLi">内容二</span><i class="iconfont rbx-ico"></i></li> <li svalue="4"><span class="valueLi">内容二</span><i class="iconfont rbx-ico"></i></li> <li svalue="5"><span class="valueLi">内容二</span><i class="iconfont rbx-ico"></i></li> <li svalue="6"><span class="valueLi">内容二</span><i class="iconfont rbx-ico"></i></li> <li svalue="7"><span class="valueLi">内容二</span><i class="iconfont rbx-ico"></i></li> <li svalue="8"><span class="valueLi">内容二</span><i class="iconfont rbx-ico"></i></li> <li svalue="9"><span class="valueLi">内容二</span><i class="iconfont rbx-ico"></i></li> <li svalue="10"><span class="valueLi">内容二</span><i class="iconfont rbx-ico"></i></li> <li svalue="11"><span class="valueLi">内容二</span><i class="iconfont rbx-ico"></i></li> <li svalue="12"><span class="valueLi">内容二</span><i class="iconfont rbx-ico"></i></li> <li svalue="13"><span class="valueLi">字数测试字数测试字数测试字数测试字数测试字数测试字数测试</span><i class="iconfont rbx-ico"></i></li> </ul> </div> <!-- 下拉选项 E --> <i class="iconfont down-ico"></i></div>
CSS代码
/* name:下拉框 date:2017-2-14 author:wumj*/.shade { position: fixed; left: 0; top: 0; z-index: 3; height: 100%; width: 100%; background-color: rgba(0, 0, 0, 0.4);}.dropValue { position: relative; display: block; height: 0.5rem; line-height: 0.5rem; color: #666666; width: 100%; padding-right: 0.4rem; padding-left: 0.08rem; box-sizing: border-box; z-index: 2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}.list-detial .down-ico { position: absolute; top: 50%; margin-top: -0.18rem; right: 0.14rem; font-size: 0.26rem; z-index: 1; color: #cccccc;}.dropList { background-color: #fff; transition: all 0.3s; position: fixed; z-index: 4; left: 0; width: 100%; bottom: -100%; text-align: left;}.dropList-title { display: inline-block; padding: 0.14rem; color: #999999;}.dropList-detial { overflow-y: auto; max-height: 5.8rem; padding: 0 0.14rem;}.dropList-detial li { position: relative; height: 0.5rem; padding: 0.1rem 0; border-bottom: 1px solid #f5f5f5; color: 0.14rem;}.dropList-detial li .valueLi { position: relative; display: block; line-height: 0.5rem; padding-right: 0.4rem; box-sizing: border-box; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; z-index: 2;}.dropList-detial li .rbx-ico { position: absolute; top: 50%; right: 0.14rem; font-size: 0.36rem; margin-top: -0.24rem; color: #cccccc; z-index: 1;}.dropList-detial .selected .rbx-ico { color: #0f90ce;}
JS代码
/* name:下拉框 date:2017-2-15 author:*****/function DroptList(id,svalue){ this.ID=id; this.oValue=$('#'+id).find('.dropValue').eq(0); this.oList=$('#'+id).find('.dropList').eq(0); var tvalue=svalue || 0; var _this=this; this.oValue.bind('click',function(){ _this.showDropt(); }); _this.setValue(tvalue);}//赋值DroptList.prototype.setValue=function(svalue){ var _this=this; var options=this.oList.find('li'); for(var i=0;i<options.length;i++){ if (options.eq(i).attr('svalue')==svalue) { options.removeClass('selected'); options.eq(i).addClass('selected'); this.oValue.html(options.eq(i).children('.valueLi').html()); break; } }}//显示下拉列表DroptList.prototype.showDropt=function(){ var _this=this; _this.oList.css('bottom',0); //添加阴影 var shade = document.createElement("div"); shade.setAttribute('class', 'shade'); shade.setAttribute('closeTag', _this.ID); shade.addEventListener('touchmove',function(ev){ ev.preventDefault();//禁止滑屏 }); shade.onclick=function(){ document.body.removeChild(this); _this.hideDropt(); }; document.body.appendChild(shade); _this.oList.find('.valueLi').bind('click',function(){ _this.oList.find('li').removeClass('selected'); $(this).parent().addClass('selected'); _this.oValue.html($(this).html()); _this.hideDropt(); }); $('body').addClass('bhpop'); $('html').addClass('bhpop');}//隐藏下拉列表DroptList.prototype.hideDropt=function(){ this.oList.css('bottom',-this.oList.height()+'px'); $('[closeTag='+this.ID+']').remove(); $('body').removeClass('bhpop'); $('html').removeClass('bhpop');}
效果图
当然也可以把html标签也封装到js去,不过这样能满足大多数需求了,就不折腾了。
源码地址:http://pan.baidu.com/s/1i49K1t7
Author:事始
Sign:只要你还在尝试,就不算失败。
- 【JS】使用原型对象封装下拉框
- JComBox下拉框使用对象封装,显示时指定显示对象中的某一属性
- js封装下拉框,实现重复利用
- JS原型对象,原型链
- js--原型、封装和继承
- js原型对象理解
- js 原型对象
- js面向对象-原型
- JS 面向对象 原型
- js 中的对象原型
- js原型对象
- js中对象原型
- js原型对象与原型链
- Js 原型对象与原型链(转)
- Js 原型对象与原型链(转)
- js原型对象与原型链
- js中的对象/this/原型/原型链
- JS原型对象和原型链
- php扩展开发---设置常量
- 大型网站架构演化发展历程
- VUE使用指南
- 【AI-CPS OS】中端市场切入核心企业的供应链金融信用溢价模型
- 【智能商务】CRM+预测性分析,全程与客户接触的最佳方式
- 【JS】使用原型对象封装下拉框
- 条款02:尽量以const,enum,inline替换#define
- Linux下mysql出错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
- 【人工智能】IBM商业价值研究院:认知中国-描绘中国人工智能发展蓝图
- UVa-10139 Factovisors -(阶乘的整除)
- 【财富空间】纽约创业如何追赶硅谷?看这个废弃的海军造船厂就可以
- Mysql hash和Btree索引的区别以及索引的建立规则
- 网口扫盲一:网卡初步认识
- ExpandableListView 二级列表