【原创】我也发一个图片选取的模块
时间:2007-02-27
来源:互联网
fix-bug:
2007-2-28:
mouseMove中的鼠标坐标计算方法不对.
原来只取了窗口坐标,还应该取页面坐标.
也就是
代码:
var px=Event.pointerX(event);var py=Event.pointerY(event);
var cx=event.clientX;
var cy=event.clientY;
2007-2-27:
initpos中的
代码:
t=rt-Math.round((rh-h)/2);代码:
t=rt+Math.round((rh-h)/2);代码:
/**element's drag size 的封装
*by:achun
*email:[email protected]
*需要 prototype.js
*2007-2-12
*/
var DDS={
Obj:null,//绑定的obj
Range:null,//drag 范围参照对象
W:null,//锁定宽高比例
H:null,//锁定宽高比例
WH:null,//预先计算的W/H
X:0,//临时变量
Y:0,//临时变量
S:'',//临时变量
PosStr:'',//字符串形式的选定范围参数
/*
*绑定图片对象和选取范围对象
*el:选取范围对象就是选择框了
*range:一般就是图片了
*w,h:如果要锁定比例的话就要给出这个了
*/
bind:function(el,range,w,h){
DDS.unbind();
DDS.Obj=$(el);
if(null==DDS.Obj) return;
DDS.Range=$(range);
if(w && h){
DDS.W=w;
DDS.H=h;
DDS.WH=w/h;
}else{
DDS.W=null;
DDS.H=null;
}
DDS.initpos();
Event.observe(DDS.Obj,'mousedown',DDS.mouseDown,false);
Event.observe(document,'mouseup',DDS.mouseUp,false);
Event.observe(document,'mousemove',DDS.mouseMove,false);
},
/*
*初始化选取框的位置
*/
initpos:function(){
var t=10,l=10,w=40,h=40,rt,rl,rw,rh;
if(DDS.Range){
rt=DDS.Range.offsetTop;
rl=DDS.Range.offsetLeft;
rw=DDS.Range.offsetWidth;
rh=DDS.Range.offsetHeight;
if(DDS.WH){
w=Math.min(rw,Math.round(rh*DDS.WH));
h=Math.min(rh,Math.round(w/DDS.WH));
t=rt+Math.round((rh-h)/2);
l=rl+Math.round((rw-w)/2);
}else{
t = rt;
l = rl;
w = rw;
h = rh;
}
}else{
if(DDS.WH){
w=DDS.W;
h=DDS.H;
}
}
DDS.Obj.style.top=t+'px';
DDS.Obj.style.left=l+'px';
DDS.Obj.style.width =(w-2) + 'px';//减2是因为有border,没有border就没有那个虚线框了
DDS.Obj.style.height=(h-2) + 'px';
if(DDS.Range){
window.status='t:'+(t-rt)+' l:'+(l-rl)+' w:'+w+' h:'+h;
DDS.PosStr='t='+(t-rt)+'&l='+(l-rl)+'&w='+w+'&h='+h;//保存PosStr下面的一样
}
else{
window.status='t:'+t+' l:'+l+' w:'+w+' h:'+h;
DDS.PosStr='t='+t+'&l='+l+'&w='+w+'&h='+h;
}
},
/*
*选取框的算法
*t,l,w,h:Top,Left,Width,Height
*四个由鼠标传过来的预期参数
*/
pos:function(t,l,w,h){
var ct = DDS.Obj.offsetTop;
var cl = DDS.Obj.offsetLeft;
var cw = DDS.Obj.offsetWidth;
var ch = DDS.Obj.offsetHeight;
if(DDS.Range){
var rt,rl,rw,rh;
var ot=t,ol=l,ow=w,oh=h;
rt=DDS.Range.offsetTop;
rl=DDS.Range.offsetLeft;
rw=DDS.Range.offsetWidth;
rh=DDS.Range.offsetHeight;
if(DDS.WH){
if(ow==cw && oh!=ch){
ow=Math.round(oh*DDS.WH);
}
if(oh==ch && ow!=cw){
oh=Math.round(ow/DDS.WH);
}
}
t=Math.max(ot,rt);
l=Math.max(ol,rl);
w=Math.min(ow,rl+rw-l);
h=Math.min(oh,rt+rh-t);
if(w<10 || h<10) return ;
var s=DDS.WH/w*h;
if(DDS.WH)
if(Math.abs(s-1)>0.001){
if(w!=cw && h==ch) return;
if(w==cw && h!=ch) return;
}
}
if(DDS.Obj.style.cursor=="move" && (w!=cw || h!=ch)) return;
if(w<10 || h<10) return ;
if(DDS.Range){
window.status='t:'+(t-rt)+' l:'+(l-rl)+' w:'+w+' h:'+h;
DDS.PosStr='t='+(t-rt)+'&l='+(l-rl)+'&w='+w+'&h='+h;
}
else{
window.status='t:'+t+' l:'+l+' w:'+w+' h:'+h;
DDS.PosStr='t='+t+'&l='+l+'&w='+w+'&h='+h;
}
DDS.Obj.style.top=t+'px';
DDS.Obj.style.left=l+'px';
DDS.Obj.style.width =(w-2)+'px';
DDS.Obj.style.height=(h-2)+'px';
return;
},
//返回PosStr===呵呵可有可无了
getpos:function(){
return DDS.PosStr;
},
//可以单独设定w,h来确定是否锁定比例
scale:function(w,h){
DDS.W=w;
DDS.H=h;
if (w && h)
DDS.WH=w/h;
else{
DDS.WH=false;
DDS.W=false;
DDS.H=false;
}
this.initpos();
},
//就是解除bind了
unbind:function(){
if(null==DDS.Obj) return;
Event.stopObserving(DDS.Obj,'mousedown',DDS.mouseDown,false);
Event.stopObserving(document,'mouseup',DDS.mouseMove,false);
Event.stopObserving(document,'mousemove',DDS.mouseMove,false);
},
//以下是鼠标触发的行为,具体就不解释了
mouseDown:function(event){
DDS.S=true;
DDS.X=event.clientX;
DDS.Y=event.clientY;
document.body.onselectstart=document.body.ondrag=function(){return false};
},
mouseUp:function(event){
DDS.S=false;
document.body.onselectstart=document.body.ondrag=function(){return true};
},
mouseMove:function(event){
if (false==DDS.OBJ)
if(DDS.Obj != Event.element(event)) return;
var cur='';
var px=Event.pointerX(event);
var py=Event.pointerY(event);
var cx=event.clientX;
var cy=event.clientY;
var xPos = px - DDS.Obj.offsetLeft;//event.offsetX;
var yPos = py - DDS.Obj.offsetTop;//event.offsetY;
var offset = 8;
if (yPos<offset) cur += "n";
else if (yPos > (DDS.Obj.offsetHeight-offset)) cur += "s";
if (xPos<offset) cur += "w";
else if (xPos > (DDS.Obj.offsetWidth-offset)) cur += "e";
if (2==cur.length) cur = "";
if (cur == "") cur = "move";
else cur += "-resize";
if(false==DDS.S){
DDS.Obj.style.cursor = cur;
return;
}
cur=DDS.Obj.style.cursor;
xPos =cx - DDS.X;
yPos =cy - DDS.Y;
DDS.X=cx;
DDS.Y=cy;
var min=10;
var t=DDS.Obj.offsetTop;
var l=DDS.Obj.offsetLeft;
var w = DDS.Obj.offsetWidth;
var h = DDS.Obj.offsetHeight;
if('move'==cur){
t=t + yPos;
l=l + xPos;
}else
if('e-resize'==cur){
w=w + xPos;
if (w<10) return;
}else
if('s-resize'==cur){
h=h + yPos;
if (h<10) return;
}else
if('w-resize'==cur){
w=w - xPos;
l=l + xPos;
if (w<10) return;
}else
if('n-resize'==cur){
h=h - yPos;
t=t + yPos;
if (h<10) return;
}else
return;
DDS.pos(t,l,w,h);
return;
}
};
作者: achun.shx 发布时间: 2007-02-26
代码:
<div><img id='img' src="xxxx.jpg" />
<div id='box'></div>
</div>
<script>
DDS.bind(box,img,200,400);
</script>
作者: achun.shx 发布时间: 2007-02-26
作者: cator 发布时间: 2007-02-26
作者: luzhou 发布时间: 2007-02-28
作者: airwin 发布时间: 2007-03-27
作者: 默默 发布时间: 2007-04-01
引用:
原帖由 cator 于 2007-2-26 22:51 发表顶一个先
作者: betterp 发布时间: 2007-04-01
作者: hotbone 发布时间: 2007-04-02
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28