Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了拖拽的原理 - 孙悟饭

标签: javascript 应用 分析 | 发表时间:2015-01-14 10:57 | 作者:孙悟饭
出处:

今天我们来看看如何让拖拽的物体不能拖出某个div之外和拖拽的吸附功能

上次讲到我们的拖拽是不可拖出可视区范围的,在这基础上我们加个父级的div,不让他拖出父级。原理和之前的一样,简单吧。

<div id="div2">
<div id="div1">

</div>
</div>
<style type="text/css">
#div1 {
width: 100px;
height: 100px;
background: red;
position: absolute;
}
#div2 {
width: 400px;
height: 300px;
background: #CCCCCC;
position: relative;
}
</style>
<script type="text/javascript">
// 拖拽空div 低版本的火狐有bug
window.onload = function() {
var oDiv = document.getElementById("div1");
var oDiv2 = document.getElementById("div2");
var disX = 0;
var disY = 0;
oDiv.onmousedown = function(ev) {
var oEvent = ev || event;
disX = oEvent.clientX - oDiv.offsetLeft;
disY = oEvent.clientY - oDiv.offsetTop;

document.onmousemove = function(ev) {
var oEvent = ev || event;
// 存储div当前的位置
var oDivLeft = oEvent.clientX - disX;
var oDivTop = oEvent.clientY - disY;

if (oDivLeft < 0) {
oDivLeft = 0;
} else if (oDivLeft > oDiv2.offsetWidth - oDiv.offsetWidth) {
oDivLeft = oDiv2.offsetWidth - oDiv.offsetWidth;
}

if (oDivTop < 0) {
oDivTop = 0;
} else if (oDivTop > oDiv2.offsetHeight - oDiv.offsetHeight) {
oDivTop = oDiv2.offsetHeight - oDiv.offsetHeight;
}

oDiv.style.left = oDivLeft + 'px';
oDiv.style.top = oDivTop + 'px';
};

document.onmouseup = function() {
document.onmousemove = null;
document.onmouseup = null;
};
return false; // 阻止默认事件,解决火狐的bug
};
};
</script>

效果图如下: image 简单吧。

接下来就是如何让他自动吸附。

其实这个大家会经常用到,比如ps里面有个小窗拖着拖着到页面边上的时候,他就会自动吸附上去。

我们这个拖拽怎么才能有这样的功能呢?

这其实之前将运动的时候提到过,就好比打车你不可能分毫不差的让司机停在那里,他肯定是停在靠近目的地的地方。

那程序也是一样的,差不多快到了就直接赋值即可。假设我拖拽的物体离左边50px的时候,我就认为他到了左边,那直接赋值为0,他就会自动吸附上去。

原理很简单,看看代码如何实现的吧。稍作修改即可

<script type="text/javascript">
window.onload = function() {
var oDiv = document.getElementById("div1");
var oDiv2 = document.getElementById("div2");
var disX = 0;
var disY = 0;
oDiv.onmousedown = function(ev) {
var oEvent = ev || event;
disX = oEvent.clientX - oDiv.offsetLeft;
disY = oEvent.clientY - oDiv.offsetTop;

document.onmousemove = function(ev) {
var oEvent = ev || event;
var oDivLeft = oEvent.clientX - disX;
var oDivTop = oEvent.clientY - disY;


// 当left 小于50 就自动归0 这样实现吸附
if (oDivLeft < 50) {
oDivLeft = 0;
} else if (oDivLeft > oDiv2.offsetWidth - oDiv.offsetWidth) {
oDivLeft = oDiv2.offsetWidth - oDiv.offsetWidth;
}

if (oDivTop < 0) {
oDivTop = 0;
} else if (oDivTop > oDiv2.offsetHeight - oDiv.offsetHeight) {
oDivTop = oDiv2.offsetHeight - oDiv.offsetHeight;
}

oDiv.style.left = oDivLeft + 'px';
oDiv.style.top = oDivTop + 'px';
};

document.onmouseup = function() {
document.onmousemove = null;
document.onmouseup = null;
};
return false;
};
};
</script>

下一次会讲到高级应用,这些会更加的负责更加的有用。已完善我们的拖拽功能。

比如说图片的拖拽和文字的选中。比如说我们现在的这个拖拽页面上就只有一个div,在平时开发中是不会遇到的。

其实在页面上有东西的情况下,这个拖拽会出现什么问题???

下次会解决 ~ 尽请期待


本文链接: Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了拖拽的原理,转载请注明。

相关 [javascript 应用 分析] 推荐:

javascript 跨域请求详细分析

