摘要:普通写法转换过程先变型尽量不要出现函数嵌套函数可以有全局变量把中不是赋值的语句放到多带带函数中改成面向对象全局变量就是属性函数就是方法中创建对象改指向事件或定时器问题现要求再创建一个选项卡,自动轮播,只需新增修改和新增一个方法
html:
</>复制代码
111
222
333
css:
</>复制代码
#div1 div{width: 200px; height: 200px;border:1px #000 solid; display: none;}
.active{background:#f00;}
js:
// 普通写法
</>复制代码
window.onload = function () {
var oParent = document.getElementById("div1");
var aInput = oParent.getElementsByTagName("input");
var aDiv = oParent.getElementsByTagName("div");
for (var i = 0; i < aInput.length; i++) {
aInput[i].index = i;
aInput[i].onclick = function () {
for (var i = 0; i < aInput.length; i++) {
aInput[i].className = "";
aDiv[i].style.display = "none"
}
this.className = "active";
aDiv[this.index].style.display = "block"
}
}
}
转换过程
-先变型 尽量不要出现函数嵌套函数,可以有全局变量,把onload中不是赋值的语句放到多带带函数中
</>复制代码
var oParent = null;
var aInput = null;
var aDiv = null;
window.onload = function () {
oParent = document.getElementById("div1");
aInput = oParent.getElementsByTagName("input");
aDiv = oParent.getElementsByTagName("div");
init();
}
function init() {
for (var i = 0; i < aInput.length; i++) {
aInput[i].index = i;
aInput[i].onclick = change;
}
}
function change() {
for (var i = 0; i < aInput.length; i++) {
aInput[i].className = "";
aDiv[i].style.display = "none"
}
this.className = "active";
aDiv[this.index].style.display = "block"
}
//改成面向对象
全局变量就是属性 函数就是方法 onload中创建对象 改this指向(事件或定时器问题)
</>复制代码
window.onload = function () {
var t1 = new Tab()
t1.init();
}
function Tab() {
this.oParent = document.getElementById("div1");
this.aInput = this.oParent.getElementsByTagName("input");
this.aDiv = this.oParent.getElementsByTagName("div");
}
Tab.prototype.init = function () {
var This = this;
for (var i = 0; i < this.aInput.length; i++) {
this.aInput[i].index = i;
this.aInput[i].onclick = function (){
This.change(this);
}
}
}
Tab.prototype.change = function (obj) {
for (var i = 0; i < this.aInput.length; i++) {
this.aInput[i].className = "";
this.aDiv[i].style.display = "none"
}
obj.className = "active";
this.aDiv[obj.index].style.display = "block"
}
现要求再创建一个选项卡,自动轮播,只需新增div2 修改init和新增一个autoPlay方法
</>复制代码
window.onload = function () {
var t1 = new Tab("div1")
t1.init();
var t2 = new Tab("div2")
t2.init();
t2.autoPlay();
}
function Tab(id) {
this.oParent = document.getElementById(id);
this.aInput = this.oParent.getElementsByTagName("input");
this.aDiv = this.oParent.getElementsByTagName("div");
this.iNow = 0;
}
Tab.prototype.autoPlay = function () {
var This = this;
setInterval(function () {
if(This.iNow == This.aInput.length-1) {
This.iNow = 0;
}else {
This.iNow++;
}
for (var i = 0; i < This.aInput.length; i++) {
This.aInput[i].className = "";
This.aDiv[i].style.display = "none"
}
This.aInput[This.iNow].className = "active";
This.aDiv[This.iNow].style.display = "block"
}, 2000)
}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/52155.html
摘要:其实的面向对象很多原理和机制还是的,只不过把语法改成类似和老牌后端语言中的面向对象语法一用封装一个基本的类是不是很向和中的类其实本质还是原型链,我们往下看就知道了首先说下语法规则中的就是类名,可以自定义就是构造函数,这个是关键字,当实例化对 其实es6的面向对象很多原理和机制还是ES5的,只不过把语法改成类似php和java老牌后端语言中的面向对象语法. 一、用es6封装一个基本的类 ...
插件顾名思义就是能在一个页面多处使用, 各自按自己的参数配置运行, 并且相互不会冲突.会写javascript插件是进阶js高级的必经之路, 也是自己所学知识的一个典型的综合运用. 如果你还没头绪, 无从下手的话, 不用着急, 今天我们就一起来探讨一下插件的一般写法.所需技能: 1.面向对象用法 2.闭包的理解 3.变量作用域的理解 以一个tab选项卡的为例: 第一步: 我们需要写html结...
阅读 3883·2021-11-24 10:46
阅读 1845·2021-11-15 11:38
阅读 3913·2021-11-15 11:37
阅读 3868·2021-10-27 14:19
阅读 2103·2021-09-03 10:36
阅读 2118·2021-08-16 11:02
阅读 3117·2019-08-30 15:55
阅读 2392·2019-08-30 15:44