87,910
社区成员
发帖
与我相关
我的任务
分享
//浏览器兼容代码
var isIE = document.all?true:false;
function $(id){
return 'string' == typeof id ? document.getElementById(id):id;
}
function addEventHandler(element,eventN,eventM){
if(!element){
return;
}
if(element.addEventListener){
element.addEventListener(eventN,eventM,false);
}else if(element.attachEvent){
element.attachEvent('on'+eventN,eventM)
}else{
element['on'+eventN] = eventM;
}
}
function removeEventHandler(element,eventN,eventM){
if(!element){
return;
}
if(element.removeEventListener){
element.removeEventListener(eventN,eventM,false);
}else if(element.detachEvent){
element.detachEvent('on' + eventN,eventM);
}else{
element['on' + eventN] = null;
}
}
var Class = {
create:function(){
return function(){
this.initialize.apply(this,arguments);
};
}
}
Object.extend = function(des,source){
for(var p in source){
des[p] = source[p];
}
return des;
};
Object.getAbsoluteTop = function(obj){
var top = 0;
while(obj.tagName != "body"){
top = obj.offsetTop;
if(obj.parent){
obj = obj.parent;
}else{
break;
}
}
return top;
}
Object.getAbsoluteLeft = function(obj){
var left = 0;
while(obj.tagName != "body"){
left = obj.offsetLeft;
if(obj.parent){
obj = obj.parent;
}else{
break;
}
}
return left;
}
//拖拉
var Drag = Class.create();
Drag.prototype = {
initialize:function(obDrag,options){//obDrag 是拖拉对象. options是参数对象
var oThis = this;
this._drag = $(obDrag);
if(isIE){
//ie下用一个透明的层填充拖放对象 不填充的话onmousedown会失效(未知原因)
(function(style){
style.width = style.height = "100%"; style.backgroundColor = "#fff"; style.filter = "alpha(opacity:0)";
})(this._drag.appendChild(document.createElement("div")).style)
}
//this._isFlag = false;
//事件点下鼠标(onmousedown)的X,Y位置;
this._sX = this._sY = 0;
//事件对象(用于移除事件)
this._FM = function(e){oThis.moveDrag(window.event || e);};
this._FE = function(e){oThis.endDrag(window.event || e);};
this.setOptions(options);
addEventHandler(this._drag,'mousedown',function(e){oThis.startDrag(window.event || e);});
},
setOptions:function(options){
var oThis = this;
oThis._options = {
limit:false,//是否有拖拉范围
dUp:0,
dLeft:0,
dDown:document.body.offsetHeight,
dRight:document.body.offsetWidth
};
Object.extend(oThis._options,options || {});
oThis._drag.style.position = "absolute";
oThis._drag.style.cursor = "move";
},
startDrag:function(oEv){
var oThis = this;
//oThis._isFlag = true;
oThis._sX = oEv.clientX - oThis._drag.offsetLeft;
//alert(oThis._sX)
oThis._sY = oEv.clientY - oThis._drag.offsetTop;
//alert(oThis._sY)
addEventHandler(document,"mousemove",oThis._FM);//oThis._drag也可以
addEventHandler(document,"mouseup",oThis._FE);
if(isIE){
addEventHandler(oThis._drag,"losecapture",oThis._FE);
oThis._drag.setCapture();
}else{
addEventHandler(window,"blur",oThis._FE);
}
},
moveDrag:function(oEv){
var oThis = this;
//设置位置
//清除选择(ie设置捕获后默认带这个)
window.getSelection && window.getSelection().removeAllRanges();
var dLeft = oEv.clientX - oThis._sX,dTop = oEv.clientY - oThis._sY;
if(oThis._options.limit && dLeft < oThis._options.dLeft){
dLeft = oThis._options.dLeft;
}
if(oThis._options.limit && dLeft > oThis._options.dLeft + oThis._options.dRight - oThis._drag.offsetWidth){
dLeft = oThis._options.dLeft + oThis._options.dRight - oThis._drag.offsetWidth;
}
if(oThis._options.limit && dTop < oThis._options.dUp){
dTop = oThis._options.dUp;
}
if(oThis._options.limit && dTop > oThis._options.dUp + oThis._options.dDown - oThis._drag.offsetHeight){
dTop = oThis._options.dUp + oThis._options.dDown - oThis._drag.offsetHeight;
}
oThis._drag.style.left = dLeft + 'px';
oThis._drag.style.top = dTop + 'px';
//预览函数
oThis._options.onDrag && oThis._options.onDrag();
},
endDrag:function(oEv){
var oThis = this;
removeEventHandler(document,"mousemove",oThis._FM);
removeEventHandler(document,"mouseup",oThis._FE);
if(isIE){
removeEventHandler(oThis._drag,"losecapture",oThis._FE);
oThis._drag.releaseCapture();
}else{
removeEventHandler(window,"blur",oThis._FE);
}
}
};
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> ImgCut </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script type="text/javascript" src="js/imgCut.js"></script>
<script type="text/javascript">
function aa(){
setImgCut("img","preview",null);
document.getElementById("test");
var drag = new Drag(document.getElementById("test"),null);
}
</script>
</HEAD>
<BODY onload="aa();">
<div>
<div id="test" style="border:1px solid red;width:200;height:200"><img src="1.jpg"></div>
</BODY>
</HTML>
startDrag:function(oEv){
var oThis = this;
if ( oEv.preventDefault )
//阻止默认浏览器动作(W3C)
oEv.preventDefault();
else
//IE中阻止函数器默认动作的方式
window.event.returnValue = false;
//oThis._isFlag = true;
oThis._sX = oEv.clientX - oThis._drag.offsetLeft;
//alert(oThis._sX)
oThis._sY = oEv.clientY - oThis._drag.offsetTop;
//alert(oThis._sY)
addEventHandler(document,"mousemove",oThis._FM); //oThis._drag也可以
addEventHandler(document,"mouseup",oThis._FE);
if(isIE){
addEventHandler(oThis._drag,"losecapture",oThis._FE);
oThis._drag.setCapture();
}
else{
addEventHandler(window,"blur",oThis._FE);
}
},