使用原生JS 定义一个控件
为了更新使新人学习js的封装,下在写了一个简单的控件~
先看控件的效果
我们在做控件前一般肯定要先把样式定义好了!先贴样式了。
View Code
.Ashu-OrderState { background: url(../images/time.png) no-repeat center center; height: 80px; width: 780px; margin: auto; text-align: center; } .Ashu-OrderState ul{ height: 28px; width: 100%; text-align:center ; margin:0; padding-top: 25px; } .Ashu-OrderState ul li{ list-style-type: none; float: left; height: 28px; width: 25%; background: url(../images/time_y.png) no-repeat center center; font-family: "宋体"; line-height: 28px; color: #919191; text-align:center ; } .Ashu-OrderState ul li span{ display: block; position: relative; top: 0px; font-family: "宋体"; font-size: 13px; line-height: 30px; font-weight: bold; text-align: center; } .Ashu-OrderState ul .curr { color: #ffffff; background-image: url(../images/y_blue.png); } .Ashu-OrderState ul .curr span{ color: #990000; }
下面直接贴我们实现的js部份了,这里我全是用的原生js
View Code
//调用数据 oProgress = [{ value: 1, text: "创建订单" }, { value: 2, text: "付款订单" }, { value: 3, text: "发货订单" }, { value: 4, text: "完成订单" }]; //定义一个控件并初始化 var ashuControl = { //初始化函数,进行各种属性设置,代替了构造函数的作用 defalutOrderStateWidth: 780, setOrderstate: function () { //控件宽度 var defalutOrderStateWidth = this.defalutOrderStateWidth; //取到页面对像 //设置状态控件 使用样式Ashu-OrderState var obj = document.getElementsByClassName("Ashu-OrderState"); for (var i = 0; i < obj.length; i++) { obj[i].width = ashuControl.defalutOrderStateWidth; //获取对像节点数据 var data = eval(obj[i].getAttribute("data")); if (data != null && data != "undefined") { //设置单个点的平均宽度 var liwidth = ashuControl.defalutOrderStateWidth / data.length; var html = "<ul>"; //循环附值 for (var order = 0; order < data.length; order++) { if (obj[i].getAttribute("value") == data[order].value) { html += "<li class=\"curr\" style=\"width:" + liwidth + "px\">" + data[order].value + "<span>" + data[order].text + "</span></li>"; } else { html += "<li style=\"width:" + liwidth + "px\">" + data[order].value + "<span>" + data[order].text + "</span></li>"; } } html += "</ul>"; obj[i].innerHTML = html; } else { //检测是否填写数据 if (obj[i].getAttribute("data") != "") alert("加载数据失败!"); } }; } }; //定义自动加载事件,类似于body的load里的事件 window.onload = function () { var obj = document.getElementsByClassName("Ashu-OrderState"); for (var i = 0; i < obj.length; i++) { if (obj[i].getAttribute("onload").toLowerCase() == "true") { obj[i].width = ashuControl.defalutOrderStateWidth; //获取对像节点数据 var data = eval(obj[i].getAttribute("data")); if (data != null && data != "undefined") { //设置单个点的平均宽度 var liwidth = ashuControl.defalutOrderStateWidth / data.length; var html = "<ul>"; //循环附值 for (var order = 0; order < data.length; order++) { if (obj[i].getAttribute("value") == data[order].value) { html += "<li class=\"curr\" style=\"width:" + liwidth + "px\">" + data[order].value + "<span>" + data[order].text + "</span></li>"; } else { html += "<li style=\"width:" + liwidth + "px\">" + data[order].value + "<span>" + data[order].text + "</span></li>"; } } html += "</ul>"; obj[i].innerHTML = html; } else { //检测是否填写数据 if (obj[i].getAttribute("data") != "") alert("加载数据失败!"); } } } };
在Html调用数据是原此的简单
View Code
<!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> <link rel="stylesheet" href="style/css/site.css" /> <script src="style/js/Common.js" type="text/javascript"></script> </head> <body> <div onload="true" class="Ashu-OrderState" data="oProgress" value="2"></div> </body> </html>
没看到上传附件哦,Demo没法传~


浙公网安备 33010602011771号