JavaScript 經(jīng)典實(shí)例日常收集整理(常用經(jīng)典)
來(lái)源:易賢網(wǎng) 閱讀:905 次 日期:2016-07-14 17:09:16
溫馨提示:易賢網(wǎng)小編為您整理了“JavaScript 經(jīng)典實(shí)例日常收集整理(常用經(jīng)典)”,方便廣大網(wǎng)友查閱!

本文是小編日常收集整理些js經(jīng)典實(shí)例,特此分享到腳本之家平臺(tái)供大家參考!

跨瀏覽器添加事件

//跨瀏覽器添加事件

function addEvent(obj,type,fn){

if(obj.addEventListener){

obj.addEventListener(type,fn,false);

}else if(obj.attachEvent){//IE

obj.attchEvent('on'+type,fn);

}

}

跨瀏覽器移除事件

//跨瀏覽器移除事件

function removeEvent(obj,type,fn){

if(obj.removeEventListener){

obj.removeEventListener(type,fn,false);

}else if(obj.detachEvent){//兼容IE

obj.detachEvent('on'+type,fn);

}

}

跨瀏覽器阻止默認(rèn)行為

//跨瀏覽器阻止默認(rèn)行為

function preDef(ev){

var e = ev || window.event;

if(e.preventDefault){

e.preventDefault();

}else{

e.returnValue =false;

}

}

跨瀏覽器獲取目標(biāo)對(duì)象

//跨瀏覽器獲取目標(biāo)對(duì)象

function getTarget(ev){

if(ev.target){//w3c

return ev.target;

}else if(window.event.srcElement){//IE

return window.event.srcElement;

}

}

跨瀏覽器獲取滾動(dòng)條位置

//跨瀏覽器獲取滾動(dòng)條位置,sp == scroll position

function getSP(){

return{

top: document.documentElement.scrollTop || document.body.scrollTop,

left : document.documentElement.scrollLeft || document.body.scrollLeft;

}

}

跨瀏覽器獲取可視窗口大小

//跨瀏覽器獲取可視窗口大小

function getWindow () {

if(typeof window.innerWidth !='undefined') {

return{

width : window.innerWidth,

height : window.innerHeight

}

} else{

return {

width : document.documentElement.clientWidth,

height : document.documentElement.clientHeight

}

}

},

js 對(duì)象冒充

<script type = 'text/javascript'>

function Person(name , age){

this.name = name ;

this.age = age ;

this.say = function (){

return "name : "+ this.name + " age: "+this.age ;

} ;

}

var o = new Object() ;//可以簡(jiǎn)化為Object()

Person.call(o , "zhangsan" , 20) ;

console.log(o.say() );//name : zhangsan age: 20

</script>

js 異步加載和同步加載

異步加載也叫非阻塞模式加載,瀏覽器在下載js的同時(shí),同時(shí)還會(huì)執(zhí)行后續(xù)的頁(yè)面處理。

在script標(biāo)簽內(nèi),用js創(chuàng)建一個(gè)script元素并插入到document中,這種就是異步加載js文件了:

(function() {

var s = document.createElement('script');

s.type = 'text/javascript';

s.async = true;

s.src = 'http://yourdomain.com/script.js';

var x = document.getElementsByTagName('script')[0];

x.parentNode.insertBefore(s, x);

})();

同步加載

平常默認(rèn)用的都是同步加載。如:

<script src="http://yourdomain.com/script.js"></script>

同步模式又稱阻塞模式,會(huì)阻止流覽器的后續(xù)處理。停止了后續(xù)的文件的解析,執(zhí)行,如圖像的渲染。瀏覽器之所以會(huì)采用同步模式,是因?yàn)榧虞d的js文件中有對(duì)dom的操作,重定向,輸出document等默認(rèn)行為,所以同步才是最安全的。

通常會(huì)把要加載的js放到body結(jié)束標(biāo)簽之前,使得js可在頁(yè)面最后加載,盡量減少阻塞頁(yè)面的渲染。這樣可以先讓頁(yè)面顯示出來(lái)。

同步加載流程是瀑布模型,異步加載流程是并發(fā)模型。

js獲取屏幕坐標(biāo)

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>

<meta name="auther" content="fq" />

<title>獲取鼠標(biāo)坐標(biāo)</title>

</head>

<body>

<script type="text/javascript">

function mousePosition(ev){

if(ev.pageX || ev.pageY){

return {x:ev.pageX, y:ev.pageY};

}

return {

x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,

y:ev.clientY + document.body.scrollTop - document.body.clientTop

};

}

