1 //跨瀏覽器添加事件 2 function addEvent(obj,type,fn){ 3 if(obj.addEventListener){ 4 obj.addEventListener(type,fn,false); 5 }else if(obj.attachEvent){//IE 6 obj.attchEvent('on'+type,fn); 7 } 8 }
1 //跨瀏覽器添加事件 2 function addEvent(obj,type,fn){ 3 if(obj.addEventListener){ 4 obj.addEventListener(type,fn,false); 5 }else if(obj.attachEvent){//IE 6 obj.attchEvent('on'+type,fn); 7 } 8 }
1 //跨瀏覽器阻止默認行爲 2 function preDef(ev){ 3 var e = ev || window.event; 4 if(e.preventDefault){ 5 e.preventDefault(); 6 }else{ 7 e.returnValue =false; 8 } 9 }
1 //跨瀏覽器獲取目標對象 2 function getTarget(ev){ 3 if(ev.target){//w3c 4 return ev.target; 5 }else if(window.event.srcElement){//IE 6 return window.event.srcElement; 7 } 8 }
1 //跨瀏覽器獲取滾動條位置,sp == scroll position 2 function getSP(){ 3 return{ 4 top: document.documentElement.scrollTop || document.body.scrollTop, 5 left : document.documentElement.scrollLeft || document.body.scrollLeft; 6 } 7 }
1 //跨瀏覽器獲取可視窗口大小 2 function getWindow () { 3 if(typeof window.innerWidth !='undefined') { 4 return{ 5 width : window.innerWidth, 6 height : window.innerHeight 7 } 8 9 } else{ 10 return { 11 width : document.documentElement.clientWidth, 12 height : document.documentElement.clientHeight 13 } 14 } 15 },
1 <script type = 'text/javascript'> 2 3 function Person(name , age){ 4 this.name = name ; 5 this.age = age ; 6 this.say = function (){ 7 return "name : "+ this.name + " age: "+this.age ; 8 } ; 9 } 10 11 var o = new Object() ;//能夠簡化爲Object() 12 Person.call(o , "zhangsan" , 20) ; 13 console.log(o.say() );//name : zhangsan age: 20 14 15 </script>
異步加載也叫非阻塞模式加載,瀏覽器在下載js
的同時,同時還會執行後續的頁面處理。
在script
標籤內,用js
建立一個script
元素並插入到document
中,這種就是異步加載js
文件了:javascript
1 (function() { 2 var s = document.createElement('script'); 3 s.type = 'text/javascript'; 4 s.async = true; 5 s.src = 'http://yourdomain.com/script.js'; 6 var x = document.getElementsByTagName('script')[0]; 7 x.parentNode.insertBefore(s, x); 8 })();
日常默認用的都是同步加載。如:php
<script src="http://yourdomain.com/script.js"></script>
同步模式又稱阻塞模式,會阻止流覽器的後續處理。中止了後續的文件的解析,執行,如圖像的渲染。瀏覽器之因此會採用同步模式,是由於加載的js
文件中有對dom
的操做,重定向,輸出document
等默認行爲,因此同步纔是最安全的。
一般會把要加載的js
放到body
結束標籤以前,使得js
可在頁面最後加載,儘可能減小阻塞頁面的渲染。這樣能夠先讓頁面顯示出來。css
同步加載流程是瀑布模型,異步加載流程是併發模型。html
1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 5 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/> 6 <meta name="auther" content="fq" /> 7 <title>獲取鼠標座標</title> 8 </head> 9 <body> 10 <script type="text/javascript"> 11 function mousePosition(ev){ 12 if(ev.pageX || ev.pageY){ 13 return {x:ev.pageX, y:ev.pageY}; 14 } 15 return { 16 x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, 17 y:ev.clientY + document.body.scrollTop - document.body.clientTop 18 }; 19 } 20 function mouseMove(ev){ 21 ev = ev || window.event; 22 var mousePos = mousePosition(ev); 23 document.getElementById('xxx').value = mousePos.x; 24 document.getElementById('yyy').value = mousePos.y; 25 } 26 document.onmousemove = mouseMove; 27 </script> 28 X:<input id="xxx" type="text" /> Y:<input id="yyy" type="text" /> 29 </body> 30 </html>
註釋:
1.documentElement
屬性可返回文檔的根節點。
2.scrollTop()
爲滾動條向下移動的距離
3.document.documentElement.scrollTop
指的是滾動條的垂直座標
4.document.documentElement.clientHeight
指的是瀏覽器可見區域高度java
DTD已聲明的狀況下:python
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
若是在頁面中添加這行標記的話nginx
document.body.clientWidth ==> BODY對象寬度 document.body.clientHeight ==> BODY對象高度 document.documentElement.clientWidth ==> 可見區域寬度 document.documentElement.clientHeight ==> 可見區域高度
document.documentElement.scrollHeight ==> 瀏覽器全部內容高度 document.body.scrollHeight ==> 瀏覽器全部內容高度 document.documentElement.scrollTop ==> 瀏覽器滾動部分高度 document.body.scrollTop ==>始終爲0 document.documentElement.clientHeight ==>瀏覽器可視部分高度 document.body.clientHeight ==> 瀏覽器全部內容高度
document.documentElement.scrollHeight ==> 瀏覽器全部內容高度 document.body.scrollHeight ==> 瀏覽器全部內容高度 document.documentElement.scrollTop==> 始終爲0 document.body.scrollTop==>瀏覽器滾動部分高度 document.documentElement.clientHeight ==> 瀏覽器可視部分高度 document.body.clientHeight ==> 瀏覽器全部內容高度
瀏覽器全部內容高度
即瀏覽器整個框架的高度,包括滾動條捲去部分+可視部分+底部隱藏部分的高度總和
chrome
瀏覽器滾動部分高度
即滾動條捲去部分高度便可視頂端距離整個對象頂端的高度。數組
綜上瀏覽器
一、document.documentElement.scrollTop
和document.body.scrollTop
始終有一個爲0,因此能夠用這兩個的和來求scrollTop
二、scrollHeight、clientHeight
在DTD
已聲明的狀況下用documentElement
,未聲明的狀況下用body
clientHeight 在IE和FF下,該屬性沒什麼差異,都是指瀏覽器的可視區域,即除去瀏覽器的那些工具欄狀態欄剩下的頁面展現空間的高度。
PageX:
鼠標在頁面上的位置,從頁面左上角開始,便是以頁面爲參考點,不隨滑動條移動而變化
clientX:
鼠標在頁面上可視區域的位置,從瀏覽器可視區域左上角開始,便是以瀏覽器滑動條此刻的滑動到的位置爲參考點,隨滑動條移動 而變化.
但是悲劇的是,PageX
只有FF特有,IE
則沒有這個,因此在IE下使用這個:
PageY=clientY+scrollTop-clientTop;
(只討論Y軸,X軸同理,下同)
scrollTop
表明的是被瀏覽器滑動條滾過的長度
offsetX:IE特有,鼠標相比較於觸發事件的元素的位置,以元素盒子模型的內容區域的左上角爲參考點,若是有
boder`,可能出現負值
只有clientX
和screenX
皆大歡喜是W3C標準.其餘的,都糾結了.
最給力的是,chrome
和safari
一條龍通殺!徹底支持全部屬性
1 <!doctype html> 2 <html lang="zn-CN"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> 5 <title></title> 6 <style type="text/css"> 7 #login{ 8 height: 100px; 9 width: 100px; 10 border: 1px solid black; 11 position: relative; 12 top:200px; 13 left: 200px; 14 background: red; 15 } 16 </style> 17 </head> 18 <body> 19 <div id="login"></div> 20 <script type="text/javascript"> 21 var oDiv = document.getElementById("login"); 22 oDiv.onmousedown = function(e){ 23 var e = e || window.event;//window.event兼容IE,當事件發生時有效 24 25 var diffX = e.clientX - oDiv.offsetLeft;//獲取鼠標點擊的位置到所選對象的邊框的水平距離 26 var diffY = e.clientY - oDiv.offsetTop; 27 28 document.onmousemove = function(e){ //需設爲document對象才能做用於整個文檔 29 var e = e||window.event; 30 oDiv.style.left = e.clientX - diffX + 'px';//style.left表示所選對象的邊框到瀏覽器左側距離 31 oDiv.style.top = e.clientY -diffY + 'px'; 32 }; 33 document.onmouseup = function(){ 34 document.onmousemove = null;//清除鼠標釋放時的對象移動方法 35 document.onmouseup = null; 36 } 37 } 38 </script> 39 </body> 40 </html>
offsetTop
返回的是數字,而 style.top
返回的是字符串,除了數字外還帶有單位:px
。
1 var img = $("#img_id"); // Get my img elem 2 var pic_real_width, pic_real_height; 3 $("<img/>") // Make in memory copy of image to avoid css issues 4 .attr("src", $(img).attr("src")) 5 .load(function() { 6 pic_real_width = this.width; // Note: $(this).width() will not 7 pic_real_height = this.height; // work for in memory images. 8 });
1 <script> 2 //循環遍歷數組 3 var animals = ["cat",'dog','human','whale','seal']; 4 var animalString = ""; 5 for(var i = 0;i<animals.length;i++){ 6 animalString += animals[i] + " "; 7 } 8 alert(animalString); //輸出數組裏的每一個項 9 </script>
1 <script> 2 var arr=[[0,0,0,0,0,0],[0,0,1,0,0,0],[0,2,0,3,0,0],[0,0,0,0,0,0]]; 3 for(var i=0;i<arr.length;i++){ 4 //遍歷每個具體的值 5 for(var j=0;j<arr[i].length;j++){ 6 document.writeln(arr[i][j]+" "); 7 } 8 document.writeln("<br/>"); 9 } 10 </script>
有兩種方法能夠解決:一是提交以後,馬上禁用點擊按鈕;第二種就是提交以後取消後續的表單提交操做。
document.getElementById("btn").disabled = true;//第一次提交後,將按鈕禁用
這種方式只能用於經過提交按鈕防止重複提交,還可使用以下方式:
var flag = false;//設置一個監聽變量 if(flag ==true)return;//退出事件 flag = true;//表示提交過一次了
1 <script type="text/javascript"> 2 var test = 'Welcome to my blog!'; 3 var value = 'blog'; 4 var subValue = test.indexOf(value); 5 console.log(subValue);//14,子字符串的索引 6 </script>
數字能夠是一個直接量,也能夠是一個對象,可是Math對象不一樣,他沒有構造函數,而且其全部的屬性和方法都是直接經過這個對象來訪問的
var num = 255; console.log(num.toString(16));//ff
js
中,十進制數字以0x
開頭,八進制數字老是以0
開頭
1 <script type="text/javascript"> 2 function randomVal(val){ 3 return Math.floor(Math.random()*(val + 1)); 4 } 5 6 function randomColor(){ 7 return 'rgb(' + randomVal(255) + ',' + randomVal(255) + ',' + randomVal(255) + ')'; 8 } 9 </script>
目前,全部瀏覽器都支持RGB
表示法和十六進制表示法,除了IE7
,它只支持十六進制表示法
var rad = degrees*(Math.PI/180); var degrees = rad*(180/Math.PI);
1 <script type="text/javascript"> 2 var arrayLength = 3;//設置數組長度 3 4 //建立數組 5 var multiArray = new Array(arrayLength); 6 for(var i =0;i<multiArray.length;i++){ 7 multiArray[i] = new Array(arrayLength); 8 } 9 10 //給第一個數組索引添加項 11 multiArray[0][0] = 'phone'; 12 multiArray[0][1] = 'book'; 13 multiArray[0][2] = 'TV'; 14 15 //第二個 16 multiArray[1][0] = 2; 17 multiArray[1][1] = 1; 18 multiArray[1][2] = 98; 19 20 //第三個 21 multiArray[2][0] = ['java','python']; 22 multiArray[2][1] = ['js','C++']; 23 multiArray[2][2] = ['Haskell','php']; 24 </script>
1 <script type="text/javascript"> 2 var fruits = ['banana','apple','orange','strawberry']; 3 console.log(fruits.sort());//Array [ "apple", "banana", "orange", "strawberry" ] 4 5 var num = [32,43,2,5,-23,0,4]; 6 console.log(num.sort());//Array [ -23, 0, 2, 32, 4, 43, 5 ] 7 </script>
Array
對象的sort
方法會按照字母順序來排序數組元素。對於數字,是按照字符編碼的順序進行排序
1 function compare(a,b){ 2 return a-b; 3 } 4 var num = [32,43,2,5,-23,0,4]; 5 console.log(num.sort(compare));//Array [ -23, 0, 2, 4, 5, 32, 43 ]
1 var date1=new Date(); //開始時間,當前時間 2 3 var date2=new Date(); //結束時間,需傳入時間參數 4 var date3=date2.getTime()-date1.getTime(); //時間差的毫秒數 5 6 //計算出相差天數 7 var days=Math.floor(date3/(24*3600*1000)); 8 9 //計算出小時數 10 var leave1=date3%(24*3600*1000); //計算天數後剩餘的毫秒數 11 var hours=Math.floor(leave1/(3600*1000)); 12 //計算相差分鐘數 13 var leave2=leave1%(3600*1000); //計算小時數後剩餘的毫秒數 14 var minutes=Math.floor(leave2/(60*1000)); 15 16 17 //計算相差秒數 18 var leave3=leave2%(60*1000); //計算分鐘數後剩餘的毫秒數 19 var seconds=Math.round(leave3/1000); 20 21 console.log(" 相差 "+days+"天 "+hours+"小時 "+minutes+" 分鐘"+seconds+" 秒");
1 <script type="text/javascript"> 2 function cc(s){ 3 if(/[^0-9\.]/.test(s)) return "invalid value"; 4 s=s.replace(/^(\d*)$/,"$1."); 5 s=(s+"00").replace(/(\d*\.\d\d)\d*/,"$1"); 6 s=s.replace(".",","); 7 var re=/(\d)(\d{3},)/; 8 while(re.test(s)) 9 s=s.replace(re,"$1,$2"); 10 s=s.replace(/,(\d\d)$/,".$1"); 11 return "¥" + s.replace(/^\./,"0.") 12 } 13 </script> 14 <input onchange="this.value=cc(this.value)" />
1 function fn(input) { 2 input = parseInt(input,10); 3 return isPrime(input) ? 'is prime' : 'not prime'; 4 } 5 6 function isPrime(input) { 7 if (input < 2) { 8 return false; 9 } else { 10 for (var i = 2; i <= Math.sqrt(input); i++) { 11 if (input % i == 0) { 12 return false; 13 } 14 } 15 } 16 return true; 17 }
1 //js實現一個函數,來判斷一個字符串出現次數最多的字符,並統計這個次數 2 3 function countStr(str){ 4 var obj = {}; 5 for(var i = 0, l = str.length,k; i < l ;i++){ 6 k = str.charAt(i); 7 if(obj[k]){ 8 obj[k]++; 9 }else{ 10 obj[k] = 1; 11 } 12 } 13 var m = 0,i=null; 14 for(var k in obj){ 15 if(obj[k] > m){ 16 m = obj[k]; 17 i = k; 18 } 19 } 20 return i + ':' + m; 21 }