javascript 可以拖動的DIV(二)
2024-05-06 14:15:05
供稿:網友
 
function beginDrag(elementToDrag,event) 
{ 
var =event.clientX-parseInt(elementToDrag.style.left); 
var deltaY=event.clientY-parseInt(elementToDrag.style.top); 
//這兒的deltaX/Y實際上就是得出鼠標和div的坐標差。 
if(document.addEventListener) 
//之所以在這兒加這樣一個判斷,是因為IE6和firefox對于javascript的事件處理有不同的方法(IE7之后的版本開始符合W3C的標準)。 
//document.addEventlistener如果是true的話,那就是firefox等支持W3C DOM標準的瀏覽器,IE6中注冊事件用attachEvent,而firefox等瀏覽器則是用addEventListener,語法如下所示。addEventListener函數的true參數表示可以捕捉事件。 
{ 
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標準中使用的一個方法,用來取消事件的傳播。我們使用了document.addEventListener這個方法,瀏覽器會從document對象沿著DOM節點向下傳播到目標節點,注冊的事件處理程序就會運行,然后事件會回傳到父節點,如果父節點也有相應的事件處理程序,那么事件也會處理,為了避免這種情況,我們可以用stopPropagation來阻止事件的傳播,這個方法的作用就是讓其他元素對這個事件不可見。在IE6下,并沒有元素捕捉事件的過程,不過有這個術語叫做起泡的過程,IE6中所用的方法就是cancelBubble,用來取消起泡,表示這個事件已被處理,其他元素不用再看見了。 
if(event.preventDefault) event.preventDefault(); 
else event.returnValue=false; 
//這兒的preventDefault用來通知瀏覽器不要執行與事件關聯的默認動作,returnValue用來取消發生事件的源元素的默認動作,大家應該能看出這是在不同瀏覽器下發揮相同的作用。 
//以下就是拖動div中所用的關鍵函數了。 
function moveHandler(e) 
{ 
   if (!e) e=window.event; //如果是IE的事件對象,那么就用window.event 
   //全局屬性,否則就用DOM二級標準的Event對象。 
//在IE中,event是window的一個屬性,也就是一個全局變量,但是在W3C DOM中,event是發生事件的文檔對象的屬性。在這個程序中,event是什么并不重要,關鍵是我們要取得鼠標的坐標值,在IE中,e這個參數傳進來的時候,IE認不出來,所以我們就給e賦值為window.event。 
elementToDrag.style.left=(e.clientX-deltaX)+"px"; 
elementToDrag.style.top=(e.clientY-deltaY)+"px"; 
//這兒就是改變現在正在作用的div的left和top屬性。