可以拖動的div 實(shí)現(xiàn)代碼
關(guān)于這個實(shí)現(xiàn)div拖動的js函數(shù),實(shí)際上也是某位前輩公布于網(wǎng)上,這兒只是摘抄注解一下。
function beginDrag(elementToDrag,event)
{
var =event.clientX-parseInt(elementToDrag.style.left);
var deltaY=event.clientY-parseInt(elementToDrag.style.top);
//這兒的deltaX/Y實(shí)際上就是得出鼠標(biāo)和div的坐標(biāo)差。
if(document.addEventListener)
//之所以在這兒加這樣一個判斷,是因為IE6和firefox對于javascript的事件處理有不同的方法(IE7之后的版本開始符合W3C的標(biāo)準(zhǔn))。
//document.addEventlistener如果是true的話,那就是firefox等支持W3C DOM標(biāo)準(zhǔn)的瀏覽器,IE6中注冊事件用attachEvent,而firefox等瀏覽器則是用addEventListener,語法如下所示。addEventListener函數(shù)的true參數(shù)表示可以捕捉事件。
{
document.addEventListener(”mousemove”,moveHandler,true);
document.addEventListener(”mouseup”,upHandler,true);
//document.addEventListener(”mouseout”,upHandler,true);
}
else if(document.attachEvent)
{
document.attachEvent(”onmousemove”,moveHandler);
document.attachEvent(”onmouseup”,upHandler);
//document.attachEvent(”onmouseout”,upHandler);
}
if(event.stopPropagation) event.stopPropagation();
else event.cancelBubble=true;
//這兒的判斷依然是考慮了不同的瀏覽器,stopPropagation是W3C DOM標(biāo)準(zhǔn)中使用的一個方法,用來取消事件的傳播。我們使用了document.addEventListener這個方法,瀏覽器會從document對象沿著DOM節(jié)點(diǎn)向下傳播到目標(biāo)節(jié)點(diǎn),注冊的事件處理程序就會運(yùn)行,然后事件會回傳到父節(jié)點(diǎn),如果父節(jié)點(diǎn)也有相應(yīng)的事件處理程序,那么事件也會處理,為了避免這種情況,我們可以用stopPropagation來阻止事件的傳播,這個方法的作用就是讓其他元素對這個事件不可見。在IE6下,并沒有元素捕捉事件的過程,不過有這個術(shù)語叫做起泡的過程,IE6中所用的方法就是cancelBubble,用來取消起泡,表示這個事件已被處理,其他元素不用再看見了。
if(event.preventDefault) event.preventDefault();
else event.returnValue=false;
//這兒的preventDefault用來通知瀏覽器不要執(zhí)行與事件關(guān)聯(lián)的默認(rèn)動作,returnValue用來取消發(fā)生事件的源元素的默認(rèn)動作,大家應(yīng)該能看出這是在不同瀏覽器下發(fā)揮相同的作用。
//以下就是拖動div中所用的關(guān)鍵函數(shù)了。
function moveHandler(e)
{
if (!e) e=window.event; //如果是IE的事件對象,那么就用window.event
//全局屬性,否則就用DOM二級標(biāo)準(zhǔn)的Event對象。
//在IE中,event是window的一個屬性,也就是一個全局變量,但是在W3C DOM中,event是發(fā)生事件的文檔對象的屬性。在這個程序中,event是什么并不重要,關(guān)鍵是我們要取得鼠標(biāo)的坐標(biāo)值,在IE中,e這個參數(shù)傳進(jìn)來的時候,IE認(rèn)不出來,所以我們就給e賦值為window.event。
elementToDrag.style.left=(e.clientX-deltaX)+”px”;
elementToDrag.style.top=(e.clientY-deltaY)+”px”;
//這兒就是改變現(xiàn)在正在作用的div的left和top屬性。
if(e.stopPropagation) e.stopPropagation();
else e.cancelBubble=true;
}
function upHandler(e)
{
if(document.removeEventListener)
{
document.removeEventListener(”mouseup”,upHandler,true);
document.removeEventListener(”mousemove”,moveHandler,true);
}
else
{
document.detachEvent(”onmouseup”,upHandler);
document.detachEvent(”onmousemove”,moveHandler);
}
//這個函數(shù)是用來移除偵聽器,比較簡單,就不詳細(xì)說了。
if (!e) e=window.event;
if(e.stopPropagation) e.stopPropagation();
else e.cancelBubble=true;
}
}
相關(guān)文章
如何優(yōu)雅地取消 JavaScript 異步任務(wù)
這篇文章主要介紹了如何優(yōu)雅地取消 JavaScript 異步任務(wù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03鼠標(biāo)劃過實(shí)現(xiàn)延遲加載并隱藏層的js代碼
鼠標(biāo)劃過延遲加載隱藏層的效果,想必大家都有見到過吧,在本文將為大家詳細(xì)介紹下使用js是如何實(shí)現(xiàn)的,感興趣的朋友可以參考下2013-10-10完美解決spring websocket自動斷開連接再創(chuàng)建引發(fā)的問題
下面小編就為大家?guī)硪黄昝澜鉀Qspring websocket自動斷開連接再創(chuàng)建引發(fā)的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03JS判斷Android、iOS或瀏覽器的多種方法(四種方法)
這篇文章主要介紹了JS判斷Android、iOS或瀏覽器的多種方法(四種方法),需要的朋友可以參考下2017-06-06window.location和document.location的區(qū)別分析
用戶不能改變document.location(因為這是當(dāng)前顯示文檔的位置)。但是,可以改變window.location (用其它文檔取代當(dāng)前文檔)window.location本身也是一個對象,而document.location不是對象2008-12-12JS Object.preventExtensions(),Object.seal()與Object.freeze()用
這篇文章主要介紹了JS Object.preventExtensions(),Object.seal()與Object.freeze()用法,結(jié)合實(shí)例形式分析了javascript控制對象擴(kuò)展、密封、凍結(jié)等相關(guān)函數(shù)與操作技巧,需要的朋友可以參考下2018-08-08用Javascript 和 CSS 實(shí)現(xiàn)腳注(Footnote)效果
腳注(Footnote)是向用戶提供更多信息的一個最佳途徑,也是主體信息的一個有效補(bǔ)充,常見于各種印刷書籍中。2009-09-09JavaScript獲取移動設(shè)備型號的實(shí)現(xiàn)代碼(JS獲取手機(jī)型號和系統(tǒng))
這篇文章主要介紹了JavaScript獲取移動設(shè)備型號的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-03-03