欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript 鼠標(biāo)事件總結(jié)

 更新時(shí)間:2009年12月24日 15:15:45   作者:  
javascript的鼠標(biāo)事件是個(gè)比較龐大的家族。需要的朋友可以參考下。

常見(jiàn)的有以下8個(gè):
mousedown:鼠標(biāo)的鍵鈕被按下。
mouseup:鼠標(biāo)的鍵鈕被釋放彈起。
click:?jiǎn)螕羰髽?biāo)的鍵鈕。
dblclick:鼠標(biāo)的鍵鈕被按下。
contextmenu :彈出右鍵菜單。
mouseover:鼠標(biāo)移到目標(biāo)的上方。
mouseout:鼠標(biāo)移出目標(biāo)的上方。
mousemove:鼠標(biāo)在目標(biāo)的上方移動(dòng)。
mousedown事件與mouseup事件可以說(shuō)click事件在時(shí)間上的細(xì)分,順序是mousedown => mouseup => click。因此一個(gè)點(diǎn)擊事件,通常會(huì)激發(fā)幾個(gè)鼠標(biāo)事件。


[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]

有了它們,我們可以做許多事,但對(duì)于高層次的應(yīng)用(如游戲)是顯然不夠的,于是鼠標(biāo)事件的點(diǎn)擊事件又根據(jù)究竟是點(diǎn)左鍵還是右鍵進(jìn)行細(xì)分。在DOM2.0中,W3C對(duì)鼠標(biāo)事件作了現(xiàn)范,鼠標(biāo)事件被解析為MouseEvent(我們可以用e.constructor == MouseEvent來(lái)判斷其是否為鼠標(biāo)事件,是左鍵點(diǎn)擊還是右鍵點(diǎn)擊由它的一個(gè)叫button的屬性判定。以下就是W3C的標(biāo)準(zhǔn)現(xiàn)范:

0:按下左鍵
1:按下中鍵(如果有的話)
2:按下右鍵
當(dāng)然微軟是不會(huì)妥協(xié)的,因?yàn)閑.button本來(lái)就是微軟最先實(shí)現(xiàn)的,網(wǎng)景用的是e.which,但相對(duì)而言,微軟的復(fù)雜多了。

0:沒(méi)有鍵被按下
1:按下左鍵
2:按下右鍵
3:左鍵與右鍵同時(shí)被按下
4:按下中鍵
5:左鍵與中鍵同時(shí)被按下
6:中鍵與右鍵同時(shí)被按下
7:三個(gè)鍵同時(shí)被按下
更詳細(xì)的情況見(jiàn)下表。
GE:Gecko ;SA:Safari; OP:Opera; NS:Netscape

IE NS 4 GE ≥ 1.0
SA 3
OP ≥ 8.0
GE0.9 OP<8.0
e.button 左鍵 1 undefined 0 1 1
中鍵 4 undefined 1 2 3
右鍵 2 undefined 2 3 2
e.which 左鍵 undefined 1 1 1 1
中鍵 undefined 2 2 2 3
右鍵 undefined 3 3 3 2
為此我們可以使用以下函數(shù)來(lái)綁定左右鍵。
復(fù)制代碼 代碼如下:

var mouseEvent = function(){
var arg = arguments[0],
el = arg.el || document,
leftfn = arg.left || function(){},
rightfn = arg.right || function(){},
middlefn = arg.middle || function(){},
buttons = {};
el.onmousedown = function(e){
e = e || window.event;
if(!+"\v1"){
switch(e.button){
case 1:buttons.left = true; break;
case 2:buttons.right = true; break;
case 4:buttons.middle = true; break;
}
}else{
switch(e.which){
case 1:buttons.left = true;break;
case 2:buttons.middle = true; break;
case 3:buttons.right = true;break;
}
}
if(buttons.left){
leftfn();
}else if(buttons.middle){
middlefn();
}else if(buttons.right){
rightfn();
}
buttons = {
"left":false,
"middle":false,
"right":false
};
}
}

