var a= 123;
a= a.toString();
复制代码
String(NaN);
string->numberjavascript
NUll->numbercss
全部的非number进行运算,会将这些值转换为number再运算。html
"123"+"456"=123456
若是对两个字符串相加会拼串。c=c+" "
调用boolean()方法。
复制代码
+0 -0 *1 /1
正号 +java
1 + +'2'+3 =>6
负号node
d=20;
d=d++
复制代码
分析:d=d++
先执行等号后边的运算。d++是20;d是21;
,而后再赋值给前边的d。因此最后的d是20;android
false && alert('哈哈哈');
哈哈哈就不会显示。var a = prompt("请输入内容");
没啥写的 就正常正则表达式
switch(a){
case 1:语句1;
case 2:语句2;
case 3:语句3;
default: 语句4;
}
复制代码
a等于的话,输出语句2和语句3和语句4;想要只执行语句2,就在后边加上break;json
for(初始化;条件;更新表达式){
}
复制代码
用根号算。Math.sqrt(i);
数组
for(var i=1;i<=9;i++){
for(var j=1;j<=i;j++){
document.write(j+'*'+i+'='+i*j);
}
document.write("<br/>");
}
复制代码
不能在单独if中使用。浏览器
outer:
for(var i=1;i<5;i++){
console.log("外层循环"+i);
break outer;
//continue outer;效果同样;
console.log("内层循环");
}
复制代码
console.time('test');
console.timeEnd('test');
var obj = new Object();
obj["123"]=789;
取数据的时候也这样console.log(obj["123"]);
console.log(obj.name);
console.log("test2" in obj);
function isOu(){
return num%2==0;
//这个式子的返回值就是ture或者fasle,因此能够直接写return。
}
复制代码
console.time('jishi');
中间写运行的函数, console.timEnd('jishi');
最后输出所用时间。function(){};
像这样的匿名函数直接调用会报错,在外边加一个()就不会报错了。(function(){
alert('我是当即调用函数';
})();
复制代码
若是一个函数做为一个对象的属性值,那么这个函数是这个函数的方法。 调用函数就是调用函数的方法。
for in
语句
var obj = {
name : 'xiaolu';
age : '18';
add:'songlanbao';
}
for(var n in obj){
//每次执行时,会将对象中的一个属性的名字赋值给变量n。
console.log(obj[n]);
//此处不能写 console.log(obj.n);由于obj吗没有n这个属性,这样写会输出undefined
};
复制代码
var a=1;console.log(window.a);
全部被var关键字生命的变量,会在全部的代码以前被声明,可是不会赋值。
ReferenceError
window.a
就是全局的。var a = 1;
function fun(){
console.log(a);
// var a = 2;
}
fun();
复制代码
上边代码没有注释的话就是undefined,有注释就是1,由于没有注释的时候是声明提早,有注释的时候就是向外寻找变量。
var a = 1;
function fun(){
console.log(a);
a = 2;
}
fun();
console.log(a);
复制代码
在函数中没有写var直接给a赋值,就是给全局做用域赋值,最终输出为1
和2
。
var e = 23;
function fun2(e){
//var e;
alert(e);
}
fun2();
复制代码
定义形参就至关于在函数中声明变量,因此上边的代码输出undefined
60集 火狐脚本调试
function creatperson(name,age,gender){
var obj = new Object();
obj.name= name ;
obj.age = age;
obj.gender = gender;
obj.sayName = function(){
alert(this.name);
};
return obj;
}
var obj1=creatperson("swk",18,'nan');
console.log(obj1);
复制代码
输出:
function creatperson(name,age,gender){
var obj = new Object();
obj.name= name ;
obj.age = age;
obj.gender = gender;
obj.sayName = function(){
alert(this.name);
};
return obj;
}
var obj1=creatperson("swk",18,'nan');
console.log(obj1);//输出的object
function Persion(name,age,gender){
this.name = name;
this.age = age;
this.geder = gender;
this.sayName = function(){
alert(this.naem);
};
}
var per1 = new Persion('xiaolu',18,'man');
console.log(per1);//输出的是Persion
复制代码
对象 instance 构造函数
构造函数每次调用都会建立一个空间,很占内存,给他弄成全局的函数,就不会每次都建立了,每次调用就行啦。以下所示:
function Persion(name,age,gender){
this.name = name;
this.age = age;
this.geder = gender;
// this.sayName = function(){
// alert(this.naem);
// };
this.sayName = fun;
}
function fun(){
alert("hello,我叫"+this.name);
}
var per1 = new Persion('xiaolu',18,'man');
per1.sayName();
复制代码
上边的方法虽然解决了很占内存的弊端,可是声明的一个全局变量,这样之后若是也建立一个一样名字的函数的时候,就会覆盖掉这个。因此引出了原型对象来解决这个问题。
__proto__
来访问该属性has OwnProperty()
来检查对象自身中是否含有某个元素,不包括原型中的对象。(和 in 运算符做比较)。返回true faslefunction Persion(name,age,gender){
this.name = name;
this.age = age;
this.geder = gender;
// this.sayName = function(){
// alert(this.naem);
// };
// this.sayName = fun;
Persion.prototype.sayName=function(){
alert("hello,我叫"+this.name);
}
}
// function fun(){
// alert("hello,我叫"+this.name);
// }
var per1 = new Persion('xiaolu',18,'man');
per1.sayName();
复制代码
console.log(per);展现的是per的toString方法。会显示[object object] 没法复现。难受。
数组也是对象
数组的存储性能比普通对象好
读取不存在的数组回返回undefined
获取数组的长度
想数组最后添加元素arr[arr.length]=10;
建立数组
var arr = new Array(10,20,30);
var arr = [1,2,3];
var arr = new Array(10);
表明的是建立的数组中有10个元素,都是空,var arr= [10];
表明的是数组中有一个元素 10数组的方法
arr.push(1,2,3);
arr.pop()
数组的遍历 for循环(略)
var arr = ['swk','zbj','shs'];
arr.forEach(function(a,b,c){
console.log(a);
console.log(b);
console.log(c);
});
复制代码
结果:
slice(start,end)
splice ()
concat()
join()
,
)reverse()
sort()
var arr = [1,2,22,3,4,11];
arr.sort(
function(a,b){
return a-b;
}
);
console.log(arr);
复制代码
函数对象的方法
arguments
Array.isArray(arguments)
Date对象
var d = new Date();
var d2 = new Date("12/03/2019 11:10:30");
Math
包装类
num.tostring();
字符串相关方法
str.charAt(2);
取下标为2的字符 至关于str[6];
charCodeat(2);
返回unicode编码String.formChartCode()
根据字符编码获取字符(经过string函数调用,特殊)正则表达式
var reg = new RegExp("正则表达式","匹配模式");
var reg = /正则表达式/匹配模式;
|
表示或 /a|b/
a或b[]
/[a-z]/
也是或的意思
/[A-z]/
表示任意字母/a[bde]c/
abc.adc.aec/[^ac]/
除了ac/[^0-9]/
除了数字var arr = "1a2b3c4d5f6g7h";
var result = arr.split(/[A-z]/);
console.log(result);//["1", "2", "3", "4", "5", "6", "7", ""];
复制代码
search(/a[bef]c/);
查找有没有abc或aec或afc 即便设置全局匹配也没用。只能返回找到的第一个。match(/[a-z]/ig)
提取符合要求的字符。
replace('旧值','新值');
将字符串中指定内容替换为新内容。默认只替换第一个。repace(/[a-z]/ig,"-");
/a{3}/
;/ab{3}/
三个b/ab{1,3}c/
ac中间有1到3个b就行(含1和3)/ab{3,}c/
ac中间有3次以上b。+
表示至少一个*
有没有都行至关于{0,}?
0个或者1个 {0,1}^
表示是否开头(注意和中括号中的区分)/^a/
$
表示结尾/a$/
/^abc$/
同时使用,要求必须彻底符合。/^a|a$/
表示a开头或者a结尾var phone = "13681234560";
var reg = /^1[3-9][0-9]{9}$/;
result = reg.test(phone);
console.log(result);
复制代码
.
/./
.
表示任意字符\
/\./
reg = new regExp("\\.");
要写两个\
,由于字符串中的\
也是转义字符。\w
字母数字下划线\W
除了字母数字下划线\d
数字\s
空格\b
单词边界 /\babc\b/
用于检测abc是独立单词,若是是sdabcsd就错了。var arr4 = " aaa aa ";
console.log(arr4);
result = arr4.replace(/^\s*|\s*$/,"");
console.log(result);
复制代码
\w+
.
和任意字母下划线。\.[A-z0-9]
@
[A-z]*
.
和任意字母\.[A-z]*$
/^\w*(\.[A-z0-9])*@[A-z0-9]*(\.[A-z]+){1,2}$/
就是用户和浏览器之间的交互行为。
两种方法:
1. 直接在HTML中写属性。
2. 分离出来在js中写。
复制代码
自上而下的加载。
能够用`window.onload=function(){}`来绑定页面加载完成后再执行js代码。
复制代码
<style>
div {
width: 500px;
height: 332px;
margin: 0 auto;
}
div:nth-child(2) {
float: right;
}
</style>
<script>
window.onload=function(){
var prev = document.getElementById("prev");
var next = document.getElementById("next");
var img = document.getElementById("img");
var index = 1;
next.onclick = function(){
index++;
if(index>5){
index=1;
}
img.src = "./img/"+index+".jpg";
}
prev.onclick = function(){
index--;
if(index<1){
index=5;
}
img.src = "./img/"+index+".jpg";
}
}
</script>
</head>
<body>
<div>
<img id="img" src="./img/1.jpg" alt="">
</div>
<div>
<button id="prev">
<
</button>
<button id="next">
>
</button>
</div>
</body>
复制代码
获取元素节点的子节点
获取父节点和兄弟节点
<script type="text/javascript">
function Myclick(idStr,fun){
var btn = document.getElementById(idStr);
btn.onclick = fun;
};
window.onload =function(){
//定义通用点击函数
//查找#bj节点
var btn01 = document.getElementById("btn01");
btn01.onclick = function(){
var beijing = document.getElementById("bj");
alert(beijing.innerHTML);
}
//查找全部li节点
var btn02 = document.getElementById("btn02");
btn02.onclick = function(){
var lis = document.getElementsByTagName("li");
for(var i=0;i<lis.length;i++){
console.log(lis[i].innerHTML);
}
}
//查找name=gender的全部节点
var btn03 = document.getElementById("btn03");
btn03.onclick = function(){
var gender = document.getElementsByName("gender");
for(var i=0;i<gender.length;i++){
console.log(gender[i].value);
}
}
//查找#city下全部li节点
var btn04 = document.getElementById("btn04");
btn04.onclick = function(){
var city = document.getElementById("city");
var citylis = city.getElementsByTagName("li");
for(var i=0;i<citylis.length;i++){
console.log(citylis[i]);
}
}
//返回#city的全部子节点
var btn05 = document.getElementById("btn05");
btn05.onclick= function(){
var city = document.getElementById("city");
console.log(city.childNodes);
}
//返回#phone的第一个子节点
var btn06 = document.getElementById("btn06");
btn06.onclick=function(){
var phone = document.getElementById("phone");
console.log(phone.firstChild);
console.log(phone.firstElementChild);
}
//返回#bj的父节点
Myclick("btn07",function(){
var beijing = document.getElementById("bj");
console.log(beijing.parentNode);
});
//返回#android的前一个兄弟节点
Myclick("btn08",function(){
var android = document.getElementById("android");
console.log(android.previousSibling);
console.log(android.previousElementSibling.innerText);
});
//读取#username的value属性值
Myclick("btn09",function(){
var username = document.getElementById("username");
console.log(username.value);
//设置#username的value属性值
});
Myclick("btn10",function(){
var username = document.getElementById("username");
//设置#username的value属性值
username.value = "hello world";
console.log(username.value);
});
//返回#bj的文本值
Myclick("btn11",function(){
var beijing = document.getElementById("bj");
console.log(beijing.innerHTML);
console.log(beijing.firstChild.nodeValue);//这种麻烦
});
}
</script>
</head>
<body>
<div id="total">
<div class="inner">
<p>
你喜欢哪一个城市?
</p>
<ul id="city">
<li id="bj">北京</li>
<li>上海</li>
<li>东京</li>
<li>首尔</li>
</ul>
<br>
<br>
<p>
你喜欢哪款单机游戏?
</p>
<ul id="game">
<li id="rl">红警</li>
<li>实况</li>
<li>极品飞车</li>
<li>魔兽</li>
</ul>
<br />
<br />
<p>
你手机的操做系统是?
</p>
<ul id="phone">
<li>IOS</li>
<li id="android">Android</li><li>Windows Phone</li></ul>
</div>
<div class="inner">
gender:
<input type="radio" name="gender" value="male"/>
Male
<input type="radio" name="gender" value="female"/>
Female
<br>
<br>
name:
<input type="text" name="name" id="username" value="abcde"/>
</div>
</div>
<div id="btnList">
<div><button id="btn01">查找#bj节点</button></div>
<div><button id="btn02">查找全部li节点</button></div>
<div><button id="btn03">查找name=gender的全部节点</button></div>
<div><button id="btn04">查找#city下全部li节点</button></div>
<div><button id="btn05">返回#city的全部子节点</button></div>
<div><button id="btn06">返回#phone的第一个子节点</button></div>
<div><button id="btn07">返回#bj的父节点</button></div>
<div><button id="btn08">返回#android的前一个兄弟节点</button></div>
<div><button id="btn09">返回#username的value属性值</button></div>
<div><button id="btn10">设置#username的value属性值</button></div>
<div><button id="btn11">返回#bj的文本值</button></div>
</div>
</body>
复制代码
父节点.removeChild("要删除的节点")
document.creatElement()
建立元素节点,参数是 标签名 将建立好的对象返回父节点.appendChild(子节点);
父节点.insertBefore(新节点,旧节点);
<script type="text/javascript">
window.onload = function() {
//建立一个"广州"节点,添加到#city下
myClick("btn01",function(){
var li = document.createElement("li");
var gz = document.createTextNode("广州");
// console.log(li.append("广州"));
li.append(gz);
document.getElementById("city").append(li);
// 简便方法(利用innerHtml)可是原理是先删除后增长,若是其中的元素绑定了元素,那么绑定就会失效。
document.getElementById("city").innerHTML += "<li>广州</li>";
// 折中方法
var li = document.createElement("li");
li.innerHTML = "广州";
city.appendChild(li);
});
//将"广州"节点插入到#bj前面
myClick("btn02",function(){
var li = document.createElement("li");
var gz = document.createTextNode("广州");
li.append(gz);
var bj = document.getElementById("bj");
var city = document.getElementById("city");
city.insertBefore(li,bj);
});
//使用"广州"节点替换#bj节点
myClick("btn03",function(){
var bj = document.getElementById("bj");
var li = document.createElement("li");
var gz = document.createTextNode("广州");
var city = document.getElementById("city");
li.append(gz);
city.replaceChild(li,bj);
});
//删除#bj节点
myClick("btn04",function(){
var bj = document.getElementById("bj");
var city = document.getElementById("city");
// city.removeChild(bj);
// 自杀方法
bj.parentNode.removeChild(bj);
});
//读取#city内的HTML代码
myClick("btn05",function(){
var city = document.getElementById("city");
console.log(city.innerHTML);
});
//设置#bj内的HTML代码
myClick("btn06",function(){
var bj = document.getElementById("bj");
var city = document.getElementById("city");
bj.innerHTML = "京北";
});
};
function myClick(idStr, fun) {
var btn = document.getElementById(idStr);
btn.onclick = fun;
}
</script>
复制代码
例子:
<script type="text/javascript">
window.onload=function(){
var allA = document.getElementsByTagName("a");
for(var i=0;i<allA.length;i++){
allA[i].onclick = function(){
var tr = this.parentNode.parentNode;
var name = tr.firstElementChild.innerText;
if(confirm("确认删除"+name+"么?")){
tr.parentNode.removeChild(tr);
}
return false;//取消默认返回值
};
};
};
</script>
复制代码
添加信息:
var addEmpButton = document.getElementById('addEmpButton');
addEmpButton.onclick= function(){
var empName = document.getElementById("empName");
var email = document.getElementById("email");
var salary = document.getElementById("salary");
var employeeTable = document.getElementById("employeeTable");
var tr = document.createElement("tr");
console.log(empName);
tr.innerHTML="<td>"+empName.value+"</td>"+
"<td>"+email.value+"</td>"+
"<td>"+salary.value+"</td>"+
"<td><a href='javascript:;'>Delete</a></td>";
var tbody = document.getElementsByTagName("tbody")[0];
tbody.appendChild(tr);
复制代码
<script>
var lis = document.getElementsByTagName("li");
for(var i=0;i<lis.length;i++){
alert("for循环"+i);
lis[i].onclick = function(){
alert("响应函数"+i);
};
};
</script>
复制代码
先执行for循环,执行完了,再执行相应函数,相应函数无论怎么点击都是只显示 3 。
元素.style.样式名 = 样式值;
-
,这在js中不合法,要改成驼峰命名,eg:background-color => backgroundColor
元素.style.样式名
元素.currentStyle.样式名
只有ie支持
getComputedStyle(要获取样式的元素,传递伪元素(通常写null))
ie9以上 返回对象
if(window.getComputedStyle){
//此处的这个window必需要加
var width = getComputedStyle(obj,null).width;
}else{
var width = currentStyle.width;
};
复制代码
如下属性得返回值都不带px
<script>
var p = document.getElementById("p");
p.onscroll=function(){
var c = document.getElementById("c");
if(p.scrollHeight-p.scrollTop == p.clientHeight){
c.disabled = false;
};
c.onclick=function(){
if(c.checked){
var z = document.getElementById("z");
z.disabled = false;
}
};
};
</script>
复制代码
eg:显示鼠标的坐标
<script>
var area = document.getElementById("area");
var show = document.getElementById("show");
area.onmousemove=function(e){
var x = e.clientX;
var y = e.clientY;
show.innerHTML = "X:"+x+" Y:"+y;
};
</script>
复制代码
window.e
,
if(!e){e=window.e;}
e = e || winsow.e;
<style>
#box{
height: 100px;
width: 100px;
background-color: red;
position: absolute;
}
</style>
</head>
<body>
<div id="box"></div>
<script>
var box = document.getElementById("box");
document.onmousemove=function(e){
var left = e.clientX+"px";
var top = e.clientY+"px";
box.style.left = left;
box.style.top = top;
};
</script>
</body>
复制代码
document.documentElement.scrollTop;
对象.事件 = 函数
这种方式只能绑定一次,绑定屡次的话第二次就会覆盖第一次。addEventListener("click",function(){},false);
这种方式能够绑定多个。ie8不支持
attachEvent("onclick",function(){});
只有两个参数 要on;可是后绑定先执行。返回的this是window<script>
function bind(obj,eventStr,callback){
if(obj.addEventListener){
//正常浏览器
obj.addEventListener(eventStr,callback,false);
}else{
//兼容ie8
obj.addEventListener("on"+eventStr,function(){
callback.call(obj);
});
}
};
</script>
复制代码
<script>
var box = document.getElementById("box");
box.onmousedown=function(){
document.onmousemove= function(e){
e = e || window.e;
var left = e.clientX;
var top = e.clientY;
box.style.left = left + "px";
box.style.top = top + "px";
};
var song = document.onmouseup = function(){
//这个用document是由于 若是用了box的话,当鼠标被挡住就不能固定了。(好比第二个盒子在第一个盒子上边)
document.onmousemove = null;
document.onmouseup = null;
};
}
</script>
复制代码
return false;
对ie8不起做用<script>
var box = document.getElementById("box");
box.onmousedown=function(e){
// 求出鼠标偏移量
var x = e.clientX - box.offsetLeft;
var y = e.clientY - box.offsetTop;
document.onmousemove= function(e){
e = e || window.e;
var left = e.clientX;
var top = e.clientY;
box.style.left = left- x + "px";
box.style.top = top-y + "px";
};
var song = document.onmouseup = function(){
document.onmousemove = null;
document.onmouseup = null;
};
};
</script>
复制代码
setCapture()
这个只有ie8有。做用是强制捕获,若是是点击的话,无论点谁,都是点击它。eg:随着鼠标滚轮滚动,box变长变短
DOMMouseScroll
,用addEventListrner()绑定
<script>
var box = document.getElementById("box");
box.onmousewheel = function(e){
if(e.wheelDelta > 0){
// box.style.height += 10+"px";
// 不能这样写,由于css属性是外联的,这样读取不到。
box.style.height = box.clientHeight + 10 +"px";
}else{
box.style.height = box.clientHeight - 10 +"px";
}
};
</script>
复制代码
onkeydown
onkeyup
(onkeydown按住不松手会连续触发) 绑定给能够获取焦点的对象中,(例如输入框) 或者document。keyCode
获取按键编码altKey
ctrlKey
shiftKey
判断是否被按下只能操做向前或向后,不能访问具体的历史记录,只在当成有效
history.back() 回退上一个页面
forward()
go() 1表示向前一个页面 2表示向前2个页面 -1 -2
<script>
var imgArrs = [];
for(var i=1;i<= 5;i++){
imgArrs.push("./img/"+i+".jpg");
};
console.log(imgArrs);
var index = 0;
setInterval(function(){
var img = document.getElementById("img");
img.src = imgArrs[index];
index++;
if(index>=5){
index=0;
}
},1000);
</script>
复制代码
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible"content="ie=edge"><title>Document</title><style>*{margin:0;padding:0}#outer{width:520px;height:333px;margin:50px auto;background-color:aqua;padding:10px 0;position:relative;overflow:hidden}#imgList{list-style:none;position:absolute;left:0}#imgList li{float:left;margin:0 10px}#nav{position:absolute;bottom:15px}#nav a{float:left;width:15px;height:15px;background-color:red;margin:0 5px;opacity:.5;filter:alpha(opacity=50)}#nav a:hover{background-color:black}</style><script>window.onload=function(){var imgList=document.getElementById("imgList");var imgArr=document.getElementsByTagName("img");imgList.style.width=520*imgArr.length+"px";var nav=document.getElementById("nav");var outer=document.getElementById("outer");nav.style.left=(outer.offsetWidth-nav.offsetWidth)/2+"px";var index=0;var allA=document.getElementsByTagName("a");allA[index].style.backgroundColor="black"};</script></head><body><div id="outer"><ul id="imgList"><li><img src="./img/1.jpg"alt=""></li><li><img src="./img/2.jpg"alt=""></li><li><img src="./img/3.jpg"alt=""></li><li><img src="./img/4.jpg"alt=""></li><li><img src="./img/5.jpg"alt=""></li></ul><!--导航--><div id="nav"><a href="javascript:;"></a><a href="javascript:;"></a><a href="javascript:;"></a><a href="javascript:;"></a><a href="javascript:;"></a></div></div></body></html>
复制代码
//绑定单击响应函数
for(var i = 0;i<allA.length;i++){
allA[i].num=i;
allA[i].onclick = function(){
index = this.num;
imgList.style.left = index*-520+"px";
//修改正在选中的方块的颜色
setA();
};
};
// 建立一个方法设置选中的a
function setA(){
for(var i=0;i<allA.length;i++){
allA[i].style.backgroundColor="";
//内联样式调成空串,防止覆盖hover。
}
allA[index].style.backgroundColor = "black";
};
复制代码
完成代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0
}
#outer {
width: 520px;
height: 333px;
margin: 50px auto;
background-color: aqua;
padding: 10px 0;
position: relative;
overflow: hidden
}
#imgList {
list-style: none;
position: absolute;
left: 0
}
#imgList li {
float: left;
margin: 0 10px
}
#nav {
position: absolute;
bottom: 15px
}
#nav a {
float: left;
width: 15px;
height: 15px;
background-color: red;
margin: 0 5px;
opacity: .5;
filter: alpha(opacity=50)
}
#nav a:hover {
background-color: black
}
</style>
<!-- 引入tools -->
<script type="text/javascript" src="js/tools.js"></script>
<script>
window.onload = function () {
var imgList = document.getElementById("imgList");
var imgArr = document.getElementsByTagName("img");
imgList.style.width = 520 * imgArr.length + "px";
var nav = document.getElementById("nav");
var outer = document.getElementById("outer");
nav.style.left = (outer.offsetWidth - nav.offsetWidth) / 2 + "px";
var index = 0;
var allA = document.getElementsByTagName("a");
allA[index].style.backgroundColor = "black"
var timer;
//绑定单击响应函数
for (var i = 0; i < allA.length; i++) {
allA[i].num = i;
allA[i].onclick = function () {
clearInterval(timer);
index = this.num;
// imgList.style.left = index*-520+"px";
//修改正在选中的方块的颜色
setA();
// 使用move函数
move(imgList, "left", -520 * index, 20, function () {
// 动画执行完毕,开启自动播放
autoChange();
});
};
}
autoChange(); //开启自动切换
// 建立一个方法设置选中的a
// 将选中的设置为红色,其余的设置为黑色。
function setA() {
//判断当前索引是不是最后一张
if(index>=imgArr.length-1){
index = 0 ;
// 此时显示的是最后一张图,和第一张长得同样,
// 经过css把最后一张切换成第一张。偷梁换柱
imgList.style.left = 0;
}
for (var i = 0; i < allA.length; i++) {
allA[i].style.backgroundColor = "";
//内联样式调成空串,防止覆盖hover。
}
allA[index].style.backgroundColor = "black";
};
function autoChange(){
//开启定时器,定时切换
timer = setInterval(function(){
//索引自增
index++;
index %=imgArr.length;
move(imgList, "left", -520 * index ,20, function() {
// 修改导航按钮
setA();
});
}, 3000);
};
};
// 自动切换图片 建立函数调整自动切换
</script>
</head>
<body>
<div id="outer">
<ul id="imgList">
<li>
<img src="./img/1.jpg" alt=""></li>
<li>
<img src="./img/2.jpg" alt=""></li>
<li>
<img src="./img/3.jpg" alt=""></li>
<li>
<img src="./img/4.jpg" alt=""></li>
<li>
<img src="./img/5.jpg" alt=""></li>
<li>
<img src="./img/1.jpg" alt=""></li>
</ul>
<!--导航-->
<div id="nav">
<a href="javascript:;"></a>
<a href="javascript:;"></a>
<a href="javascript:;"></a>
<a href="javascript:;"></a>
<a href="javascript:;"></a>
</div>
</div>
</body>
</html>
复制代码
box.className = "新class"
box.className += " 新class";//注意空格
function addClass(obj,cn){
//检查obj中是否有cn
if(!hasClass(obj,cn)){
obj.className+=""+cn;
//加空格是由于 添加class属性值的时候 两个属性之间有空格,两个属性才能都显示。
}
};
复制代码
function hasClass(obj,cn){
var reg = new RegExp("\\b"+cn+"\\b");
//正则,\b是判断是否是一个单词。
return reg.test(obj.className);
};
复制代码
function removeClass(obj , cn){
//建立一个正则表达式
var reg = new RegExp("\\b"+cn+"\\b");
//删除class
obj.className = obj.className.replace(reg , "");
}
复制代码
function toggleClass(obj , cn){
//判断obj中是否含有cn
if(hasClass(obj , cn)){
//有,则删除
removeClass(obj , cn);
}else{
//没有,则添加
addClass(obj , cn);
}
}
复制代码