用原生JS实现拖拽?
视频中老师是引入了库实现拖拽,没有详细的讲。我想自己写着试试看,好不容易搞出来了,但是拖动的时候就没法按下那个小div实现缩放了。而且拖动的时候会有一点小瑕疵。
由于小女子自身水平不够,不能很好的理解这两者的逻辑及顺序,如有大神讲解一下,实在感激不尽,谢谢!
<script>
window.onload=function() {
document.onselectstart=new Function('event.returnValue=false;');
var oTop = document.getElementById('mtop');
var oLeft = document.getElementById('mleft');
var oRight = document.getElementById('mright');
var oUp = document.getElementById('mup');
var oBox = document.getElementById('mox');
var img2 = document.getElementById('img2');
var ifKeyDown = false;
var contact = '';
oBox.onmousedown= function (ev) {
var disX= ev.clientX-oBox.offsetLeft-img2.offsetLeft;
var disY= ev.clientX-oBox.offsetTop-img2.offsetTop;
document.onmousemove= function (ev) {
var l=ev.clientX-disX-img2.offsetLeft;
var t=ev.clientY-disY-img2.offsetTop;
if(l<0){
l=0;
}
else if(l>img2.offsetWidth-oBox.offsetWidth){
(l=img2.offsetWidth-oBox.offsetWidth)
}
if(t<0) {
t = 0;
}
else if(t>img2.offsetHeight-oBox.offsetHeight){
t=img2.offsetHeight-oBox.offsetHeight
}
oBox.style.left=l+'px';
oBox.style.top=t+'px';
};
document.onmouseup= function () {
document.onmousemove = null;
document.onmouseup = null;
};
};
oRight.onmousedown = function () {
ifKeyDown = true;
contact = 'right';
};
oTop.onmousedown = function () {
ifKeyDown = true;
contact = 'top';
};
oLeft.onmousedown = function () {
ifKeyDown = true;
contact = 'left';
};
oUp.onmousedown = function () {
ifKeyDown = true;
contact = 'up';
};
window.onmouseup = function () {
ifKeyDown = false;
};
window.onmousemove = function (e) {
if (ifKeyDown == true) {
switch (contact){
case "right": rightMove(e);break;
case "top": topMove(e);break;
case "left": leftMove(e);break;
case "up": upMove(e);break;
}
}
setChoice();
setPreview()
};
function rightMove(e){
var x = e.clientX;
var widthBefore = oBox.offsetWidth - 2;
var addWidth = " ";
addWidth = x - getPosition(oBox).left - widthBefore;
oBox.style.width = addWidth + widthBefore + 'px';
}
function topMove(e){
var y= e.clientY;
var boxY=getPosition(oBox).top;
var addHeight= boxY-y;
var heightBefore = oBox.offsetHeight-2;
oBox.style.height=heightBefore+addHeight+'px';
oBox.style.top=oBox.offsetTop-addHeight+'px'
}
function leftMove(e){
var x = e.clientX;
var boxX=getPosition(oBox).left;
var addWidth = boxX-x;
var widthBefore= oBox.offsetWidth-2;
oBox.style.width=widthBefore+addWidth+"px";
oBox.style.left=oBox.offsetLeft-addWidth+"px";
}
function upMove(e){
var y= e.clientY;
var heightBefore=oBox.offsetHeight-2;
var addHight=" ";
addHeight=y-getPosition(oBox).top-heightBefore;
oBox.style.height= heightBefore+addHeight+"px";
}
function getPosition(node){
var left = node.offsetLeft;
var top = node.offsetTop;
var parent = node.offsetParent;
while(parent!= null){
left+=parent.offsetLeft;
top+=parent.offsetTop;
parent=parent.offsetParent;
}
return {"left":left,"top":top};
}
function setChoice(){
var top=oBox.offsetTop;
var right=oBox.offsetLeft+oBox.offsetWidth;
var bottom=oBox.offsetTop+oBox.offsetHeight;
var left=oBox.offsetLeft;
img2.style.clip="rect("+top+"px,"+right+"px,"+bottom+"px,"+left+"px)";
}
function setPreview(){
var top=oBox.offsetTop;
var right=oBox.offsetLeft+oBox.offsetWidth;
var bottom=oBox.offsetTop+oBox.offsetHeight;
var left=oBox.offsetLeft;
var img3=document.getElementById("img3");
img3.style.top=-top+"px";
img3.style.left=-left+"px";
img3.style.clip="rect("+top+"px,"+right+"px,"+bottom+"px,"+left+"px)";
}
};
</script>