js实现可拖拽的div
前言
下午忙里偷闲想写一个可拖拽的例子,留在脑海里一直都是三个事件mouseDown,mouseUp,mouseMove, 但从没有动手实践过,今天想起了自己实践了并学习了张鑫旭的demo实现。 学习张鑫旭代码的同时又了解了几知识点。
1、obj.currentStyle[attr] 和getComputedStyle(obj,false)[attr]。获取DOM非行间样式。 我百度了下currentStyle看到有的说Chrome和FF是不支持的,为了兼容,所以用到了这两个方法。
2、onselectstart。 IE和Chrome适用,防止内容被选中默认是true。
拖拽原理
1、可拖拽的div主要是确定mouseDown事件发生时的DOM承载对象,以及mouseMove时的坐标计算。
2、其次是当拖拽完成时的DOM承载对象。多数会选择document,不知道我理解的对不对?
效果图

js
/**
拖拽div
关键事件:mouseDown, mouseMove,mouseUp
**/ var params={
top:0,
left:0,
currentX:0,
currentY:0,
flag:false
}; /**
obj.currentStyle[attr]
getComputedStyle(obj,false)[attr] 获取DOM非行间样式
**/
var getCss=function(o,key){
return o.currentStyle ? o.currentStyle[key] : document.defaultView.getComputedStyle(o,false)[key];
} var startDrag=function(bar,target,callback){ if(getCss(target,'left')!='auto'){
params.left=getCss(target,'left');
}
if(getCss(target,'top')!='auto'){
params.top=getCss(target,'top');
}
bar.onmousedown=function(event){
params.flag=true;
if(!event){
event=window.even;
bar.onselectstart=function(){ //IE和Chrome适用,防止内容被选中默认是true
return false;
}
}
var e=event;
params.currentX=e.clientX;
params.currentY=e.clientY;
} document.onmouseup=function(){
params.flag=false;
if(getCss(target,"left") !='auto'){
params.left=getCss(target,'left');
}
if(getCss(target,'top') !='auto'){
params.top=getCss(target,'top');
}
}
document.onmousemove=function(event){
var e=event?event:window.event;
if(params.flag){
var nowX=e.clientX,nowY=e.clientY;
var disX=nowX-params.currentX, disY=nowY-params.currentY;
target.style.left=parseInt(params.left)+disX+'px';
target.style.top=parseInt(params.top)+disY+'px';
} if(callback=='function'){
callback(parseInt(params.left)+disX,parseInt(params.top)+disY);
}
}
}
下载地址:http://yunpan.cn/cwTJmDQWtAgLs 访问密码 7d22
js实现可拖拽的div的更多相关文章
- js可以随意拖拽的div的实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 简单的div元素拖拽到div
drag1 drag2 drag3 代码如下: <!DOCTYPE HTML> <html> <head> <title>div拖拽到div</t ...
- JS Event 鼠标拖拽事件
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- js插件-简单拖拽
前端开发的时候,有好多地方用到拖拽效果,当然 http://jqueryui.com/draggable/ 是个不错的选择,but 我是个打破砂锅问到底的人,抽点时间用js小小的实现了类似的插件,话 ...
- 拖拽改变div的大小
拖拽改变div的大小 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&qu ...
- 可以随鼠标拖拽的div
可以拖拽的div <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- php和js实现文件拖拽上传
Dropzone.js实现文件拖拽上传 http://www.sucaihuo.com/php/1399.html demo http://www.sucaihuo.com/jquery/13/139 ...
- Dropzone.js实现文件拖拽上传
dropzone.js是一个开源的JavaScript库,提供 AJAX 异步文件上传功能,支持拖拽文件.支持最大文件大小.支持设置文件类型.支持预览上传结果,不依赖jQuery库. 使用Dropzo ...
- jquery实现可拖拽的div
由于项目中并未引入前端开发框架easyui.ext.没有现成的控件可以使用,今天时间算是充裕的时候,自己写了一个可以拖拽.放大缩小的例子.欢迎大家指正. 不啰嗦,上代码: 依赖的文件:jquery.j ...
随机推荐
- 浅谈数据库优化方案--表和SQL
1.数据类型的选择 1.字段最好设置为非空.若字段为char(8),即便是NULL也会现有8个字符的空间. 2.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能, ...
- angurlarjs学习笔记
AngularJS 根作用域($rootScope) 所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中 $rootScope 可作用于整个应用中. ...
- phpexcel读取excel的xls xlsx csv格式
我之前写过一篇PHP读取csv文件的内容 上代码index.php <?php /** * * @author XC * */ class Excel { public $currentShee ...
- LA
grmon -altjtag -u 公式rand()%(b-a),是求范围随机数的计算公式,%是做求余运算,正整数对n求余的范围肯定是在0~n-1之间,也就是rand()%(b-a)的范围是0~b-a ...
- python的函数调用和参数传递
不可变对象(immutable):int.string.float.number.tuple 可变对象(mutable):dict.list 对于基本数据类型的变量,变量传递给函数后,函数会在内存中复 ...
- CYQ.Data 支持WPF相关的数据控件绑定(2013-08-09)
事件的结果 经过多天的思考及忙碌的开发及测试,CYQ.Data 终于在UI上全面支持WPF,至此,CYQ.Data 已经可以方便支持wpf的开发,同时,框架仍保留最低.net framework2.0 ...
- ENode 2.6 架构与设计简介以及全新案例分享
前言 ENode是一个应用开发框架,为开发人员提供了一整套基于DDD+CQRS+ES+EDA架构风格的解决方案.ENode从发布1.0开始到现在的差不多两年时间,我几乎每周都在更新设计或实现代码.以至 ...
- Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...
- [译]Introducing ASP.NET vNext and MVC 6
原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source=tuicool Part of the ASP.NET vNext init ...
- js浏览器对象模型-BOM
bom browse object model 浏览器对象模型. 也就是window对象下面的东西. location 对象 window.location.href 表示打开窗口的路径. windo ...