function mouseMove(ev){

ev = ev || window.event;

var mousePos = mousePosition(ev);

document.getElementById('xxx').value = mousePos.x;

document.getElementById('yyy').value = mousePos.y;

}

document.onmousemove = mouseMove;

</script>

X:<input id="xxx" type="text" /> Y:<input id="yyy" type="text" />

</body>

</html>

注釋:

1.documentElement 屬性可返回文檔的根節(jié)點(diǎn)。

2.scrollTop() 為滾動(dòng)條向下移動(dòng)的距離

3.document.documentElement.scrollTop 指的是滾動(dòng)條的垂直坐標(biāo)

4.document.documentElement.clientHeight 指的是瀏覽器可見(jiàn)區(qū)域高度

--------------------------------------------------------------------------------

DTD已聲明的情況下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

如果在頁(yè)面中添加這行標(biāo)記的話

IE

document.body.clientWidth ==> BODY對(duì)象寬度

document.body.clientHeight ==> BODY對(duì)象高度

document.documentElement.clientWidth ==> 可見(jiàn)區(qū)域?qū)挾?/P>

document.documentElement.clientHeight ==> 可見(jiàn)區(qū)域高度

Firefox

document.documentElement.scrollHeight ==> 瀏覽器所有內(nèi)容高度

document.body.scrollHeight ==> 瀏覽器所有內(nèi)容高度

document.documentElement.scrollTop ==> 瀏覽器滾動(dòng)部分高度

document.body.scrollTop ==>始終為0

document.documentElement.clientHeight ==>瀏覽器可視部分高度

document.body.clientHeight ==> 瀏覽器所有內(nèi)容高度

Chrome

document.documentElement.scrollHeight ==> 瀏覽器所有內(nèi)容高度

document.body.scrollHeight ==> 瀏覽器所有內(nèi)容高度

document.documentElement.scrollTop==> 始終為0

document.body.scrollTop==>瀏覽器滾動(dòng)部分高度

document.documentElement.clientHeight ==> 瀏覽器可視部分高度

document.body.clientHeight ==> 瀏覽器所有內(nèi)容高度

瀏覽器所有內(nèi)容高度即瀏覽器整個(gè)框架的高度,包括滾動(dòng)條卷去部分+可視部分+底部隱藏部分的高度總和

瀏覽器滾動(dòng)部分高度即滾動(dòng)條卷去部分高度即可視頂端距離整個(gè)對(duì)象頂端的高度。

綜上

1、document.documentElement.scrollTop和document.body.scrollTop始終有一個(gè)為0,所以可以用這兩個(gè)的和來(lái)求scrollTop

2、scrollHeight、clientHeight 在DTD已聲明的情況下用documentElement,未聲明的情況下用body

clientHeight

在IE和FF下,該屬性沒(méi)什么差別,都是指瀏覽器的可視區(qū)域,即除去瀏覽器的那些工具欄狀態(tài)欄剩下的頁(yè)面展示空間的高度。

PageX和clientX

PageX:鼠標(biāo)在頁(yè)面上的位置,從頁(yè)面左上角開(kāi)始,即是以頁(yè)面為參考點(diǎn),不隨滑動(dòng)條移動(dòng)而變化

clientX:鼠標(biāo)在頁(yè)面上可視區(qū)域的位置,從瀏覽器可視區(qū)域左上角開(kāi)始,即是以瀏覽器滑動(dòng)條此刻的滑動(dòng)到的位置為參考點(diǎn),隨滑動(dòng)條移動(dòng) 而變化.

可是悲劇的是,PageX只有FF特有,IE則沒(méi)有這個(gè),所以在IE下使用這個(gè):

PageY=clientY+scrollTop-clientTop;(只討論Y軸,X軸同理,下同)

scrollTop代表的是被瀏覽器滑動(dòng)條滾過(guò)的長(zhǎng)度

