js拖拽
采用简单的闭包实现方式
/**
* Created with JetBrains WebStorm.
* User: lsj
* Date: 12-11-24
* Time: 下午12:59
* To change this template use File | Settings | File Templates.
*/
var dragmanager=(function()
{
//标识移动元素z轴坐标
var index_z=1;
//当前的拖拽元素
var drganow;
//移动标识符号
var dragbegin=false;
//鼠标点击时距离div左边距离
var relativex=0;
//鼠标点击时距离div上边距离
var relativey=0;
//标识鼠标是否移出
var isout=false;
return {
/**
* 为document绑定鼠标提起事件,主要防止鼠标移动过快跳出el区域
*/
bingDocOnMouseUp:function()
{
//注册全局的onmouseup事件,主要防止鼠标移动过快导致鼠标和el不同步
document.onmouseup=function(e)
{
var ev = window.event || e;
if(isout && dragbegin)
{
//改变div的相对位置
drganow.style.left= (ev.clientX-relativex)+'px';
drganow.style.top=(ev.clientY-relativey)+'px';
drganow.style.cursor='normal';
dragbegin=false;
isout=false;
}
}
},
/**
* 将注入的元素绑定事件
* @param el
*/
registerElementEv:function(element)
{
element.onmousedown=function(e)
{
var ev = window.event || e;
var clientx=ev.clientX;
var clienty= ev.clientY;
var left= parseInt(this.style.left.substring(0, this.style.left.indexOf("p")));
var top= parseInt(this.style.top.substring(0, this.style.top.indexOf("p")));
relativex=clientx-left;
relativey=clienty-top;
index_z++;
this.style.zIndex=index_z;
drganow=this;
dragbegin=true;
}
element.onmousemove=function(e)
{
var ev = window.event || e;
//开始拖拽
if(dragbegin)
{
//改变div的相对位置
this.style.left= (ev.clientX-relativex)+'px';
this.style.top=(ev.clientY-relativey)+'px';
this.style.cursor='move';
}
}
element.onmouseout=function(e)
{
isout=true;
}
element.onmouseup=function(e)
{
var ev = window.event || e;
if(dragbegin)
{
//改变div的相对位置
drganow.style.left= (ev.clientX-relativex)+'px';
drganow.style.top=(ev.clientY-relativey)+'px';
drganow.style.cursor='normal';
dragbegin=false;
}
}
}
}
})();
1.采用闭包的形式实现 ,方便后期的维护,将移动过程所需的变量全部转移进gridmanager里面
2.拖拽过程中 鼠标移动过快导致移动元素跟不上鼠标的移动,所以要注册document.oumouseup事件,该事件的开关是有移动元素的onmouseout事件触发的
3.拖拽的过程中可能会触发浏览器自身的onmousemove的select事件,可以进行屏蔽ie下是onmousemove="document.selection.empty()"
分享到:
相关推荐
js拖拽 采用简单的闭包实现方式 代码如下: /** * Created with JetBrains WebStorm. * User: lsj * Date: 12-11-24 * Time: 下午12:59 * To change this template use File | Settings | File Templates. */ var ...
2. **闭包机制**:在JavaScript中,闭包是一种特殊的函数,可以访问其自身作用域、外部函数作用域以及全局作用域的变量。在事件处理函数中,由于事件触发时可能在循环或其他上下文中,闭包用于保存和隔离变量的值,...
本压缩包提供的"js实现的跟随页面移动可拖动可关闭的在线客服代码"是利用JavaScript实现的一个实用功能,即一个可拖动、可关闭的在线客服窗口,它能跟随用户在页面上的滚动位置,提供实时的客户支持服务。...
总结,通过利用jQuery的事件处理机制和DOM操作,我们可以轻松实现拖拽功能,而无需深入学习复杂的原生JavaScript拖放API。这个简单的拖拽插件可应用于各种场景,例如窗口拖放、图像拖放等,大大提高了开发效率。在...
本主题将深入探讨如何使用原生JavaScript实现一个具备19种不同类型的对话框插件,同时支持对话框的拖动功能。我们将讨论以下几个关键知识点: 1. **DOM操作**: 在创建和管理对话框时,DOM操作是必不可少的。...
"开心农场 JS版"是一个基于JavaScript的在线游戏项目,它模拟了现实生活中农场经营的场景,用户可以在虚拟的农场上种植、收获作物,饲养动物,体验农场生活。在这个项目中,JavaScript作为主要的编程语言,负责处理...
在本案例中,“Js拖动特效,一串水晶球(很强大).zip”是一个包含JavaScript实现的动态特效项目,其核心是模拟台球游戏中的杆击效果,用户可以拖动球体,其他球体会根据物理规则进行反应,呈现出类似水晶球连锁反应的...
JavaScript的高级特性,如闭包、原型链、异步编程(Promise和async/await),对于优化拖拽布局框架的性能和用户体验至关重要。闭包可以实现数据的封装和私有化,原型链则用于实现对象的继承和方法共享。在处理拖拽...
下面我们将详细讲解如何使用JS面向对象编程实现拖拽功能,并对比面向过程的实现方式。 首先,让我们回顾一下原始的面向过程实现。这段代码通过全局变量和事件监听器实现了拖动一个元素的效果。当鼠标按下时,记录...
【JavaScript实现拖拽元素选择与删除详解】 在网页交互中,拖放功能是一种常见的用户界面交互方式,使得用户可以通过简单的鼠标操作完成元素的选择和移动。本文将详细介绍如何使用JavaScript实现拖拽元素的选择以及...
【标题】:“毕业设计-基于JavaScript的cesium可视化系统实现” 【内容】: 在现代Web开发中,JavaScript作为主要的前端开发语言,被广泛应用于构建交互式和动态的网页应用。本毕业设计聚焦于利用JavaScript结合...
JQ.MoveBox.js是一个简易的拖拽插件示例,它不仅展示了如何使用jQuery实现拖拽效果,还涵盖了如何制作一个基本的jQuery插件。通过阅读和理解这个插件的代码,开发者可以学习到如何通过原生JavaScript和jQuery来实现...
在前端开发中,拖拽布局框架是实现用户交互和动态界面设计的重要工具。这些框架允许用户通过简单的拖放操作来调整元素的位置和大小,从而创建个性化的布局。本文将主要探讨与前端拖拽布局框架相关的HTML、CSS以及...
在拖动过程中,插件会实时更新元素的位置,以实现拖拽效果。同时,它可以修改拖动元素的样式,以视觉上突出显示正在拖动的状态。 当拖动到目标位置时,插件会触发特定的事件,并可能根据需求改变目标位置的样式,...
JavaScript(简称JS)是前端开发的核心技术之一,用于实现网页的动态效果和交互。jsxmind是基于JavaScript的开源思维导图工具,可以帮助开发者创建、编辑和分享思维导图。本教程将围绕JS基础、jsxmind的使用以及在...
在这个项目中,`jquery-1.7.2.js`可能用于简化DOM操作和事件处理,但HTML5的File API和拖放API主要依赖原生JavaScript实现。至于`control`和`core`两个文件夹,它们可能是额外的JavaScript库或工具,可能包含了对...
这些特效可以使用 JavaScript 库或框架来实现,例如 jQuery、React 等。 此外,还需要了解 JavaScript 的高级特征,例如函数、闭包、prototype 等。这些高级特征可以帮助开发者创建更加复杂的交互式应用程序。 三...
为了实现8级JS联动,开发者需要有扎实的JavaScript基础,理解函数、对象、数组、闭包等概念,同时熟练掌握DOM API,如`getElementById`、`querySelector`、`addEventListener`等方法。此外,可能还需要了解Promise...
- **事件处理**:JavaScript通过addEventListener或attachEvent等方法监听用户的点击、拖动等交互,实现棋子的选取和移动。 - **DOM操作**:Document Object Model (DOM)是HTML和XML文档的结构表示,JavaScript...