原生js实现下拉框功能(支持键盘事件)

前端之家收集整理的这篇文章主要介绍了原生js实现下拉框功能(支持键盘事件)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

话不多说,请看代码

<Meta charset="UTF-8"> 倒计时-多种格式<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>-原生js封装 css-3*/ white-space: -moz-pre-wrap; /*Mozilla,since1999*/ white-space: -pre-wrap; /*Opera4-6*/ white-space: -o-pre-wrap; /*Opera7*/ word-wrap: break-word; /*InternetExplorer5.5+*/ } .example{ padding-top:40px; margin-bottom:90px; } .example .call{ padding:18px 5px; background:#f0f5f8; } .example h2{ padding-top:20px; margin-bottom:7px; } .example table { width:100%; table-layout:fixed; border-collapse: collapse; border-spacing: 0; border: 1px solid #cee1ee; border-left: 0; } .example thead { border-bottom: 1px solid #cee1ee; background-color: #e3eef8; } .example tr { line-height: 24px; font-size: 13px; } .example tr:nth-child(2n) { background-color: #f0f5f8; } .example tr th,.example tr td { border-left: 1px solid #cee1ee; word-break: break-all; word-wrap: break-word; padding:0 10px; font-weight: normal; } .example tr th { color: #555; padding-top: 2px; padding-bottom: 2px; text-align: left; } /*公共*/ .select-container { width: 186px; margin: 80px 0; position: relative; z-index: 10000; } .select-container .select-pose { width: 150px; height: 24px; line-height: 24px; display: block; color: #807a62; cursor: pointer; font-style: normal; padding-left: 4px; padding-right: 30px; border: 1px solid #333333; /* background: url(xjt.png) no-repeat right center; */ } .select-pose:before { content: ''; position: absolute; right: 7px; bottom: 7px; width: 0; height: 0; border-width: 4px; border-style: solid; border-color: #888 transparent transparent transparent; transition: all 0.2s; -webkit-transition: all 0.2s; -moz-transition: all 0.2s; -o-transition: all 0.2s; -ms-transition: all 0.2s; transform-origin: 50% 25%; -ms-transform-origin: 50% 25%; -moz-transform-origin: 50% 25%; -webkit-transform-origin: 50% 25%; -o-transform-origin: 50% 25%; } .extended.select-pose:before { transform: rotate(180deg); -webkit-transform: rotate(180deg); -moz-transform: rotate(180deg); -o-transform: rotate(180deg); -ms-transform: rotate(180deg); } .select-container .select-content { width: 184px; border: 1px solid #333333; background-color: #ffffff; position: absolute; z-index: 20000; margin-top: -1px; display: none; overflow: hidden; } .select-list{ cursor: pointer; height: 24px; line-height: 24px; padding-left: 10px; } @H_301_7@ 1) { var x = []; return this.container.each(function() { x.push(new Select(this,opts)) }),x } this.containers=this.container[0]; this.pose=this.container.find(".select-pose")[0]; this.content=this.container.find(".select-content")[0]; this.list=this.container.find(".select-list"); this.index=-1; this.init(); } Select.prototype = { //初始化 init: function() { var self = this; this.page(); this.event(); this.mover(); },event:function(){ var self = this; self.pose.addEventListener('click',function(e) { e = e || window.event; e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true; var oSrc = e.srcElement || e.target; if(oSrc.className.indexOf('extended') > -1){ self.resetM(); }else{ oSrc.classList.add("extended"); self.content.style.display = "block"; } },false); },//鼠标经过list mover:function(){ var self = this; var list=this.list; for (var i = 0; i < list.length; i++) { !function(i){ list[i].addEventListener('mouSEOver',function(e) { self.resetA(); this.style.background = self.params.after; self.index=i; },false); }(i) list[i].addEventListener('click',function(e) { self.pose.innerHTML = this.innerHTML; },false); } },resetA:function(){ var self = this; var list=this.list; for (var i = 0; i < list.length; i++) { list[i].style.background = self.params.before; } },resetM:function(){ var self = this; self.content.style.display = "none"; self.pose.classList.remove("extended"); self.resetA(); },// 点击页面空白处时 page:function(){ var self = this; document.addEventListener('click',function(e) { self.resetM(); },false); document.addEventListener('keydown',function(e) { e = e || window.event; var keyVel=e.keyCode; if (keyVel == 38 || keyVel == 37) { e.preventDefault ? e.preventDefault() : e.returnValue = false;//取消事件默认行为 self.index--; if (self.index < 0) { self.index = self.list.length-1; } self.resetA(); self.list[self.index].style.backgroundColor = self.params.after; } else if (keyVel == 39 || keyVel == 40) { e.preventDefault ? e.preventDefault() : e.returnValue = false;//取消事件默认行为 self.index++; if (self.index > self.list.length-1) { self.index = 0; } self.resetA(); self.list[self.index].style.backgroundColor = self.params.after; }else if(keyVel == 13 && self.index != -1){ e.preventDefault ? e.preventDefault() : e.returnValue = false; self.pose.innerHTML = self.list[self.index].innerHTML; self.index = -1; self.resetA(); self.resetM(); } },} var r = (function() { var e = function(e) { var a = this,t = 0; for (t = 0; t < e.length; t++) { a[t] = e[t]; } return a.length = e.length,this }; e.prototype = { addClass: function(e) { if ("undefined" == typeof e) return this; for (var a = e.split(" "),t = 0; t < a.length; t++) for (var r = 0; r < this.length; r++) this[r].classList.add(a[t]); return this },each: function(e) { for (var a = 0; a < this.length; a++) e.call(this[a],a,this[a]); return this },html: function(e) { if ("undefined" == typeof e) return this[0] ? this[0].innerHTML : void 0; for (var a = 0; a < this.length; a++) this[a].innerHTML = e; return this },find: function(a) { for (var t = [],r = 0; r < this.length; r++) for (var i = this[r].querySelectorAll(a),s = 0; s < i.length; s++) t.push(i[s]); return new e(t) },append: function(a) { var t,r; for (t = 0; t < this.length; t++) if ("string" == typeof a) { var i = document.createElement("div"); for (i.innerHTML = a; i.firstChild;) this[t].appendChild(i.firstChild) } else if (a instanceof e) for (r = 0; r < a.length; r++) this[t].appendChild(a[r]); else this[t].appendChild(a); return this },} var a = function(a,t) { var r = [],i = 0; if (a && !t && a instanceof e) { return a; } if (a) { if ("string" == typeof a) { var s,n,o = a.trim(); if (o.indexOf("<") >= 0 && o.indexOf(">") >= 0) { var l = "div"; for (0 === o.indexOf(":~]/) ? (t || document).querySelectorAll(a) : [document.getElementById(a.split("#")[1])],i = 0; i < s.length; i++) s[i] && r.push(s[i]) } else if (a.nodeType || a === window || a === document) { r.push(a); } else if (a.length > 0 && a[0].nodeType) { for (i = 0; i < a.length; i++) { r.push(a[i]); } } } return new e(r) }; return a; }()) window.select = Select; })() /*封装代码*/

猜你在找的JavaScript相关文章