日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单的鼠标可拖动div 兼容IE/FF

發(fā)布時間:2024/8/24 编程问答 48 如意码农
生活随笔 收集整理的這篇文章主要介紹了 简单的鼠标可拖动div 兼容IE/FF 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

來源:http://www.cnblogs.com/imwtr/p/4355416.html

作者:

主要思路:

一個div,注冊監(jiān)聽onmousedown事件,然后處理獲取的對象及其相關值(對象高度,clientX/clientY位置等)

并繼而轉為監(jiān)測onmousemove事件,在鼠標移動事件中更新div對象的位置屬性

鼠標松開的時候解除監(jiān)聽,更新位置完成。

需要注意的兩點

1.更新對象的位置需要用到o.style.left等,這些CSS屬性只能內(nèi)嵌才能被訪問到:

<div id="box" style="left:200px;top:200px;"> box </div>

放在<style></style>中是無法訪問的,比如:

#box{position: absolute;left:200px;top:200px;width: 200px;}

假如這樣做,顯示的是無法獲取值,請看舉例:

//    alert(e.clientX+"  -- " + o.style.left+" -- "+ X);

這樣的結果為 :(詳情看后邊代碼)

2. FireFox中是不能直接取event對象的,一般我們都會簡單地使用 e = e || event 來區(qū)分,其中e是相應于FF中函數(shù)的參數(shù)部分

比如:

document.getElementById("box").onmousedown = function(e)
{
getObject(this,e||event); //box捕獲事件并處理 e-->FF window.event-->IE
};

當然有些時候也可以這樣考慮:使用全局對象arguments[0]來替代捕獲到的事件參數(shù)

//    dis = arguments[0]||window.event;   //如果上面那句在FF下無法獲取事件,聽說可以通過 arguments[0]獲取FF下的事件對象

對于拖拽事件這里使用到了另外一種常用的方法:

// document.all(IE)使用setCapture方法綁定;其余比如FF使用Window對象針對事件的捕捉
document.all?o.setCapture() : window.captureEvents(Event.MOUSEMOVE); // document.all(IE)使用releaseCapture解除綁定;其余比如FF使用window對象針對事件的捕捉
document.all?o.releaseCapture() : window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP)

最后是一個可隨鼠標拖動的div

代碼,有注釋,希望能理解:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<title>Examples</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
<style type="text/css">
#box{position: absolute;left:200px;top:200px;width: 200px;border:1px solid #333;height: 200px;background-color: #009cc9;text-align: center;}
</style>
</head>
<body>
<div class="wrap">
<div id="box" style="left:200px;top:200px;"> box </div>
</div>
<script type="text/javascript">
var o, //捕獲到的事件
X, //box水平寬度
Y; //box垂直高度
function getObject(obj,e){ //獲取捕獲到的對象
o = obj;
// document.all(IE)使用setCapture方法綁定;其余比如FF使用Window對象針對事件的捕捉
document.all?o.setCapture() : window.captureEvents(Event.MOUSEMOVE);
X = e.clientX - parseInt(o.style.left); //獲取寬度,
Y = e.clientY - parseInt(o.style.top); //獲取高度,
// alert(e.clientX+" -- " + o.style.left+" -- "+ X);
}
document.getElementById("box").onmousedown = function(e){
getObject(this,e||event); //box捕獲事件并處理 e-->FF window.event-->IE
};
document.onmousemove = function(dis){ //鼠標移動事件處理
if(!o){ //如果未獲取到相應對象則返回
return;
}
if(!dis){ //事件
dis = event ;
// dis = arguments[0]||window.event; //如果上面那句在FF下無法獲取事件,聽說可以通過 arguments[0]獲取FF下的事件對象
}
o.style.left = dis.clientX - X +"px"; //設定box樣式隨鼠標移動而改變
o.style.top = dis.clientY - Y + "px";
};
document.onmouseup = function(){ //鼠標松開事件處理
if(!o){ //如果未獲取到相應對象則返回
return;
}
// document.all(IE)使用releaseCapture解除綁定;其余比如FF使用window對象針對事件的捕捉
document.all?o.releaseCapture() : window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP)
o = ''; //還空對象
};
</script>
</body>
</html>

總結

以上是生活随笔為你收集整理的简单的鼠标可拖动div 兼容IE/FF的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。