- - CSDN博客Web前端推荐文章
比如用户使用浏览器打开一个网站 (www.AAA.com)的首页,这个时候浏览器会执行来自网站www.AAA.com的一个javascript的函数,这个函数是向网站(www.BBB.com)请求数据: $.getJSON('www.BBB.com/index.php', funciton(data) {.

如何捕获和分析 JavaScript Error

- - IT技术博客大学习
标签:   Error. 前端工程师都知道 JavaScript 有基本的异常处理能力. 我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常. 但估计绝大多数前端工程师都没考虑过收集这些异常信息. 反正只要 JavaScript 出错后刷新不复现,那用户就可以通过刷新解决问题,浏览器不会崩溃,当没有发生过好了.

Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了拖拽的原理 - 孙悟饭

- - 博客园_首页
今天我们来看看如何让拖拽的物体不能拖出某个div之外和拖拽的吸附功能. 上次讲到我们的拖拽是不可拖出可视区范围的,在这基础上我们加个父级的div,不让他拖出父级. // 拖拽空div 低版本的火狐有bug. // 存储div当前的位置. return false; // 阻止默认事件,解决火狐的bug.

Chrome开发者工具之JavaScript内存分析

- - 极客521 | 极客521
内存泄漏是指计算机可用内存的逐渐减少. 当程序持续无法释放其使用的临时内存时就会发生. JavaScript的web应用也会经常遇到在原生应用程序中出现的内存相关的问题,如 泄漏和溢出,web应用也需要应对 垃圾回收停顿. 尽管JavaScript使用垃圾回收进行自动内存管理,但有效的(effective)内存管理依然很重要.

JavaScript 启动性能瓶颈分析与解决方案

- - SegmentFault 最新的文章
JavaScript 启动性能瓶颈分析与解决方案 翻译自 Addy Osmani 的. JavaScript Start-up Performance,从属于笔者的 Web 前端入门与工程实践. 本文已获得原作者授权,为InfoQ中文站特供稿件,首发地址为 这里;如需转载,请与InfoQ中文站联系.

提高 web 应用性能之 JavaScript 性能调优

- 去北方-Jack - IBM developerWorks 中国 : 文档库
JavaScript 是一个比较完善的前端开发语言,在现今的 web 开发中应用非常广泛,尤其是对 Web 2.0 的应用. 随着 Web 2.0 越来越流行的今天,我们会发现:在我们的 web 应用项目中,会有大量的 JavaScript 代码,并且以后会越来越多. JavaScript 作为一个解释执行的语言,以及它的单线程机制,决定了性能问题是 JavaScript 的软肋,也是 web 软件工程师们在写 JavaScript 需要高度重视的一个问题,尤其是针对 Web 2.0 的应用.

Javascript框架和jQuery应用情况的信息图表(Infographic)

- Will - ITeye资讯频道
我们总是想知道时下最流行的一些JavaScript框架和由于这些框架所开发的Web应用程序的比较情况. 下面就是一张体现这些比较数据的信息图表. 它包括了jQuery、Mootools、Prototype、YUI、Dojo、Extjs等这些框架的被使用情况. 从信息图表中你可以看出,比较有意思的一点就是1.3.2版本的jQuery是目前最流行的版本.

使用 SpiderMonkey 使 C++应用支持 JavaScript 脚本引擎

- DreamToTrue - C++博客-牵着老婆满街逛
转载自:http://dozb.bokee.com/1919675.html.   使用 SpiderMonkey 使 C++应用支持 JavaScript 脚本引擎. 翻译:dozb         英文版. 这个教程的目的是演示如何使你的 C++ 应用能够解释执行 JavaScript 脚本. SpiderMonkey, 是 Mozilla 项目的一部分, 是一个执行JavaScript脚本的引擎.

Codecademy – Javascript 语言教学 | 小众软件 > 在线应用

- 2楼水饺 - 小众软件
戒烟很容易,壤驷二狗戒过好多次了. 编程也很容易,二狗学过好多次了. Codecademy 是 Javascript 编程互动教学网站,通过互动对话的方式相对友好地帮新手入门. 访问: 官网 | 来自小众软件. ©2011 Thruth for 小众软件 | 原文链接 | 0 留言 | 加入我们 | 投稿 | 订阅指南.

【转载】Javascript SDK:轻松开发HTML5应用的必备工具

- - HTML5研究小组
Javascript SDK:轻松开发HTML5应用的必备工具. annie 2012-05-31 16:03    1条评论. 运算平台  Parse最新发布Javascript SDK,有了它,开发HTML 5应用变得更加简单轻松. Parse 是由Y Coumbinator所孵化的 创业公司,开发者能够在上面创建自己的应用,Parse 更加专注于移动开发者.