offsetX:IE特有,鼠標(biāo)相比較于觸發(fā)事件的元素的位置,以元素盒子模型的內(nèi)容區(qū)域的左上角為參考點(diǎn),如果有boder`,可能出現(xiàn)負(fù)值

只有clientX和screenX 皆大歡喜是W3C標(biāo)準(zhǔn).其他的,都糾結(jié)了.

最給力的是,chrome和safari一條龍通殺!完全支持所有屬性

名單

js拖拽效果

<!doctype html>

<html lang="zn-CN">

<head>

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />

<title></title>

<style type="text/css">

#login{

height: 100px;

width: 100px;

border: 1px solid black;

position: relative;

top:200px;

left: 200px;

background: red;

}

</style>

</head>

<body>

<div id="login"></div>

<script type="text/javascript">

var oDiv = document.getElementById("login");

oDiv.onmousedown = function(e){

var e = e || window.event;//window.event兼容IE,當(dāng)事件發(fā)生時(shí)有效

var diffX = e.clientX - oDiv.offsetLeft;//獲取鼠標(biāo)點(diǎn)擊的位置到所選對(duì)象的邊框的水平距離

var diffY = e.clientY - oDiv.offsetTop;

document.onmousemove = function(e){ //需設(shè)為document對(duì)象才能作用于整個(gè)文檔

var e = e||window.event;

oDiv.style.left = e.clientX - diffX + 'px';//style.left表示所選對(duì)象的邊框到瀏覽器左側(cè)距離

oDiv.style.top = e.clientY -diffY + 'px';

};

document.onmouseup = function(){

document.onmousemove = null;//清除鼠標(biāo)釋放時(shí)的對(duì)象移動(dòng)方法

document.onmouseup = null;

}

}

</script>

</body>

</html>

offsetTop 返回的是數(shù)字,而 style.top 返回的是字符串,除了數(shù)字外還帶有單位:px。

js獲取圖片原始大小尺寸

var img = $("#img_id"); // Get my img elem

var pic_real_width, pic_real_height;

$("<img/>") // Make in memory copy of image to avoid css issues

.attr("src", $(img).attr("src"))

.load(function() {

pic_real_width = this.width; // Note: $(this).width() will not

pic_real_height = this.height; // work for in memory images.

});

js循環(huán)遍歷數(shù)組

<script>

//循環(huán)遍歷數(shù)組

var animals = ["cat",'dog','human','whale','seal'];

var animalString = "";

for(var i = 0;i<animals.length;i++){

animalString += animals[i] + " ";

}

alert(animalString); //輸出數(shù)組里的每個(gè)項(xiàng)

</script>

遍歷二維數(shù)組

<script>

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]];

for(var i=0;i<arr.length;i++){

//遍歷每一個(gè)具體的值

for(var j=0;j<arr[i].length;j++){

document.writeln(arr[i][j]+" ");

}

document.writeln("<br/>");

}

</script>

阻止表單重復(fù)提交

有兩種方法可以解決:一是提交之后,立刻禁用點(diǎn)擊按鈕;第二種就是提交之后取消后續(xù)的表單提交操作。

document.getElementById("btn").disabled = true;//第一次提交后,將按鈕禁用

這種方式只能用于通過(guò)提交按鈕防止重復(fù)提交,還可以使用如下方式:

var flag = false;//設(shè)置一個(gè)監(jiān)聽(tīng)變量

if(flag ==true)return;//退出事件

flag = true;//表示提交過(guò)一次了

字符串部分

在字符串中查找子字符串

<script type="text/javascript">

var test = 'Welcome to my blog!';

var value = 'blog';

var subValue = test.indexOf(value);

console.log(subValue);//14,子字符串的索引

</script>

Number和Math部分

數(shù)字可以是一個(gè)直接量,也可以是一個(gè)對(duì)象,但是Math對(duì)象不同,他沒(méi)有構(gòu)造函數(shù),并且其所有的屬性和方法都是直接通過(guò)這個(gè)對(duì)象來(lái)訪問(wèn)的

把十進(jìn)制轉(zhuǎn)化為一個(gè)十六進(jìn)制值

var num = 255;

console.log(num.toString(16));//ff

js中,十進(jìn)制數(shù)字以0x開(kāi)頭,八進(jìn)制數(shù)字總是以0開(kāi)頭

隨進(jìn)產(chǎn)生顏色

<script type="text/javascript">

function randomVal(val){

return Math.floor(Math.random()*(val + 1));

}

function randomColor(){

return 'rgb(' + randomVal(255) + ',' + randomVal(255) + ',' + randomVal(255) + ')';

}

</script>

目前,所有瀏覽器都支持RGB表示法和十六進(jìn)制表示法,除了IE7,它只支持十六進(jìn)制表示法

在角度和弧度之間轉(zhuǎn)換

var rad = degrees*(Math.PI/180);

var degrees = rad*(180/Math.PI);

數(shù)組部分

創(chuàng)建多維數(shù)組

<script type="text/javascript">

var arrayLength = 3;//設(shè)置數(shù)組長(zhǎng)度

//創(chuàng)建數(shù)組

var multiArray = new Array(arrayLength);

for(var i =0;i<multiArray.length;i++){

multiArray[i] = new Array(arrayLength);

}

//給第一個(gè)數(shù)組索引添加項(xiàng)

multiArray[0][0] = 'phone';

multiArray[0][1] = 'book';

multiArray[0][2] = 'TV';

//第二個(gè)

multiArray[1][0] = 2;

multiArray[1][1] = 1;

multiArray[1][2] = 98;

//第三個(gè)

multiArray[2][0] = ['java','python'];

multiArray[2][1] = ['js','C++'];

multiArray[2][2] = ['Haskell','php'];

</script>

排序數(shù)組

<script type="text/javascript">

var fruits = ['banana','apple','orange','strawberry'];

console.log(fruits.sort());//Array [ "apple", "banana", "orange", "strawberry" ]

var num = [32,43,2,5,-23,0,4];

console.log(num.sort());//Array [ -23, 0, 2, 32, 4, 43, 5 ]

</script>

Array對(duì)象的sort方法會(huì)按照字母順序來(lái)排序數(shù)組元素。對(duì)于數(shù)字,是按照字符編碼的順序進(jìn)行排序

function compare(a,b){

return a-b;

}

var num = [32,43,2,5,-23,0,4];

console.log(num.sort(compare));//Array [ -23, 0, 2, 4, 5, 32, 43 ]

Date日期時(shí)間部分

js計(jì)算時(shí)間差

var date1=new Date(); //開(kāi)始時(shí)間,當(dāng)前時(shí)間

var date2=new Date(); //結(jié)束時(shí)間,需傳入時(shí)間參數(shù)

var date3=date2.getTime()-date1.getTime(); //時(shí)間差的毫秒數(shù)

//計(jì)算出相差天數(shù)

var days=Math.floor(date3/(24*3600*1000));

//計(jì)算出小時(shí)數(shù)

var leave1=date3%(24*3600*1000); //計(jì)算天數(shù)后剩余的毫秒數(shù)

var hours=Math.floor(leave1/(3600*1000));

//計(jì)算相差分鐘數(shù)

var leave2=leave1%(3600*1000); //計(jì)算小時(shí)數(shù)后剩余的毫秒數(shù)

var minutes=Math.floor(leave2/(60*1000));

//計(jì)算相差秒數(shù)

var leave3=leave2%(60*1000); //計(jì)算分鐘數(shù)后剩余的毫秒數(shù)

var seconds=Math.round(leave3/1000);

console.log(" 相差 "+days+"天 "+hours+"小時(shí) "+minutes+" 分鐘"+seconds+" 秒");

正則部分

js實(shí)現(xiàn)千分位分隔

<script type="text/javascript">

function cc(s){

if(/[^0-9\.]/.test(s)) return "invalid value";

s=s.replace(/^(\d*)$/,"$1.");

s=(s+"00").replace(/(\d*\.\d\d)\d*/,"$1");

s=s.replace(".",",");

var re=/(\d)(\d{3},)/;

while(re.test(s))

s=s.replace(re,"$1,$2");

s=s.replace(/,(\d\d)$/,".$1");

return "¥" + s.replace(/^\./,"0.")

}

</script>

<input onchange="this.value=cc(this.value)" />

js判斷傳入?yún)?shù)是否為質(zhì)數(shù)

function fn(input) {

input = parseInt(input,10);

return isPrime(input) ? 'is prime' : 'not prime';

}

function isPrime(input) {

if (input < 2) {

return false;

} else {

for (var i = 2; i <= Math.sqrt(input); i++) {

if (input % i == 0) {

return false;

}

}

}

return true;

}

js判斷字符串出現(xiàn)最多的字符,并統(tǒng)計(jì)次數(shù)

//js實(shí)現(xiàn)一個(gè)函數(shù),來(lái)判斷一個(gè)字符串出現(xiàn)次數(shù)最多的字符,并統(tǒng)計(jì)這個(gè)次數(shù)

function countStr(str){

var obj = {};

for(var i = 0, l = str.length,k; i < l ;i++){

k = str.charAt(i);

if(obj[k]){

obj[k]++;

}else{

obj[k] = 1;

}

}

var m = 0,i=null;

for(var k in obj){

if(obj[k] > m){

m = obj[k];

i = k;

}

}

return i + ':' + m;

}

以上內(nèi)容是小編日常收集整理的JavaScript 經(jīng)典實(shí)例,非常具有參考價(jià)值,感興趣的朋友收藏起來(lái)吧。

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)