js面向物件---拖拽
阿新 • • 發佈:2019-02-13
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
body{
position: relative;
}
#box{
position: absolute;
width : 150px;
height: 150px;
background: #f00;
cursor: default;
}
#box2{
position: absolute;
left: 300px;
top: 300px;
width: 150px;
height: 150px;
background : #00f;
cursor: default;
}
</style>
</head>
<body>
<div id="box"></div>
<div id="box2"></div>
</body>
<!--面向過程的寫法-->
<!--<script type="text/javascript">
var oBox = document.getElementById('box');
var disX = 0;
var disY = 0;
oBox.onmousedown = function(ev){
var ev = ev || window.event;
var disX = ev.clientX - oBox.offsetLeft;
var disY = ev.clientY - oBox.offsetTop;
document.onmousemove = function(ev){
var ev = ev || window.event;
oBox.style.left = ev.clientX - disX + "px";
oBox.style.top = ev.clientY - disY + "px";
};
document.oonmouseup = function(){
document.onmousemove = null;
document.onmouseup = null;
};
return false;
}
</script>-->
<!--面向過程改成面向物件的方法
1、onload裡面建立例項使用方法
2、全域性變數就是屬性
3、函式就是方法
4、改變this指標,this指向object-->
<!--面向物件的寫法-->
<script type="text/javascript">
window.onload = function(){
var d1 = new Drag('box');
d1.init();
var d2 = new Drag('box2');
d2.init();
}
// 建構函式
function Drag(id){
this.oBox = document.getElementById(id);
this.disX = 0;
this.disY = 0;
}
//方法 ev事件寫在函式下面
Drag.prototype.init = function(){
var _this = this;
this.oBox.onmousedown = function(ev){
var ev = ev || window.event;
_this.fnDown(ev);
};
}
Drag.prototype.fnDown = function(ev){
var _this = this;
this.disX = ev.clientX - this.oBox.offsetLeft;
this.disY = ev.clientY - this.oBox.offsetTop;
document.onmousemove = function(ev){
var ev = ev || window.event;
_this.fnMove(ev);
};
document.onmouseup = function(){
_this.fnUp();
};
return false;
}
Drag.prototype.fnMove = function(ev){
this.oBox.style.left = ev.clientX - this.disX + "px";
this.oBox.style.top = ev.clientY - this.disY + "px";
}
Drag.prototype.fnUp = function(){
document.onmousemove = null;
document.onmouseup = null;
}
</script>
</html>