js拖拽的问题

奇乐二二二 2011-09-04 08:17:55
小弟今天在做一个拖拽功能,网上查查找找了以后把大概写了出来,但拖动的时候有一个问题,mousedown,然后在拖拽的时候虽然能拖拽,但是如果页面有其他内容的话会选取其它的内容,就好像是在桌面有几个图标,左键拖动选取所有那种效果,非常别扭,所想请教一下如何去掉这个bug?
<script>
var item;
function dragac(ev){
ev = ev || window.event;
var crtxy = dragxy(ev);
if(item!=null){
item.style.top=crtxy.y+'px';
item.style.left=crtxy.x+'px';
}
}

function dragxy(ev){
if(ev.pageX || ev.pageY){
return {x:ev.pageX, y:ev.pageY};
}
return {
x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y:ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
document.onmousemove = dragac;
</script>
<h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2>


<div id="aaa" onmousedown="item=this" style="position:absolute" onmouseup="item=null">sadfasd</div>

<h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2>
...全文
69 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kyzy_yy_pm 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dxx1988 的回复:]

CSS设置: -moz-user-select:none;
-webkit-user-select:none;


IE下添加事件:xxx.onselect = function(){return false;}
[/Quote]+
Exodia 2011-09-06
  • 打赏
  • 举报
回复
CSS设置: -moz-user-select:none;
-webkit-user-select:none;


IE下添加事件:xxx.onselect = function(){return false;}
奇乐二二二 2011-09-06
  • 打赏
  • 举报
回复
顶上去。
dcyydc 2011-09-05
  • 打赏
  • 举报
回复
学习~~
奇乐二二二 2011-09-05
  • 打赏
  • 举报
回复
顶一下
bruce_vs 2011-09-04
  • 打赏
  • 举报
回复
我是来学习的0.0
abcd_ufo 2011-09-04
  • 打赏
  • 举报
回复


<h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2>


<div id="aaa" style="position:absolute" >sadfasd</div>

<h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2>

<script>


/**
* 拖拽 效果
*/
Endrag={
x0:0,y0:0,x1:0,y1:0,moveable:false,index:100,NS:(navigator.appName=='Netscape'),offSets:{x:0,y:0},
//开始拖动;
startDrag:function (e){
e = e ? e : (window.event ? window.event : null);
Endrag.getFocus(this);
if(e.button==(Endrag.NS)?0 :1) {
if(!Endrag.NS){this.setCapture()}
Endrag.x0 = e.clientX ;
Endrag.y0 = e.clientY ;
Endrag.x1 = parseInt(Endrag.abs(this).x);
Endrag.y1 = parseInt(Endrag.abs(this).y);
Endrag.moveable = true;
}
},
//拖动;
drag:function (e){
e = e ? e : (window.event ? window.event : null);
if(Endrag.moveable){
var tempX=(Endrag.x1 + e.clientX - Endrag.x0 - Endrag.offSets.x);
var tempY=(Endrag.y1 + e.clientY - Endrag.y0 - Endrag.offSets.y);
if(tempX>0)
this.style.left = tempX + "px";
else
this.style.left="0px";
if(tempY>0)
this.style.top = tempY + "px";
else
this.style.top="0px";
}
},
//停止拖动;
stopDrag:function (e){
if(Endrag.moveable) {
if(!Endrag.NS){this.releaseCapture();}
Endrag.moveable = false;
}
},
//获得焦点;
getFocus:function (obj){
if(obj.style.zIndex!=this.index){
this.index += 2;
var idx = this.index;
obj.style.zIndex=idx;
}
},
abs:function (element) {
var result = { x: element.offsetLeft, y: element.offsetTop};
element = element.offsetParent;
while (element) {
result.x += element.offsetLeft;
result.y += element.offsetTop;
element = element.offsetParent;
}
return result;
},
offSet:function(setting){
this.offSets=setting;
},
bind:function(obj){
alert(obj);
obj=typeof(obj)=="object" ? obj:document.getElementById(obj);
obj.onmousedown=Endrag.startDrag;
obj.onmouseup=Endrag.stopDrag;
obj.onmousemove=Endrag.drag;
return this;
}
}

Endrag.bind(document.getElementById("aaa"));
</script>



你那块onmousedown的时候位置算错了
iComputerLion 2011-09-04
  • 打赏
  • 举报
回复
顶一下

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