2017-3-12 JS 學習筆記
函式的引數
//函式定義
function sum(a,b){
//函式體
console.log(a + b);
}
- 函式呼叫,函式必須呼叫,
函式名稱() - 函式的引數
- 一種實際引數;簡稱實參
- 一種形式引數,簡稱形參
- 函式呼叫的時候傳入的引數叫做實參,定義的時候叫做形參,一般函式有幾個形參就有幾個實參
字典的使用
- 字典的建立
通過鍵值對建立 - 字典中的資料一般沒有順序
- 字典中的資料一般不能重複
//第一種寫法
var myDict = {
name:'張三',
age:16;
sex:'人妖'
}
//第二種寫法
var myDict = {
"name":'張三',
"age":16;
"sex":'人妖'
}
//第三種寫法
var myDict = {
'name':'張三',
'age':16;
'sex':'人妖'
}
訪問字典中的資料
- 訪問字典可以通過 key 值訪問
字典名稱.key;
字典名稱[key];
console.log(myDict.name);
console.log(myDict.age);
console.log(myDict.sex);
for in 的使用
- 遍歷字典
for(var key in myDict){
//在for in 迴圈中要使用 []來訪問資料
console.log(myDict[key]);
}
字典設定樣式
//獲取 box
var box = document.getElementById('box');
//設定屬性字典
var attrDict = {
width:'100px'
height:'100px'
background:'red'
}
//給盒子設定屬性,因為盒子的屬性一般比較多,所以我們通過遍歷來設定
for(var key in attrDict){
box.style[key] = attrDict[key];
}
動態新增節點
- 傳送網路請求,請求資料,當資料返回來後,根據資料動態新增節點
- 返回的格式是 json,json 包含了陣列和字典
- 一般 json 是陣列和字典的組合,一般外層是陣列,裡面是字典
- 陣列用來確定個數,字典用來設定每一個盒子中的屬性值
//設定一個 json 資料
var jsonData = [{name:'李四',age:4,email:'161.com',phone:'1232423422'},{name:'李四',age:4,email:'161.com',phone:'1232423422'},{name:'李四',age:4,email:'161.com',phone:'1232423422'},{name:'李四',age:4,email:'161.com',phone:'1232423422'}];
//根據資料設定節點
//根據陣列長度確定盒子的個數
var oBody = document.getElementById('div');
box.className = 'box';
oBody.appendChild(box);
var oul = document.createElement('ul');
box.appendChild(oul);
//每個字典中有多少個 key 就新增多少個 li
for(var key in jsonData[i]){
//建立li
var oli = documentcreateElement('li');
//設定內容
oli.innerHTML = key +':'+jsonData[i][key];
//新增 li
oul.appendChile(oli);
}
屬性設定
- 設定盒子的屬性
box.setAttribute('title','我是盒子');
- 獲取盒子的屬性
box.getAttribute('title');
- 刪除盒子屬性
box.removeAttribute('title');
抽取的常見方法
抽取函式的原則
把相同的東西放在一起形成一個函式,然後讓不同的東西作為引數抽取通過 id 獲取標籤的方法
function $(tagId){
return document.getElementById(tagId);
}
var btn1 = $('btn1');
- 通過標籤名稱獲取標籤
function getSymByTagName(dom,tagName){
return dom.getElementsByTagName(tagName);
}
- 抽取遍歷函式
each 函式
function each(doms,fn){
for(var i = 0; i < doms.length;i++){
//做事情,呼叫函式
//可能需要陣列裡的每一個元素,以及對應的索引
fn(doms[i],i);
}
}
//獲取 box
var box = $('box');
//獲取 box 下面所有的按鈕
var btns = getSymByTagName(box,'button');
//遍歷按鈕,輸出每一個按鈕的索引
for(var i = 0; i < btns.length;++i){
alert(i);
alert(btns[i]);
//每次遍歷節點的時候,做的事情不一樣,作為引數,函式作為引數, fn
//每次遍歷的節點集合也不一樣,doms
}
each(btns,function(a,b){
alert(b);
})
- 應用字典獲取對應標籤
var box = myFn.$('box');
var btns = myFn.getSymByTagName(box,'button');
myFn.each(btns,function(a,b){
//輸出 btns
alert(a);
})
事件物件的認識
- 事件物件,就是當我們的事件觸發的時候,會把事件相關的屬性以及其他的東西打包成一個包,一般這個包以形式引數傳遞給事件指令,一般這個形式引數是 event
box.onclick = function(event){
//獲取點選的位置舉例瀏覽器的左上角的位置,clientX\clientY 只是數值,如果使用需要加 "px"
//target 表示事件的觸發者,一般是事件源
var targetX = event.clientX;
var targetY = event.clientY;
}
最大事件源
- 獲取最大事件源,最大事件源一般是 document
//點選最大的事件源觸發對應的事件
document.onclick = function(event){
var myX = event.clientX;
var myY = event.clientY;
alert(myX);
}
- ie 瀏覽器不識別 event 事件物件,但是識別 window.event,所以我們要相容
//函式內部新增 邏輯或
var event = event || window.event;
自定義選單欄的實現
//獲取盒子
var box = document.getElementById('box');
//觸發對應的彈出選單事件
document.oncontextmenu = function(event){
//獲取事件物件
var event = event || window.event;
//組織預設彈出選單
//在事件指令的最後返回 fales
// 讓自定義的選單出來
box.style.display = 'block';
//確定 box 的位置
box.style.left = event.clientX + 'px';
box.style.top = event.clientY + ‘px’;
return false;
}
滑鼠跟隨的實現
/*0.獲取span*/
var oSpan = document.getElementById('oSpan');
/*1.觸發滑鼠的移動事件*/
var timer = null;
var currentX = 0;//表示初始值
var currentY = 0;//表示初始值
document.onmousemove = function(event){
/*1.0獲取對應的事件物件,從而獲取目標值*/
var event = event||window.event;
var targetX = event.clientX;
var targetY = event.clientY;
clearInterval(timer);
/*2.讓對應的小天使採用緩動動畫移動到最終的位置*/
timer = setInterval(function(){
currentX += (targetX - currentX)*0.2;
currentY += +(targetY - currentY)*0.2;
/*2.1設定位置*/
oSpan.style.left = currentX +'px';
oSpan.style.top = currentY +'px';
},100)
}
滑鼠拖拽的實現
/*1.讓對應的盒子觸發滑鼠點選下去的事件,在這個事件中觸發最大事件源的移動事件*/
var box = document.getElementById('box');
box.onmousedown = function(event){
/*不同事件中的事件的物件是不一樣的*/
/*0.獲取事件物件*/
var event = event ||window.event;
/*1.0獲取點選的點距離box盒子邊框的間距*/
/*distanceX = 點選下去的點的座標的值 - 盒子距離瀏覽器的邊框的間距*/
var distanceX = event.clientX - box.offsetLeft;
var distanceY = event.clientY - box.offsetTop;
/*1.1觸發最大事件源的移動事件*/
document.onmousemove = function(event){
/*1.11獲取事件物件*/
var event = event ||window.event;
/*1.12設定box位置*/
box.style.left = event.clientX - distanceX+ 'px';
box.style.top = event.clientY - distanceY+'px';
}
/*1.2當最大事件源滑鼠抬起的時候,我們要清空移動事件*/
document.onmouseup = function(){
document.onmousemove = null;
}
}
offset 屬性的基本認識
//獲取標籤
var box = document.getElementById('box');
//獲取標籤對應 offsetW 和 offsetH
//offsetW = width + padding + border
//獲取的時候不需要 style
//獲取的取出的是數值,不是字元
//一般 offset 屬性只能取值,不能設定值
//等號左邊表示設定值,右邊表示取值
var offsetW = box.offsetWidth;
var offsetH = box.offsetHeight;
- offsetparent
噹噹前的標籤需要設定 offsetLeft 的時候,如果他相對於他的父標籤有定位,那麼他的父標籤就是它的 offsetParent, 如果沒有就找他的爺爺,如果爺爺也沒有,就一直往上找,直到都沒有,body 就是 offsetParent
相關文章
- js學習筆記JS筆記
- NodeJS學習筆記NodeJS筆記
- angularjs學習筆記AngularJS筆記
- vue.js 學習筆記Vue.js筆記
- Angularjs學習筆記指令AngularJS筆記
- RxJs SwitchMap 學習筆記JS筆記
- React學習筆記-JSXReact筆記JS
- Vue.js學習筆記Vue.js筆記
- JS學習筆記之this指向JS筆記
- JS陣列學習筆記JS陣列筆記
- Node.js學習筆記Node.js筆記
- JSP標記學習筆記 (轉)JS筆記
- Nodejs學習筆記-01 eventsNodeJS筆記
- Node.js學習筆記(一)Node.js筆記
- Node.js學習筆記1Node.js筆記
- <node.js學習筆記(2)>Node.js筆記
- <node.js學習筆記(1)>Node.js筆記
- 前端學習筆記 - nuxt.js前端筆記UXJS
- Json-path學習筆記JSON筆記
- ThreeJs學習筆記——渲染(render)分析JS筆記
- JS開發步驟學習筆記JS筆記
- js純函式學習筆記(一)JS函式筆記
- JSTL Tag學習筆記之<fn: />JS筆記
- 《Node.js實戰》學習筆記Node.js筆記
- RequireJs學習筆記之Define a ModuleUIJS筆記
- JavaScript學習筆記1: JS引入方法JavaScript筆記JS
- numpy的學習筆記\pandas學習筆記筆記
- KnockoutJS學習筆記14:KonckoutJS click繫結JS筆記
- AngularJS學習筆記1——什麼是AngularJS?AngularJS筆記
- AngularJS學習筆記3——AngularJS的工作原理AngularJS筆記
- [前端學習]js特效部分學習筆記,第三天前端JS特效筆記
- nodejs的socket.io學習筆記NodeJS筆記
- com.alibaba.fastjson學習筆記ASTJSON筆記
- js高階 物件導向 學習筆記JS物件筆記
- Rxjs TakeUntil 運算子的學習筆記JS筆記
- Node.js學習筆記----day04Node.js筆記
- Android菜鳥學習js筆記一AndroidJS筆記
- 《AngularJs權威指南》學習筆記---指令AngularJS筆記