它接受一個(gè)哈希參數(shù),都是可選項(xiàng)。哈希的el為要綁定鼠標(biāo)事件的元素,left為點(diǎn)擊左鍵激發(fā)的事件,其他兩個(gè)類(lèi)推。用法如下:
復(fù)制代碼 代碼如下:

var el = document.getElementById("mouse");
var ex = document.getElementById("explanation");
var left = function(){
ex.innerHTML = "左鍵被按下";
}
var right = function(){
ex.innerHTML = "右鍵被按下";
}
mouseEvent({el:el,left:left,middle:null,right:right});


[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]

此外,通過(guò)鼠標(biāo)在網(wǎng)頁(yè)上的點(diǎn)擊,我們還可以獲得許多有用的參數(shù),如獲得當(dāng)前鼠標(biāo)的坐標(biāo)。根據(jù)其參照物的不同,分為以下幾套坐標(biāo)系。一套是以當(dāng)前瀏覽器的可視區(qū)為參照物(clientX, clientY),另一套是以顯示器的屏幕為參照物(screenX, screenY)。此外微軟還有一套坐標(biāo)系(x,y),它是相對(duì)于觸發(fā)事件的對(duì)象的offsetParent的,火狐有另一套坐標(biāo)系(pageX, pageY),它是相對(duì)于當(dāng)前網(wǎng)頁(yè)的。我們可以通過(guò)如下函數(shù)來(lái)獲得鼠標(biāo)在網(wǎng)頁(yè)的坐標(biāo)。
復(fù)制代碼 代碼如下:

var getCoordInDocument = function(e) {
e = e || window.event;
var x = e.pageX || (e.clientX +
(document.documentElement.scrollLeft
|| document.body.scrollLeft));
var y= e.pageY || (e.clientY +
(document.documentElement.scrollTop
|| document.body.scrollTop));
return {'x':x,'y':y};
}


[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]

clientXY
(clientX,clientY)的坐標(biāo)系,不受滾動(dòng)條影響
至于mouseover,mousemove,mouseout沒(méi)有什么好說(shuō),并且無(wú)瀏覽器差異。我們來(lái)看鼠標(biāo)滾輪事件,這個(gè)差異很?chē)?yán)重。IE、Safari、 Opera 、chrome是mousewheel事件,F(xiàn)irefox是DOMMouseScroll事件。事件屬性方面,IE等是event. wheelDelta,F(xiàn)irefox是event. detail。IE等往上滾一圈為120,往下滾一圈為-120。Firefox往上滾一圈為-3,往下滾一圈為3。我們可以構(gòu)造一個(gè)函數(shù)來(lái)削除它們的差異。
復(fù)制代碼 代碼如下:

var mouseScroll = function(fn){
var roll = function(){
var delta = 0,
e = arguments[0] || window.event;
delta = (e.wheelDelta) ? e.wheelDelta / 120 : -(e.detail || 0) / 3;
fn(delta);//回調(diào)函數(shù)中的回調(diào)函數(shù)
}
if(/a/[-1]=='a'){
document.addEventListener('DOMMouseScroll', roll, false);
}else{
document.onmousewheel = roll;
}
}

此函數(shù)接受一函數(shù)作為參數(shù),如:
復(fù)制代碼 代碼如下:

mouseScroll(function(delta){
var obj = document.getElementById('scroll'),
current = parseInt(obj.offsetTop)+(delta*10);
obj.style.top = current+"px";
});


[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]

