<html>
<body style="margin:0px;">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<div id="drag" style="width:100px; height:100px; background-color:red; z-index:1"></div>
<div id="drop" style="width:200px; height:200px;background-color:blue; top:100px; position:absolute;"></div>
<script>
var
ev ,
dragObj = null ,
dragpos ,
tArr = [] ,
oriLoc = {} ,
canMove = true;
Number.prototype.NaN0 = function(){ return isNaN(this) ? 0 : this; };
function mouseMove(ev){
ev = ev || window.event;
var mp = getEvLoc(ev);
if(dragObj && canMove){
dragObj.style.position = 'absolute';
dragObj.style.top = mp.y - dragpos.y;
dragObj.style.left = mp.x - dragpos.x;
}
} function mouseDown(ev){
ev = ev || window.event;
var t = ev.target || ev.srcElement;
if( t.id == 'drag' ){
dragObj = t;
canMove = true;
dragpos = getOffset(t ,ev);
return false;
}
} function getOffset( t, ev ){ var po = getEvLoc( ev );
oriLoc = getPosition( t );
return {x: (po.x - oriLoc.x), y: (po.y - oriLoc.y) }; } function mouseUp(ev){
if(!dragObj)
return false;
ev = ev || window.event;
var mp = getEvLoc(ev) , canDrop = false;
for(var i in tArr){
var tempTar = tArr[i];
var tp = getPosition(tArr[i]);
var tw = tempTar.offsetWidth;
var th = tempTar.offsetHeight;
if( mp.x > tp.x && mp.x < (tp.x + tw) && mp.y > tp.y && mp.y < (tp.y + th) ){
canDrop = true;
}
}
if(!canDrop){
canMove = false;
dragObj.style.position = 'relative';
dragObj.style.top = oriLoc.y;
dragObj.style.left = oriLoc.x;
}
dragObj = null;
return false;
}
function getEvLoc( 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
};
} function getPosition( e ){
var left = 0;
var top = 0;
while (e.offsetParent){
left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
e = e.offsetParent;
} left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0); return {x:left, y:top}; } function addDropTarget( obj ){
tArr.push(obj);
} addDropTarget(document.getElementById('drop'));
document.onmousedown = mouseDown;
document.onmousemove = mouseMove;
document.onmouseup = mouseUp;
</script> </body>
</html>

后续功能做成插件形式~

JS 实现拖动效果的更多相关文章

  1. JS实现拖动效果

    有个问题就是该模块要使用定位,因为有left,top属性使用,绝对定位和相对定位都行,当然你也可使用margin-left,和margin-top这2个属性,替换left,top也是可以得 这样就不用 ...

  2. js 实现win7任务栏拖动效果

    前言 在某个时刻, 我认识了一个朋友. 此人在我的教唆下, 踏上了js的不归路. 前天他问我, Win7任务栏拖动效果怎么实现. 我随口就跟他说, 这简单的一逼. 在我一晚上的折腾之后, 一份潦草的代 ...

  3. HTML 通过js实现div的拖动效果

    最近做项目,碰到一个问题,需要对div实现拖动效果. 在度娘找了很多,要么觉得代码太长,要么就是效果不理想,不过最后还是找到了一个不错的,感谢大神的留贴,方便了我们,就把代码贴下面了: <!DO ...

  4. 原生JS实现拖动滑块验证登录效果

    ♀分享一组利用原生JS实现拖动滑块验证效果 ♀在这个组代码中涉及三个方面的知识: ⑴事件处理 ⑵添加验证标记 ⑶选择器的封装   代码如下: <!DOCTYPE html> <htm ...

  5. Js 拖动效果

    <!DOCTYPE html> <html> <head> <meta charset="utf8"> <title>j ...

  6. js实现一个可以兼容PC端和移动端的div拖动效果

    前段时间写了一个简单的div拖动效果,不料昨天项目上正好需要一个相差不多的需求,就正好用上了,但是在移动端的时候却碰到了问题,拖动时候用到的三个事件:mousedown.mousemove.mouse ...

  7. React.js实现原生js拖拽效果及思考

    一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...

  8. jquery div拖动效果示例代码

    div拖动效果想必大家都有见到过吧,实现的方法也是有很多的,下面为大家将介绍使用jquery是如何实现的,感兴趣的朋友不要错过 复制代码代码如下: <%@ page language=" ...

  9. Web的鼠标拖动效果

    以前写过一个拖动效果的Demo,拖拽元素新位置的计算是放在拖拽元素的mousemove事件中进行的.计算效率差,而且效果不好.所以一直有想怎样才能做出jquery-ui那种顺滑的拖拽效果. 其实顺滑的 ...

随机推荐

  1. VIM下的插入模式的相关知识:

    1. 建议:当打错一个单词时,删除掉重新打一遍, 避免在错誤的基础上进行修改: 2. 在插入模式下,可以用一些组合键,它也可以用于VIM 命令模式下,也可以用于 base shell 下: ctrl- ...

  2. (转)live555学习笔记-UsageEnvironment和TaskScheduler

    2011-12-6阅读1264 评论1 一直想学习流媒体服务器的设计,这几天有点时间,看了一下live555的源代码.live555是一个开源的跨平台流媒体服务器,使用编程语言是C++.将现阶段学习笔 ...

  3. CI框架 -- 核心文件 之 Model.php

    class CI_Model { /** * Class constructor * * @return void */ public function __construct() { log_mes ...

  4. Java调试那点事[转]

    转自云栖社区:https://yq.aliyun.com/articles/56?spm=5176.100239.blogcont59193.11.jOh3ZG# 摘要: 该文章来自于阿里巴巴技术协会 ...

  5. RedHat 6.4 安装WAS 7.0 启动失败com.ibm.websphere.ssl.SSLException

    问题描述 RedHat 6.4 安装 WAS 7.0,安装完成之后启动WAS失败,异常信息如下: [5/7/15 9:59:55:185 CST] 00000000 WsServerImpl E WS ...

  6. C# 判断网站是不是discuz论坛

    if (this.txturl.Text == "") { this.lblmess.Text = "请输入网址"; } else { GetHttp getH ...

  7. Spring核心框架体系结构(jar包引用分析)[转]

    很多人都在用spring开发java项目,普通添加lib目录拷贝jar包,或者创建maven项目时,配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错 ...

  8. 教你下载BarTender 2016

    BarTender是全球领先标签.条形码.RFID和证卡设计打印软件,功能强大,操作简单,具有很强的灵活性.目前,BarTender软件已更新至最新版BarTender 2016.BarTender ...

  9. 企业IT管理说:全自动就一定是最好的吗?

    现如今,企业基础设施变得越来越网络化.虚拟化并且愈加复杂,人们更愿意寻求自动化以期优化信息管理过程.毕竟,有谁不想要一个更为有效且迅速的法子来管控数据的安全.存储.应用性能监控以及IT的经济性?这不用 ...

  10. pyCharm运行python提示“please select a valid interpreter”

    报错信息“please select a valid interpreter”提示“请选择一个有效的解释器” pyCharm是编写python语言的集成IDE工具,安装pyCharm后需要自行安装py ...