Javascript — класс перетаскивания
Автор:Eve Cole
Время обновления:2009-06-11 16:31:49
<HTML>
<ГОЛОВКА>
<SCRIPT LANGUAGE="JavaScript">
<!--
вар Перетаскивание = {
сх: 0,
сы: 0,
пример: 0,
эй: 0,
лк: 0,
ли: 0,
смещениеX: 0,
смещениеY: 0,
cdom: ноль,
перетаскивание: ложь,
перетаскивание: ноль,
tempDrag : функция(){
Drag.drag.call(Перетащить);
},
кэш: {},
putCache: функция (ключ, v) {
this.cache[ключ] = v;
},
getCache: функция (ключ) {
вернуть this.cache[ключ];
},
перетаскивание: функция (dfun, fn) {
пытаться{
если(!this.dragAble){
this.cdom = event.srcElement?event.srcElement:event.target;
this.cdom.setCapture(истина);
this.sx = event.screenX;
this.sy = event.screenY;
this.ex = event.screenX;
this.ey = event.screenY;
this.lx = event.screenX;
this.ly = event.screenY;
this.dragAble = правда;
this.dragFun = dfun?dfun:null;
если (фн) {фн ();}
this.cdom.attachEvent("onmousemove",Drag.tempDrag);
}
}поймать(е){
это.dragEnd();
}
},
перетащите: функция() {
пытаться{
если (this.dragAble) {
this.ex = event.screenX;
this.ey = event.screenY;
this.offsetX = this.ex - this.lx;
this.offsetY = this.ey - this.ly;
если (this.dragFun) {this.dragFun();}
это.lx = это.ex;
this.ly = this.ey;
}
}
поймать (е) {
this.dragEnd(ноль);
}
},
перетаскивание: функция (фн) {
если (this.dragAble) {
this.cdom.detachEvent("onmousemove",Drag.tempDrag);
this.cdom.releaseCapture();
this.ex = event.screenX;
this.ey = event.screenY;
this.dragAble = ложь;
если (фн) {фн ();}
}
это.releaseDrag();
},
ReleaseDrag : функция() {
это.ex = 0;
это.ey = 0;
это.сх = 0;
this.sy = 0;
this.cdom = ноль;
this.dragAble = ложь;
this.dragFun = ноль;
this.cache = {};
}
};
функция старт(){
вар d = Drag.cdom.cloneNode(истина);
вар pos = getBodyPos(Drag.cdom);
с (d.style) {
позиция = "абсолют";
левый =поз.левый;
верх = pos.top;
filter='Альфа(Непрозрачность="30")' ;
}
Drag.putCache("ало",d);
document.body.appendChild(d);
}
функция ing(){
вар offx = Drag.offsetX;
вар offy = Drag.offsetY;
var to = Drag.getCache("ало");
вар л = to.offsetLeft;
вар т = to.offsetTop;
с (to.style) {
левый=l+offx;
топ=т+оффи;
}
}
конец функции(){
вар cdom = Drag.cdom;
var alo = Drag.getCache("ало");
с (cdom.style)
{
влево = ало.offsetLeft;
топ = alo.offsetTop;
позиция = "абсолют";
}
если (ало)
document.body.removeChild(ало);
}
функция getBodyPos(obj){
пытаться{
вар л = obj.offsetLeft;
вар т = obj.offsetTop;
while(obj.parentElement != document.body){
объект = объект.parentElement;
вар тл = obj.offsetLeft;
вар тт = obj.offsetTop;
л += тл;
т += тт;
}
вернуть {влево: л, вверху: т};
}поймать(е){
оповещение (электронное сообщение);
}
}
//-->
</СКРИПТ>
</HEAD>
<ТЕЛО>
<div style="border:solid 1 #7FFFD4;ширина:300;высота:150;фон:#3399FF;курсор:переместить;" onmousedown="Drag.dragStart(ing,start)" onmouseup="Drag.dragEnd(end)">
Тестовое перетаскивание объекта
</div>
</ТЕЛО>
</HTML>