探索javascript----拖拽
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>完美拖拽</title>
<style type="text/css">
html,body{overflow:hidden;}
body,div,h2,p{margin:0;padding:0;}
body{color:#fff;background:#000;font:12px/2 Arial;}
p{padding:0 10px;margin-top:10px;}
span{color:#ff0;padding-left:5px;}
#box{position:absolute;width:300px;height:150px;background:#333;border:2px solid #ccc;top:50%;left:50%;margin:-75px 0 0 -150px;}
#box h2{height:25px;cursor:move;background:#222;border-bottom:2px solid #ccc;text-align:right;padding:0 10px;}
#box h2 a{color:#fff;font:12px/25px Arial;text-decoration:none;outline:none;}
</style>
<script>
window.onload=function(){
var oBox=document.getElementById("box");
var oH=oBox.getElementsByTagName("h2")[0];
var oA=oBox.getElementsByTagName("a")[0];
var aSpan=oBox.getElementsByTagName("span");
var aPos=[{x:oBox.offsetLeft,y:oBox.offsetTop}];
var bDrag=false;
var disX=disY=0; oH.onmousedown=function(ev){
var oEv=ev||window.event;
bDrag=true;
aPos.push({x:oBox.offsetLeft,y:oBox.offsetTop});
disX=oEv.clientX-oBox.offsetLeft;
disY=oEv.clientY-oBox.offsetTop;
this.setCapture&&this.setCapture();
return false;
};
document.onmousemove=function(ev){
if (!bDrag) return;
var oEv=ev||window.event;
var iL=oEv.clientX-disX;
var iT=oEv.clientY-disY;
var iMaxL=document.documentElement.clientWidth-oBox.offsetWidth;
var iMaxT=document.documentElement.clientHeight-oBox.offsetHeight;
iL=iL<0?0:iL;
iT=iT<0?0:iT;
iL=iL>iMaxL?iMaxL:iL;
iT=iT>iMaxT?iMaxT:iT;
oBox.style.marginTop=oBox.style.marginLeft=0;
oBox.style.left=iL+"px";
oBox.style.top=iT+"px";
aPos.push({x:iL,y:iT});
status();
return false;
};
document.onmouseup=window.onblur=oH.onlosecapture=function(){//window.onblur表示当前窗口失去焦点即激活了其他线程的窗口
bDrag=false;
this.releaseCapture&&this.releaseCapture();
status()
};
//回放
oA.onclick=function(){
var oPos=play=null;
if(aPos.length==1) return;
play=setInterval(function(){
oPos=aPos.pop();
oPos?(oBox.style.left=oPos.x+"px",oBox.style.top=oPos.y+"px", status()):clearInterval(play);
},50);
this.focus=false;
return false; };
oA.onmousedown=function(ev){
(ev||window.event).cancelBubble=true;
};
function status(){
aSpan[0].innerHTML=bDrag;
aSpan[1].innerHTML=oBox.offsetLeft;
aSpan[2].innerHTML=oBox.offsetTop;
}
status();
};
//心得:用bDrag来独立move和up函数(不同嵌套在down函数里)
// 在临界值的处理里,先把最值算出来再和最值比较再赋值
// 三目运算符里可以写多条语句,用","隔开即可
// 赋值的时候,要考虑是否收到布局的影响。如oBox.style.left和top赋值前要先把margin值清零
// ie捕获事件:setCapture() ie释放事件捕获:releaseCapture()
</script>
</head>
<body>
<div id="box">
<h2><a href="javascript:;">点击回放拖动轨迹</a></h2>
<p><strong>Drag:</strong><span></span></p>
<p><strong>offsetTop:</strong><span></span></p>
<p><strong>offsetLeft:</strong><span></span></p>
</div>
</body>
</html>
探索javascript----拖拽的更多相关文章
- Javascript 拖拽的一些高级的应用——逐行分析代码,让你轻松了解拖拽的原理
我们看看之前的拖拽在周围有东西的时候会出现什么问题? 在高级浏览器中不会有啥问题,我们放到IE7下面测试一下,问题就出来了.如图 我们可以很清楚的看到,文字都已经被选中了.那这个用户体验很不好,用起来 ...
- Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了解拖拽的原理
今天我们来看看如何让拖拽的物体不能拖出某个div之外和拖拽的吸附功能 上次讲到我们的拖拽是不可拖出可视区范围的,在这基础上我们加个父级的div,不让他拖出父级.原理和之前的一样,简单吧. <di ...
- Javascript 拖拽雏形中的一些问题——逐行分析代码,让你轻松了解拖拽的原理
今天我们就来解决上一次拖拽雏形中的一些问题.下面看看有哪些问题? 附上上期的Javascript代码,方便大家查看问题. <script type="text/javascript&q ...
- javascript——拖拽(完整兼容代码)
拖拽,是JS经常会用到的效果,在网上有很多的这样那样的拖拽效果,但其中往往大多有各种各养的问题,功能不全,无法兼容,而且修改的时候 也是十分麻烦. 其实拖拽的原理很简单,无非是鼠标的三个动作的解析,以 ...
- Javascript 拖拽雏形——逐行分析代码,让你轻松了解拖拽的原理
拖拽的原理: 其实就是鼠标与左上角的距离保持不变.我们来看下图, 这红点就是鼠标. 拖拽拖拽实际上来说就是通过鼠标的位置来计算物体的位置,就是这么简单,就是这么任性. 那这个距离怎么求呢?? 鼠标的位 ...
- javascript 拖拽事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- day52—JavaScript拖拽事件的应用(自定义滚动条)
转行学开发,代码100天——2018-05-07 前面的记录里展示了JavaScript中鼠标拖拽功能,今天利用拖拽功能实现另一个应用场景——自定义滚动条(作为控制器)的用法. 常通过自定义滚动条控制 ...
- html --- canvas --- javascript --- 拖拽圆圈
代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...
- JavaScript拖拽
<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta http-e ...
- 每日分享!~ JavaScript(拖拽事件)
浏览器的拖拉事件 拖拉(drag)指的是,用户在某个对象上按下鼠标键不放,拖动它到另一个位置,然后释放鼠标键,将该对象放在那里. 拖拉的对象有好几种,包括元素节点.图片.链接.选中的文字等等.在网页中 ...
随机推荐
- CentOS7 安装MongoDB 3.0服务器
1,下载&安装 MongoDB 3.0 正式版本发布!这标志着 MongoDB 数据库进入了一个全新的发展阶段,提供强大.灵活而且易于管理的数据库管理系统.MongoDB宣称,3.0新版本不只 ...
- css3动态边框
<ul class="partnersLogo"> <li> <a href="http://www.chinapnr.com/" ...
- CentOS忘记密码或者丢失口令解决方法
重启系统,然后再五秒之内按下任意键. 进入下面画面后按 [ e ] 键 把光标移动到第二行(或者找到以kernel /vmlinuz开头的),再按下 [ e ] 键 在文本结尾处空一格再添加s ...
- easyui验证
1.验证是否必填 class="easyui-validatebox" missingMessage="必须填写" 2.验证字符串长度 class=" ...
- Bootstrap网格系统
一.网格系统 响应式网格系统随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列. 二.基本结构 <div class="container"> &l ...
- DataTable Linq Example
DataTable CreateTable() { DataTable dtable = new DataTable(); DataColumn dc; //MId CId FId PId dc = ...
- 根据屏幕大小动态设置字体rem
1.根据屏幕大小动态设置字体rem var docEl = document.documentElement, //当设备的方向变化(设备横向持或纵向持)此事件被触发.绑定此事件时, //注意现在当浏 ...
- nmon--非常棒的LINUX/AIX性能计数器监测和分析工具
转自51Testinghttp://bbs.51testing.com/viewthread.php?tid=116526 经常看到很多人讨论说loadrunner对linux/aix的性能监测太少, ...
- 读写CSV文件
var allFiles = Directory.GetFiles(@"D:\uploadpdf", "*.csv"); string dataIsNull = ...
- 罗永浩Vs王自如:浮躁的世界该如何降温?!
这段时间智能手机业界有一件事情炒得纷纷扬扬,可谓是波澜起伏,想必大家都多少略有耳闻.昨天中午在群里看到“罗永浩舌战王自如视频”分享,就有些‘凑热闹’的好奇点开看看.一开场的几分钟正如老罗所说的那样:两 ...