最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript拖拽&拖放系列文章3之細(xì)說事件對(duì)象第4/4頁(yè)

 更新時(shí)間:2008年09月25日 16:15:15   作者:  
Javascript中的事件對(duì)象其實(shí)和.NET中繼承自EventArgs類的派生類類似,用來給事件處理程序傳遞狀態(tài)信息,從而進(jìn)行相應(yīng)的操作。這一篇文章將講述Javascript事件對(duì)象中和實(shí)現(xiàn)拖拽功能相關(guān)的幾個(gè)屬性,并在最后將IE事件模型和標(biāo)準(zhǔn)DOM事件模型的差異封裝到一個(gè)類中,從而適應(yīng)所有的瀏覽器。

3.2 將IE事件模型和DOM事件模型的差異封裝起來

注:本來打算采用《Javascript高級(jí)程序設(shè)計(jì)》這本書中所敘述的方法來封裝差異,讀過的人知道,作者是用return EventUtil.getEvent.caller.Arguments[0]來獲得原始的事件對(duì)象的,這的確很棒,很巧妙,已經(jīng)很完美了,我沒有必要在re-invent the wheel了,只可惜Opera瀏覽器不支持caller屬性,為了瀏覽器兼容性,所以我不得不采用自己的方法了。caller的詳細(xì)內(nèi)容可以參考全面理解JavaScript中的caller,callee,call,apply 這篇文章。

3.2.1 定義框架

首先定義一個(gè)封裝的框架,再細(xì)細(xì)添枝加葉。

 

var EventUtilization=new Object;
EventUtilization.getCompatibleEvent
=function(e){
//判斷是否是IE瀏覽器
if(!EventUtilization.getCompatibleEvent.arguments[0])
{
e
=window.event;
//使IE的window.event屬性和DOM的一樣
//..
return e;
}
return e;
}

 

 

很簡(jiǎn)單,就不再贅述了。

3.2.2 格式化window.Event對(duì)象

1 構(gòu)造DOM中的pageX和pageY屬性

這兩個(gè)屬性分別表示鼠標(biāo)指針相對(duì)于整張網(wǎng)頁(yè)(取決于body元素的實(shí)際邊界范圍)的x、y坐標(biāo),單位是像素。在構(gòu)造它們之前,需要了解另外兩個(gè)屬性document.Body.scrollLeft和document.body.scorllTop,單位是像素,當(dāng)瀏覽器出現(xiàn)滾動(dòng)條且滾動(dòng)頁(yè)面時(shí),數(shù)值分別等同于頁(yè)面在水平、垂直方向上滾動(dòng)的距離,否則為0像素。

我想你已經(jīng)想到了該如何構(gòu)造pageX和pageY了。沒錯(cuò),pageX=clientX+scorllLeft,pageY=clientY+clientTop。

Javascript代碼片段:

 

    if(!EventUtilization.getCompatibleEvent.arguments[0])
{
e
=window.event;
e.pageX
=e.clientX+document.body.scrollLeft;
e.pageY
=e.clientY+document.body.scrollTop;
//..
}

2 構(gòu)造DOM中的relatedTarget屬性

我們可以用事件對(duì)象的type屬性判斷鼠標(biāo)事件類型,從而決定何時(shí)將fromElement或toElement的值賦給relatedTarget屬性。

Javascript代碼片段:

 

    if(!EventUtilization.getCompatibleEvent.arguments[0])
{
e
=window.event;
//..
if(e.type=="mouseout")
{
e.relatedTarget
=e.toElement;
}
else if(e.type=="mouseover")
{
e.relatedTarget
=e.fromElement;
}
//..
}

3 構(gòu)造DOM中的target/currentTarget屬性

終于快要結(jié)尾了......

只需要引用srcElement屬性就可以了,不過要注意,我們?cè)谇懊嬲f過,在mouseout事件中,DOM的target總是等于relatedTarget屬性,因此我們同樣要構(gòu)造currentTarget屬性,以免在調(diào)用currentTarget時(shí)返回“undefined”。

 

    if(!EventUtilization.getCompatibleEvent.arguments[0])
{
e
=window.event;
//..
e.target=e.srcElement;
e.currentTarget
=e.srcElement;
//..
}

完整的JS代碼:

 


var EventUtilization=new Object;
EventUtilization.getCompatibleEvent
=function(e){
if(!EventUtilization.getCompatibleEvent.arguments[0])
{
e
=window.event;
e.pageX
=e.clientX+document.body.scrollLeft;
e.pageY
=e.clientY+document.body.scrollTop;
if(e.type=="mouseout")
{
e.relatedTarget
=e.toElement;
}
else if(e.type=="mouseover")
{
e.relatedTarget
=e.fromElement;
}
e.target
=e.srcElement;
e.currentTarget
=e.srcElement;
return e;
}
return e;
}

它能夠完美的兼容Internet Explorer、Mozilla Firefox、Netscape、Sarari(Chrome)、Opera等瀏覽器的流行版本。

3.2.3 框架的使用

我將它命名為EventUtilization.js,將它放在頁(yè)面中后,就可以用如下的方法使用了:

 

  var source=document.getElementById("mouseoverElement");