相關(guān)文章

  • 使用canvas實(shí)現(xiàn)仿新浪微博頭像截取上傳功能

    使用canvas實(shí)現(xiàn)仿新浪微博頭像截取上傳功能

    用戶提供圖像大小尺寸不合適,如何用截取上傳呢?接下來(lái)小編教大家使用使用canvas實(shí)現(xiàn)仿新浪微博頭像截取上傳功能解決問(wèn)題,需要的朋友一起學(xué)習(xí)吧。
    2015-09-09
  • 手把手教你 CKEDITOR 4 實(shí)現(xiàn)Dialog 內(nèi)嵌 IFrame操作詳解

    手把手教你 CKEDITOR 4 實(shí)現(xiàn)Dialog 內(nèi)嵌 IFrame操作詳解

    這篇文章主要介紹了手把手教你 CKEDITOR 4 實(shí)現(xiàn)Dialog 內(nèi)嵌 IFrame操作,結(jié)合實(shí)例形式分析了CKEDitor4 Dialog內(nèi)嵌IFrame具體操作步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2019-06-06
  • JavaScript或jQuery 獲取option value值方法解析

    JavaScript或jQuery 獲取option value值方法解析

    這篇文章主要介紹了JavaScript或jQuery 獲取option value值方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • js 右下角彈窗效果代碼(IE only)

    js 右下角彈窗效果代碼(IE only)

    js 右下角彈窗效果代碼,雖然IE only,但這個(gè)代碼的邏輯可以參考下。了解下IE與firefox的區(qū)別,自己寫(xiě)個(gè)兼容的版本吧。
    2010-06-06
  • JavaScript創(chuàng)建對(duì)象的七種方式(推薦)

    JavaScript創(chuàng)建對(duì)象的七種方式(推薦)

    JavaScript創(chuàng)建對(duì)象的方式有很多,通過(guò)Object構(gòu)造函數(shù)或?qū)ο笞置媪康姆绞揭部梢詣?chuàng)建單個(gè)對(duì)象,顯然這兩種方式會(huì)產(chǎn)生大量的重復(fù)代碼,并不適合量產(chǎn)。接下來(lái)介紹七種非常經(jīng)典的創(chuàng)建對(duì)象的方式,他們也各有優(yōu)缺點(diǎn)
    2017-06-06
  • JavaScript高級(jí)程序設(shè)計(jì) 讀書(shū)筆記之九 本地對(duì)象Array

    JavaScript高級(jí)程序設(shè)計(jì) 讀書(shū)筆記之九 本地對(duì)象Array

    本地對(duì)象Array,數(shù)組等操作函數(shù)
    2012-02-02
  • JavaScript實(shí)現(xiàn)日期格式化的操作詳解

    JavaScript實(shí)現(xiàn)日期格式化的操作詳解

    在我們做業(yè)務(wù)開(kāi)發(fā)的漫長(zhǎng)歲月里,會(huì)多次跟時(shí)間打交道,相信大多數(shù)小伙伴對(duì)日期格式化也并不陌生,本文簡(jiǎn)單記錄了JavaScript實(shí)現(xiàn)日期格式化的過(guò)程,以及一些拓展,希望對(duì)大家有所幫助
    2023-05-05
  • 微信小程序?qū)崿F(xiàn)列表左右滑動(dòng)

    微信小程序?qū)崿F(xiàn)列表左右滑動(dòng)

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)列表左右滑動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • uni-app做微信小程序的分包處理方法

    uni-app做微信小程序的分包處理方法

    分包指的是把一個(gè)完整的小程序項(xiàng)目,按照不同的需求劃分為不同的子包,在構(gòu)建時(shí)打包成不同的分包,用戶在瀏覽時(shí)按需加載,這篇文章主要介紹了uni-app做微信小程序的分包處理,需要的朋友可以參考下
    2023-02-02
  • TypeScript 類(lèi)class與修飾符的詳細(xì)使用教程

    TypeScript 類(lèi)class與修飾符的詳細(xì)使用教程

    通過(guò) class 關(guān)鍵字定義一個(gè)類(lèi),然后通過(guò) new 關(guān)鍵字可以方便的生產(chǎn)一個(gè)類(lèi)的實(shí)例對(duì)象,這個(gè)生產(chǎn)對(duì)象的過(guò)程叫 實(shí)例化,類(lèi)的成員就是類(lèi)中所有的屬性和方法,這篇文章主要介紹了TypeScript 類(lèi)class與修飾符的詳細(xì)使用,需要的朋友可以參考下
    2022-06-06

最新評(píng)論