p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #2b7ec3 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; min-height: 36.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #d74200 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #289c97 }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #4a8a01 }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #060606 }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #929151; min-height: 36.0px }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #4f5d66 }
p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #a5b2b9 }
p.p10 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #4663cc }
p.p11 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #e48b00 }
p.p12 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #698906 }
span.s1 { color: #4f5d66 }
span.s2 { color: #2b7ec3 }
span.s3 { color: #48565d }
span.s4 { color: #289c97 }
span.s5 { color: #d74200 }
span.s6 { color: #000000 }
span.s7 { color: #060606 }
span.s8 { color: #929151 }
span.s9 { color: #ad42ef }
span.s10 { color: #698906 }
span.s11 { color: #4a8a01 }
span.s12 { color: #d16400 }
span.s13 { color: #4663cc }
span.s14 { color: #b58a00 }
span.s15 { color: #a5b2b9 }
span.s16 { color: #e48b00 }
span.Apple-tab-span { white-space: pre }

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<style type="text/css">

#big {

height: 800px;

width: 800px;

background-color: #008000;

position: relative;

}

#small {

height: 100px;

width: 100px;

background-color: orangered;

position: absolute;

}

</style>

</head>

<body>

<div id="big">

拖拽有内容的div,在浏览器上都会有bug 解决FF和chrome上的bug只需要加上return false就可以了 解决低版本IE上的bug就需要用到事件捕获setCapture和释放捕获releaseCapture() 为了解决兼容问题就需要做一个判断,需要两套代码

<div id="small">

解决FF和chrome上的bug只需要加上return false就可以了

</div>

</div>

</body>

<script type="text/javascript">

//拖拽有内容的div,在浏览器上都会有bug

//解决FF和chrome上的bug只需要加上return false就可以了

//解决低版本IE上的bug就需要用到事件捕获setCapture和释放捕获releaseCapture()

//为了解决兼容问题就需要做一个判断,需要两套代码

var big = document.getElementById("big");

var small = document.getElementById("small");

//鼠标按下的函数

var x = 0;

var y = 0;

small.onmousedown = function(ev) {

var oEvent = ev || event;

x = oEvent.clientX - small.offsetLeft;

y = oEvent.clientY - small.offsetTop;

if(small.setCapture) { //在IE下

//鼠标移动的函数

small.onmousemove = mouseMove;

//鼠标抬起的函数

small.onmouseup = mouseUp;

//解决IE下有内容的拖拽情况下的bug

//用到捕获

small.setCapture();

} else { //在火狐下

//鼠标移动的函数

document.onmousemove = mouseMove;

//鼠标抬起的函数

document.onmouseup = mouseUp;

//return false可以解决有内容的拖拽情况下的bug

//但是对IE不适用

return false;

}

}

//定义一个鼠标移动的函数

function mouseMove(ev) {

var oEvent = ev || event;

var L = oEvent.clientX - x;

var T = oEvent.clientY - y;

//保证small不被拖出大框,并且实现磁性吸附的效果

if(L < 100) {

L = 0;

} else if(L > big.offsetWidth - small.offsetWidth) {

L = big.offsetWidth - small.offsetWidth;

}

if(T < 100) {

T = 0;

} else if(T > big.offsetHeight - small.offsetHeight) {

T = big.offsetHeight - small.offsetHeight;

}

small.style.left = L + "px";

small.style.top = T + "px";

}

//定义一个鼠标抬起的函数

function mouseUp(ev) {

this.onmousemove = null;

this.onmouseup = null;

//释放捕获,只在IE下适用,所以要做一个判断

if(this.releaseCapture) {

this.releaseCapture();

}

}

</script>

</html>

解决拖拽有内容的div的bug和兼容问题的更多相关文章

  1. 如何解决拖拽或者缩放、移动中的组件canvas有残留情况

    当我们在做某些需求,如要拖动echarts图表,或者放大缩小 这个时候,有时连续操作,或者在ie或者内存只有8G的电脑上就会出现canvs残留的情况 我们移动的时候,使用的是transform去做的移 ...

  2. 理解事件捕获。在限制范围内拖拽div+吸附+事件捕获

    一.实现的效果是在限制范围内拖拽div+吸附+事件捕获. 这里需要理解的是事件捕获,这个事件捕获也是为了兼容div在拖拽过程中,文本不被选中这个问题. 如此良辰美景,拖拽也可以很洒脱哈.先看看图, 二 ...

  3. 【j2ee】div浮动层拖拽

    背景:近期项目中需要实现弹出浮层增加数据,并且浮动层可以拖拽 解决步骤:1.浮动层实现  2.拖拽实现 多方查资料,基本实现功能,现做demo,便于以后使用 先上图片大体展示实现效果: 再上代码,展示 ...

  4. js拖拽效果详细讲解

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 使用jQuery Draggable和Droppable实现拖拽功能

    上篇博客中已经介绍了web开发中基本拖放原理,现在给出需要完成的功能.最后运行的效果如下图所示: 主要功能需求说明: 1.左侧的元素结构最后会通过Ajax call服务器的数据来生成,能支持多级元素. ...

  6. JS—实现拖拽

    JS中的拖拽示例:    1)实现拖拽思路:当鼠标按下和拖拽过程中,鼠标与拖拽物体之间的相对距离保持不变    2)实现拖拽遇到的问题:        问题1:当鼠标按下移动过快时,离开了拖拽的物体时 ...

  7. 打造 html5 文件上传组件,实现进度显示及拖拽上传,支持秒传+分片上传+断点续传,兼容IE6+及其它标准浏览器

    老早就注册了博客园帐号,昨天才发现,连博客都没开,Github也是一样,深觉惭愧,赶紧潜个水压压惊`(*∩_∩*)′ 言归正传.大概许多人都会用到文件上传的功能,上传的库貌似也不少,比如(jQuery ...

  8. JQUERY 拖拽 draggable droppable resizable selectable sortable

    今天用了jq ui的拖动碰撞功能,好不容易看到有详细的API解说,记录如下:   <script language="JavaScript" type="text/ ...

  9. 前端vue拖拽

    工作上遇到的需求:页面上需要拖拽一个小方块div拷贝至保存的容器中. 一.可拖拽 那么我们需要对小方块div进行授权,设置draggable="true"允许其被拖动 二.定义拖拽 ...

随机推荐

  1. 正则表达式提取string 中的表名

    简单版本: Regex reg = new Regex(@"(?i)\bfrom\b(?![^\[\]]*\])\s+(\[[^\[\]]+\]|\S+)"); MatchColl ...

  2. IIS7.5 webapi 不支持 Delete、Put 解决方法

    在IIS管理界面选择API的项目,选择 “Features View”. 2.  选择 “Handler Mappings” 菜单. 3. 打开“WebDAV” 选项. 4. 点击 “Request ...

  3. html初学者笔记01

    一.Html简介 HTML 是一种标记语言 忽略大小写,语法宽松 使用 HTML 标记和元素,可以: 控制页面和内容的外观 发布联机文档 使用 HTML 文档中插入的链接检索联机信息 创建联机表单,收 ...

  4. Ruby-模块和类

    首先看下他们的关系 irb(main):100:0> String.class => Class irb(main):101:0> String.class.superclass  ...

  5. C++STL学习笔记_(1)vector知识

    #include<iostream> using namespace std; #include "vector" //数组元素的 添加和删除 void main31( ...

  6. 如何将红色区域数据调用解密函数直接打印到输出控制台(例如:crt控制台)

    int main(int argc, char *argv[]) { unsigned char data[PACKET_MAX_LEN]; int data_len = 0; int socket_ ...

  7. 在oracle里写各种语句得心应手,但是在mybatis.xml文件里呢?

    这个问题我让我搞了大半天,实在气人,话不多说,直接上代码 <select id="*" resultMap="Blog" parameterType=&q ...

  8. jQuery Mobile 图标

    jQuery 图标 如需在 jQuery Mobile 中向按钮添加图标,请使用 data-icon 属性: <a href="#anylink" data-role=&qu ...

  9. NC 查询公司下所分配的组织,并存放字符串数组中

    private String[] querkFather() { String sql = "select pk_org from org_orgs start with pk_father ...

  10. SqlServer2008 无法修改表,超时时间已到 在操作完成之前超时解决方法

    在 SQL Server Management Studio 里, 通过菜单“工具-选项”打开选项对话框. 在左侧寻找“设计器-表设计器和数据库设计器”, 然后在右侧勾选“为表设计器更新重写连接字符串 ...