jquery 实现拖动的插件,试了几个,interface 是一个,但是 bug 太多,代码又复杂不好修改,就放弃了。
今天找到了一个叫做 easydrag 的,但用了下也不灵活,于是扩充了一下,现在可以指定拖动的 handle.
jquery.easydrag.js(以下
绿色部分是我增加或修改的代码):
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->/**
* EasyDrag 1.3 - Drag & Drop jQuery Plug-in
*
* For usage instructions please visit http://fromvega.com
*
* Copyright (c) 2007 fromvega
*/
(function($){
// to track if the mouse button is pressed
var isMouseDown = false;
// to track the current element being dragged
var currentElement = null;
// callback holders
var dropCallbacks = {};
var dragCallbacks = {};
// global position records
var lastMouseX;
var lastMouseY;
var lastElemTop;
var lastElemLeft;
// returns the mouse (cursor) current position
$.getMousePosition = function(e){
var posx = 0;
var posy = 0;
if (!e) var e = window.event;
if (e.pageX || e.pageY) {
posx = e.pageX;
posy = e.pageY;
}
else if (e.clientX || e.clientY) {
posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
}
return { 'x': posx, 'y': posy };
}
// updates the position of the current element being dragged
$.updatePosition = function(e) {
var pos = $.getMousePosition(e);
var spanX = (pos.x - lastMouseX);
var spanY = (pos.y - lastMouseY);
$(currentElement).css("top", (lastElemTop + spanY));
$(currentElement).css("left", (lastElemLeft + spanX));
}
// when the mouse is moved while the mouse button is pressed
$(document).mousemove(function(e){
if(isMouseDown){
// update the position and call the registered function
$.updatePosition(e);
if(dragCallbacks[currentElement.id] != undefined){
dragCallbacks[currentElement.id](e);
}
return false;
}
});
// when the mouse button is released
$(document).mouseup(function(e){
if(isMouseDown){
isMouseDown = false;
if(dropCallbacks[currentElement.id] != undefined){
dropCallbacks[currentElement.id](e);
}
return false;
}
});
// register the function to be called while an element is being dragged
$.fn.ondrag = function(callback){
return this.each(function(){
dragCallbacks[this.id] = callback;
});
}
// register the function to be called when an element is dropped
$.fn.ondrop = function(callback){
return this.each(function(){
dropCallbacks[this.id] = callback;
});
}
// set an element as draggable - allowBubbling enables/disables event bubbling
$.fn.easydrag = function(allowBubbling, handle_ids){
return this.each(function(){
// if no id is defined assign a unique one
if(undefined == this.id) this.id = 'easydrag'+time();
if (handle_ids) {
// 修改鼠标光标为移动的形状
for (var i=0; i<handle_ids.length; i++) {
$("#" + handle_ids[i]).css("cursor", "move");
}
} else {
$(this).css("cursor", "move");
}
// when an element receives a mouse press
$(this).mousedown(function(e){
if (handle_ids) {
// 判断是否是在拖动某个 handle
var srcElement;
if (e)
srcElement = e.srcElement;
else
srcElement = window.event.srcElement;
var exists = false;
if (srcElement.id != undefined) {
for (var i=0; i<handle_ids.length; i++) {
if (handle_ids[i] == srcElement.id) {
exists = true;
break;
}
}
}
if (!exists)
return false;
}
// set it as absolute positioned
$(this).css("position", "absolute");
// set z-index
$(this).css("z-index", "10000");
// update track variables
isMouseDown = true;
currentElement = this;
// retrieve positioning properties
var pos = $.getMousePosition(e);
lastMouseX = pos.x;
lastMouseY = pos.y;
lastElemTop = this.offsetTop;
lastElemLeft = this.offsetLeft;
$.updatePosition(e);
return allowBubbling ? true : false;
});
});
}
})(jQuery);
调用代码:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> win.easydrag(false, ['oDragHandle_' + id]);
// 自定义的拖放后处理,记录目标移动到的新位置
win.ondrop(function(){
// save position info
notesData[id].x = parseInt(win.css("left"));
notesData[id].y = parseInt(win.css("top"));
});
转载地址:http://www.cnblogs.com/RChen/archive/2007/09/20/easydrag.html
分享到:
相关推荐
《jQuery拖拽插件drag.js深度解析》 在网页开发中,实现元素的拖放功能是一种常见的交互设计,它能够提升用户体验,使用户能够通过直观的拖拽操作与页面进行互动。jQuery作为一款广泛使用的JavaScript库,提供了...
`jquery.event.drag`是jQuery的一个扩展插件,由Jörn Zaefferer开发,它是jQuery UI中的`draggable`组件的一个轻量级替代品,适用于那些不需要完整UI框架的项目。这个插件为jQuery对象添加了拖放事件处理,使得...
jQuery UI是基于jQuery库的一个扩展,它提供了丰富的UI组件,如对话框、日期选择器、滑块等,而Drag插件则是其基础交互组件之一。通过Drag插件,我们可以轻松地赋予HTML元素拖放功能,使用户可以直观地进行操作。 *...
idrag是由开发者创建的,用于扩展jQuery的核心功能,使用户能够轻松地实现DOM元素的拖动和大小调整。这个插件特别适用于那些需要交互式界面的应用,例如图像编辑器、布局管理器或者任何需要动态调整元素尺寸的场景。...
jquery drag插件, 拖放插件(Drag and Drop) UI/Draggables. EasyDrag jQuery Plugin. jQuery Portlets. jqDnR - drag, drop resize. Drag Demos.
表格拖拽排序插件 Table Drag and Drop JQuery plugin v0.7 最新0.7版本
`jquery.event.drag-2.0.js`是该插件的主要实现文件,它扩展了jQuery的核心事件系统,为DOM元素添加了自定义的拖放事件处理。这些事件包括`dragstart`、`drag`、`dragend`等,它们分别对应拖放操作的开始、进行中和...
bootstrap-table拖拽需要dragtable.css,jquery.dragtable.js,jquery-ui.js,bootstrap-table-reorder-columns.js
**jQuery 插件详解** jQuery 是一款广泛应用于前端开发的 JavaScript 库,它极大地简化了JavaScript的DOM操作、事件处理、动画设计以及AJAX交互。本文将介绍10个实用且具有创新性的jQuery插件,这些插件可以提升...
Dragscroll 是一款极小的拖拽风格的 JavaScript 库(978 字节)。它可以按住鼠标按钮实现滚动。 标签:dragscroll
《jQuery拖拽插件dragscroll.js:实现高效交互体验》 在网页设计与开发中,用户界面的交互性是至关重要的。一个优秀的交互设计能够提高用户体验,使用户更加便捷地浏览和操作网页内容。jQuery作为一款强大的...
【jQuery Drag插件使用介绍】 jQuery Drag插件是一款强大的JavaScript库,它允许用户轻松地实现元素的拖放功能,极大地增强了网页的交互性。在HTML、CSS和JavaScript的基础上,jQuery Drag插件通过简单的API使...
3. **jOrgChart插件**: `jOrgChart`由开发者创建,它扩展了jQuery的功能,提供了一套简便的方法来构建和管理树形图,支持拖放、展开/折叠节点等功能。 ### 二、jOrgChart的使用步骤 1. **引入依赖**: 首先需要在...
jQuery拖拽排序插件dragarrange是一款非常实用的前端开发工具,它允许用户通过鼠标拖放操作对元素进行动态排序,极大地提升了交互体验。这款插件兼容Internet Explorer浏览器,因此在许多仍然需要支持旧版浏览器的...
jQuery.dragmove 是 DOM 元素拖拽扩展插件。 支持的浏览器: – Google Chrome– Safari ( Desktop and Mobile )– Internet Explorer ( 9, 10, 11 )– Firefox 标签:jQuery
在jQuery的基础上,"drag拖动插件"进一步扩展了其功能,使得开发者无需深入理解底层的浏览器差异,就能轻松实现拖放功能。该插件的全称为"jQuery.event.drag-2.2",这表明它是jQuery的一个事件处理插件,版本为2.2,...
5. **自定义行为**:除了内置功能,我们还可以通过扩展插件来实现更复杂的拖放行为。例如,通过监听`drag`事件,我们可以实现拖放元素与其他元素的碰撞检测,或者在拖放过程中更新服务器端的数据。 6. **兼容性**:...
3. **jQuery Easy Draggable**:这个插件以其轻量级和简单易用为特点,适合那些只需要基础拖放功能且不希望引入大型库的项目。它提供最少的配置选项,如`handle`用于指定拖动手柄,以及简单的事件回调,如`...