Javascript基礎入門
注:這是JavaScript的複習筆記。
學習地址:學習地址
下一章:Javascript基礎應用
Javascript是什麼
網頁特效原理
淘寶、新浪、百度
JavaScript就是修改樣式
編寫JS的流程
佈局:HTML+CSS
屬性:確定要修改哪些屬性
事件:確定使用者做哪些操作(產品設計)
編寫JS:在事件中,用JS來修改頁面元素的樣式
第一個JS特效——滑鼠提示框
分析效果實現原理
樣式:Div的display
事件:onmouseover、onmouseout
動手編寫此效果
特效基礎
事件驅動:onmouseover
元素屬性操作:obj.style.[……]
特效實現原理概括:響應使用者操作,對頁面元素(標籤)進行某種修改
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style>
/*
* #代表id選擇器
* .代表class選擇器
*/
#div1{
width: 200px;
height: 200px;
background : #f3f3f3;
/* 邊框:大小 型別 顏色 */
border: 2px solid #000;
/* 隱藏 */
display: none;
}
</style>
<script>
function toGreen(){
/*
* 使用document.getElementById獲取ID能處理相容性問題。
* document.getElementById('IDname'):獲取的是id
* document.getElementByClassName('ClassName'):獲取的是class
* var getId : 別名。
*/
var getId = document.getElementById('div1');
getId.style.background='#F3F3F3';
getId.style.display='block'
}
function toOut(){
getId.style.display='none';
}
</script>
<body>
<!--
作者:[email protected]
時間:2017-11-25
描述:
onmousemove:滑鼠移入呼叫toGreen()方法
onmouseout:滑鼠移出呼叫toOut()方法
滑鼠常見事件總結:
mousedown:滑鼠的鍵鈕被按下。
mouseup:滑鼠的鍵鈕被釋放彈起。
click:單擊滑鼠的鍵鈕。
dblclick:滑鼠的鍵鈕被按下。
contextmenu :彈出右鍵選單。
mouseover:滑鼠移到目標的上方。
mouseout:滑鼠移出目標的上方。
mousemove:滑鼠在目標的上方移動。
-->
<input type="button" value="提交" onmousemove="toGreen()" onmouseout="toOut()"/>
<div id="div1">
<a>東走西顧械阿斯蒂芬模壓</a>
</div>
</body>
</html>
初識函式
製作更復雜的效果(DIV的顏色、大小都變化)直接在事件內寫程式碼會很亂
引入fucntion()、函式的基本形式
把JS從標籤裡放入到函式裡,類似css裡的class
變數的使用——別名
定義和呼叫
函式定義:只是告訴系統有這個函式,不會實際執行
函式呼叫:真正執行函式裡的程式碼
關係和區別
getElementById
第一個JS相容性問題
在FF下直接使用ID存在問題
引入document.getElementById()
document.getElementById在任何瀏覽器下均可使用
網頁換膚
土豆網“開燈、關燈”效果
任何標籤都可以加ID,包括link
任何標籤的任何屬性,也都可以修改
HTML裡怎麼寫,JS裡就怎麼寫
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style>
#div1{
width: 100px; height: 200px; background:red;
display: none;
}
</style>
<script>
function show(){
var getId = document.getElementById('div1');
if(getId.style.display == 'block'){
getId.style.display='none';
}else{
getId.style.display='block';
}
}
</script>
<body>
<input type="button" value="顯示/隱藏" onclick="show()" />
<div id="div1">
</div>
<div>
asdf
</div>
</body>
</html>
if判斷
點選按鈕顯示/隱藏Div (彈出選單)
特效實現過程及原理分析
if的基本形式
擴充套件
為a連結新增JS
<a href=“javascript:;”></a>
className的使用
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<!--
作者:[email protected]
時間:2017-11-25
描述:
link:定義文件與外部資源的關係
rel:規定當前文件與被連結文件之間的關係.
href:規定被連結文件的位置
-->
<link id="js002_1" rel="stylesheet" href="css/JS_002_1.css" />
<script>
function setLink01(){
document.getElementById('js002_1').href='css/JS_002_1.css';
}
function setLink02(){
document.getElementById('js002_1').href='css/JS_002_2.css';
}
</script>
<body>
<!--
作者:[email protected]
時間:2017-11-25
描述:
title:滑鼠移到元素上時顯示一段提示文字
-->
<input type="button" value="面板1" onclick="setLink01()" title="面板1" />
<input type="button" value="面板2" onclick="setLink02()" title="面板2" />
</body>
</html>
函式傳參
改變背景顏色
函式傳參:引數就是佔位符
什麼時候用傳參——函式裡定不下來的東西
改變Div的任意樣式
操縱屬性的第二種方式
什麼時候用:要修改的屬性不固定
字串和變數——區別和關係
將屬性名作為引數傳遞
style與className
元素.style.屬性=xxx 是修改行間樣式
之後再修改className不會有效果
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style>
#div1{
width: 200px;
height: 200px;
background: red;
}
</style>
<script>
function show(name, value){
var Gdiv1 = document.getElementById('div1');
/*
* 第一種操作屬性的方法
* Gdiv1.style.name = value;
* 第二種操作屬性的方法 name是字串,所以可以傳入變數
* Gdiv1.style['name'] = value;
*/
Gdiv1.style[name] = value;
}
</script>
<body>
<input type="button" value="變寬" onclick="show('width','400px')" />
<input type="button" value="變高" onclick="show('height','400px')" />
<input type="button" value="變綠" onclick="show('background','green')" />
<div id="div1">
</div>
</body>
</html>
提取行間事件
提取事件
為元素新增事件
事件和其他屬性一樣,可以用JS新增
window.onload的意義
行為、樣式、結構三者分離
獲取一組元素
getElementsByTagName
陣列的使用
裡面的
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
.div1{
border: 1px solid #000000;
width: 200px;
height: 200px;
float: left;
margin-right: 20px;
}
</style>
<script>
/*
* window.onload:在頁面載入完才載入程式碼
*/
window.onload=function(){
var obtn = document.getElementById('btn1');
/*
* 匿名函式
*/
obtn.onclick=function (){
alert('zl');
};
/*
* getElementsByTagName() 方法會使用指定的標籤名返回所有的元素(作為一個節點列表),這些元素是您在使用此方法時所處的元素的後代。
*/
var adiv = document.getElementsByTagName('div');
alert(adiv.length);
for (var i=0; i<adiv.length; i++){
adiv[i].style.background='red';
}
}
</script>
</head>
<body>
<input id="btn1" type="button" value="提交" />
<div class="div1"></div>
<div class="div1"></div>
<div class="div1"></div>
<div class="div1"></div>
</body>
</html>
迴圈
用while引入迴圈的概念
while迴圈語法
自增的意義
迴圈的構成:初始化、條件、語句、自增
for迴圈
用for代替while迴圈
用for迴圈為一組元素新增事件
什麼時候用迴圈——一組元素
例子
全選——checked屬性
反選——for迴圈配合if判斷
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>全選</title>
<script>
window.onload=function(){
var oBtn1 = document.getElementById('btn1');
var oBtn2 = document.getElementById('btn2');
var oBtn3 = document.getElementById('btn3');
var oCheckbox = document.getElementById('div1').getElementsByTagName('input');
oBtn1.onclick = function(){
for(var i=0; i<oCheckbox.length; i++){
oCheckbox[i].checked=true;
}
}
oBtn2.onclick = function(){
for(var i=0; i<oCheckbox.length; i++){
oCheckbox[i].checked=false;
}
}
oBtn3.onclick = function(){
for(var i=0; i<oCheckbox.length; i++){
if(oCheckbox[i].checked == true){
oCheckbox[i].checked=false;
}else{
oCheckbox[i].checked=true;
}
}
}
}
</script>
</head>
<body>
<input id="btn1" type="button" value="全選" />
<input id="btn2" type="button" value="全不選" />
<input id="btn3" type="button" value="反選" />
<br />
<div id="div1">
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
</div>
</body>
</html>
全選的優化
----------------------------------------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>全選</title>
<script>
window.onload=function(){
var oBtn1 = document.getElementById('btn1');
var oBtn3 = document.getElementById('btn3');
var oCheckbox = document.getElementById('div1').getElementsByTagName('input');
oBtn1.onclick = function(){
for(var i=0; i<oCheckbox.length; i++){
if(oBtn1.checked == true){
oCheckbox[i].checked=true;
}else{
oCheckbox[i].checked=false;
}
}
}
oBtn3.onclick = function(){
for(var i=0; i<oCheckbox.length; i++){
if(oCheckbox[i].checked == true){
oCheckbox[i].checked=false;
}else{
oCheckbox[i].checked=true;
}
}
}
}
</script>
</head>
<body>
全選<input id="btn1" type="checkbox" />
<input id="btn3" type="button" value="反選" />
<br />
<div id="div1">
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
<input type="checkbox"><br />
</div>
</body>
</html>
選項卡
按鈕的實現
新增事件
this的使用
先清空所有按鈕,再選中當前按鈕
內容的實現(div)
先隱藏所有Div,再顯示”當前”Div
索引值的使用
什麼時候用索引值——需要知道“第幾個”的時候
html新增index——會被FF過濾
js新增index
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>選項卡</title>
<style>
.cdiv1 {
width: 200px;
height: 200px;
background: #ccc;
border: 1px solid #000;
display: none;
}
#div1 .active {
background: yellow;
}
</style>
<script>
window.onload=function(){
var odiv1 = document.getElementById('div1');
var inputs = odiv1.getElementsByTagName('input');
var divs = odiv1.getElementsByTagName('div');
for(var i=0; i<inputs.length; i++){
/*
* 通過自定義的index來裝i的值。
*/
inputs[i].index=i;
var j = new Array();
inputs[i].onclick=function(){
/*
* this:當前發生事件的元素
* alert(this.value);
*/
/*
* 用來清空active的顏色和div的顯示/隱藏
*/
for(var i=0; i<inputs.length; i++){
inputs[i].className='';
divs[i].style.display='none';
}
this.className='active';
divs[this.index].style.display='block';
}
}
}
</script>
</head>
<body>
<div id="div1">
<input class="active" type="button" value="11">
<input type="button" value="22">
<input type="button" value="33">
<input type="button" value="44">
<div class="cdiv1" style="display: block;">1</div>
<div class="cdiv1">2</div>
<div class="cdiv1">3</div>
<div class="cdiv1">4</div>
</div>
</body>
</html>
JS簡易日曆
程式實現思路
類似選項卡,只是下面只有一個div
innerHTML的使用
陣列的使用
定義:arr=[1,2,3]
使用:arr[0]
字串連線
作用:連線兩個字串
問題:連線中的優先順序
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>JavaScript簡易日曆</title>
<link href="css/zns_style.css" rel="stylesheet" type="text/css" />
<script>
window.onload=function(){
var sum = ['快過年了,大家可以商量著去哪玩吧~',
'精通JavaScript開發課程 - 結課標準 - 有十條標準可讓大家修練成JS高手……',
'HTML5開發課程,讓你熟練掌握移動應用開發技術',
'精通各種DOM類應用,熟練掌握面向物件程式設計思想(OOP)、熟悉JS面向物件開發方式',
'熟練掌握AJAX技術及相關應用(例如:新浪微博級應用)',
'可以獨立寫出類似jQuery的小型庫(支援各類選擇符、事件類、DOM、自定義動畫animate、AJAX……)',
'精通JS運動特效技術,能完整實現各類網站所有動畫特效,如 智慧課堂 官網',
'掌握JS除錯及優化技術、能相容所有瀏覽器',
'精通JS事件物件及事件的工作機制,並能完成各類跨平臺應用模組的開發',
'能獨立開發表現和效能都很優秀的RIA應用',
'瞭解後臺程式設計的相關知識,能夠和後臺工程師配合完成大型互動應用',
'熟悉正則表示式的編寫、應用及高階表單驗證技術'];
var oTab = document.getElementById('tab');
var oLis = oTab.getElementsByTagName('li');
var oDiv = oTab.getElementsByTagName('div')[0];
for(var i=0; i<oLis.length; i++){
oLis[i].index = i;
oLis[i].onmousemove=function(){
for(var i=0; i<oLis.length; i++){
oLis[i].className='';
}
this.className='active';
/*
* innerHTML:獲取物件的內容 或 向物件插入內容
* oDiv.innerHTML : 獲取物件的內容
* oDiv.innerHTML = ‘’: 向物件插入內容
*/
oDiv.innerHTML = '<h2>'+(this.index+1)+'月活動</h2><p>'+sum[this.index]+'</p>';
}
}
}
</script>
</head>
<body>
<div id="tab" class="calendar">
<ul>
<li class="active"><h2>1</h2><p>JAN</p></li>
<li><h2>2</h2><p>FER</p></li>
<li><h2>3</h2><p>MAR</p></li>
<li><h2>4</h2><p>APR</p></li>
<li><h2>5</h2><p>MAY</p></li>
<li><h2>6</h2><p>JUN</p></li>
<li><h2>7</h2><p>JUL</p></li>
<li><h2>8</h2><p>AUG</p></li>
<li><h2>9</h2><p>SEP</p></li>
<li><h2>10</h2><p>OCT</p></li>
<li><h2>11</h2><p>NOV</p></li>
<li><h2>12</h2><p>DEC</p></li>
</ul>
<div class="text">
<h2>1月活動</h2>
<p>快過年了,大家可以商量著去哪玩吧~</p>
</div>
</div>
</body>
</html>
CSS
@charset "utf-8";
/* CSS Document */
* { padding: 0; margin: 0; }
li { list-style: none; }
body { background: #f6f9fc; font-family: arial; }
.calendar { width: 210px; margin: 50px auto 0; padding: 10px 10px 20px 20px; background: #eae9e9; }
.calendar ul { width: 210px; overflow: hidden; padding-bottom: 10px; }
.calendar li { float: left; width: 58px; height: 54px; margin: 10px 10px 0 0; border: 1px solid #fff; background: #424242; color: #fff; text-align: center; cursor: pointer; }
.calendar li h2 { font-size: 20px; padding-top: 5px; }
.calendar li p { fo