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);
}
}
複製代碼