source.onmouseover
=function(e){
var e=EventUtilization.getCompatibleEvent(e);
alert(e.pageX);
alert(e.pageY);
alert(e.relatedTarget.tagName);
alert(e.target.tagName);
alert(e.currentTarget.tagName);
};

啊,冗長(zhǎng)的一篇文章被我寫完了,我終于可以休息一下了........希望能給一些人幫助,哪怕是一點(diǎn)點(diǎn),也會(huì)是我繼續(xù)寫下去的動(dòng)力........

至于下一篇寫什么?賣個(gè)關(guān)子先。

To be continued........

相關(guān)文章

  • JS將json字符串轉(zhuǎn)換為JsonObject的多種實(shí)現(xiàn)方法

    JS將json字符串轉(zhuǎn)換為JsonObject的多種實(shí)現(xiàn)方法

    在Web前端開發(fā)中,JSON(JavaScript Object Notation)作為數(shù)據(jù)交換格式被廣泛使用,它輕量級(jí)且易于人類閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,當(dāng)從服務(wù)器接收數(shù)據(jù)時(shí),我們需要將其轉(zhuǎn)換為JSON對(duì)象以便于操作,本文將深入探討如何利用JavaScript實(shí)現(xiàn)這一轉(zhuǎn)換過程
    2025-02-02
  • JavaScript中運(yùn)算符與數(shù)組擴(kuò)展詳細(xì)講解

    JavaScript中運(yùn)算符與數(shù)組擴(kuò)展詳細(xì)講解

    這篇文章主要介紹了JavaScript中運(yùn)算符與數(shù)組擴(kuò)展方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • 如何在微信小程序中實(shí)現(xiàn)Mixins方案

    如何在微信小程序中實(shí)現(xiàn)Mixins方案

    這篇文章主要給大家介紹了關(guān)于如何在微信小程序中實(shí)現(xiàn)Mixins方案的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用微信小程序具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • JavaScript實(shí)現(xiàn)Flash炫光波動(dòng)特效

    JavaScript實(shí)現(xiàn)Flash炫光波動(dòng)特效

    JavaScript寫的炫光波動(dòng)效果,看到一些Flash效果不錯(cuò),用JS也模擬一下,還有很多不完善的地方,給各位參考參考。
    2015-05-05
  • ES6 系列之 WeakMap的使用示例

    ES6 系列之 WeakMap的使用示例

    這篇文章主要介紹了ES6 系列之 WeakMap的使用示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 在微信小程序中使用vant的方法

    在微信小程序中使用vant的方法

    這篇文章主要介紹了在微信小程序中使用vant的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用小程序具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 每天一篇javascript學(xué)習(xí)小結(jié)(屬性定義方法)

    每天一篇javascript學(xué)習(xí)小結(jié)(屬性定義方法)

    這篇文章主要介紹了javascript中的屬性定義方法知識(shí)點(diǎn),對(duì)屬性定義方法的基本使用方法,以及各種方法進(jìn)行整理,感興趣的小伙伴們可以參考一下
    2015-11-11
  • vue-router路由懶加載的實(shí)現(xiàn)(解決vue項(xiàng)目首次加載慢)

    vue-router路由懶加載的實(shí)現(xiàn)(解決vue項(xiàng)目首次加載慢)

    這篇文章主要介紹了vue-router路由懶加載的實(shí)現(xiàn)(解決vue項(xiàng)目首次加載慢),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • JS獲取本地文件并進(jìn)行網(wǎng)絡(luò)傳輸?shù)拇a詳解

    JS獲取本地文件并進(jìn)行網(wǎng)絡(luò)傳輸?shù)拇a詳解

    在web中如想要獲取用戶計(jì)算機(jī)上的文件我們通常會(huì)用到的方法是通過一個(gè)表單元素<input type="file">操作用戶選擇的文件,本文小編給大家介紹了JS獲取本地文件并進(jìn)行網(wǎng)絡(luò)傳輸?shù)姆椒?需要的朋友可以參考下
    2024-08-08
  • JS+CSS實(shí)現(xiàn)大氣清新的滑動(dòng)菜單效果代碼

    JS+CSS實(shí)現(xiàn)大氣清新的滑動(dòng)菜單效果代碼

    這篇文章主要介紹了JS+CSS實(shí)現(xiàn)大氣清新的滑動(dòng)菜單效果代碼,通過鼠標(biāo)事件結(jié)合定時(shí)函數(shù)實(shí)現(xiàn)頁(yè)面元素動(dòng)態(tài)變換的效果,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10

最新評(píng)論

兰考县| 务川| 晋宁县| 剑阁县| 上蔡县| 汕头市| 彰武县| 西和县| 从化市| 肥东县| 河东区| 温州市| 桦川县| 靖宇县| 仪陇县| 临澧县| 舒兰市| 焦作市| 阿合奇县| 黄冈市| 灌云县| 晋宁县| 腾冲县| 萍乡市| 大冶市| 两当县| 通河县| 安顺市| 张掖市| 社会| 图片| 黔西| 郎溪县| 鄂伦春自治旗| 长沙县| 西畴县| 铅山县| 常山县| 政和县| 遵义县| 微博|