摘自
http://css-tricks.com/snippets/jquery/draggable-without-jquery-ui/
======================
这里首先要知道几个东西: pageX, pageY, offset().top, offset().left
pageX and pageY:
Relative the to the top left of the fully rendered content area in the browser. This reference point is below the url bar and back button in the upper left. This point could be anywhere in the browser window and can actually change location if there are embedded scrollable pages embedded within pages and the user moves a scrollbar.
这两个是到浏览器工具栏,也就是下图的后退键左下角边框的距离。
就拿下图来说,
点击左上角的border的边角的时候,会显示
pageX=10px, pageY=10px,
这个10也就是该边角到浏览内容最左边的距离。
而offset().top和offset().left所获取的是当前节点到根节点的距离。
=========================
具体实现代码如下:
(function($) {
$.fn.drags = function(opt) {
opt = $.extend({
handle : "",
cursor : "move"
}, opt);
if (opt.handle === "") {
var $el = this;
} else {
var $el = this.find(opt.handle);
};
return $el.css("cursor", opt.cursor).on("mousedown", function(e) {
if (opt.handle === "") {
var $drag = $(this).addClass("draggable");
} else {
var $drag = $(this).addClass("active-handle").parent().addClass("draggable");
};
//1. 首先获取了pos_y=$drag.offset().top+drg_h-e.pageY
// pos_y代表了鼠标所移动到的位置距离目标最下边的距离。
// .....
// . .
// . .
// . M .
// .....
//
// 就是上图的M到最下面边框的距离。
var z_idx = $drag.css("z-index"), drg_h = $drag.outerHeight(), drg_w = $drag.outerWidth(), pos_y = $drag.offset().top + drg_h - e.pageY, pos_x = $drag.offset().left + drg_w - e.pageX;
// -- 关于鼠标快速移动丢失图片的问题 --
// 当离开父节点范围,快速移动图片时会丢失对图片的控制
//
//这里由于是$drag.parent().on(xxx), 因此实际上是当鼠标在被选中的图片的父节点中移动的时候,才有效果。
//但其实parent()也包含了里面所有的节点。
//比如高度为200px的body,里面有一个高度为500px的div,那么我们把图片在500px范围内快速移动,也不会丢失图片。
$drag.css("z-index", 1000).parent().on("mousemove", function(e) {
console.log(e.pageX);
$(".draggable").offset({
//2. e.pageY也就是鼠标移动到的地方距离浏览器顶部的距离。
// 将其加上pos_y, 也就是图片下边框到浏览器顶部的距离。
// 减去图片高度drg_h, 其结果就可以作为offset().top了。
top : e.pageY + pos_y - drg_h,
left : e.pageX + pos_x - drg_w
}).on("mouseup", function() {
$(this).removeClass("draggable").css("z-index", z_idx);
});
});
e.preventDefault();
}).on("mouseup", function() {
if (opt.handle === "") {
$(this).removeClass("draggable");
} else {
$(this).removeClass("active-handle").parent().removeClass("draggable");
};
});
};
})(jQuery);
使用$("#div").drags()即可
- 大小: 7.1 KB
分享到:
相关推荐
jQuery UI是基于JavaScript库jQuery的一个扩展,它提供了一系列丰富的用户界面组件,包括但不限于对话框(Dialogs)、日期选择器(Datepickers)、拖放功能(Drag and Drop)、排序功能(Sortable)以及各种可自定义...
2. **拖放(Drag and Drop)**:jQuery UI实现了元素的拖放功能,允许用户通过鼠标轻松地移动页面上的元素,这对于创建交互式应用非常有用。 3. **排序(Sortable)**:此功能允许用户对列表或表格进行排序,例如,...
1. **引入依赖**:首先,确保引入jQuery库和`jquery.event.drag.js`插件文件。 2. **初始化插件**:对需要拖动的元素应用`.eventDrag()`方法,可以设置选项,如: ```javascript $('.draggable-element')....
bootstrap-table拖拽需要dragtable.css,jquery.dragtable.js,jquery-ui.js,bootstrap-table-reorder-columns.js
总结起来,jQuery拖拽插件drag.js为开发者提供了一种便捷的方式来实现网页元素的拖放功能,它通过简单的API调用和丰富的配置选项,使得拖拽交互的实现变得轻松易行。无论是在桌面端还是移动端,都能为用户提供流畅的...
jQuery UI的核心理念是提供一套完整的、可定制的用户界面元素,这些元素包括但不限于对话框(Dialogs)、日期选择器(Datepickers)、拖放功能(Drag and Drop)、排序列表(Sortable Lists)、可折叠面板...
总结来说,`jquery.event.drag-2.0`插件是jQuery生态中一个强大的拖放解决方案,它通过丰富的事件和定制选项,使得在网页上实现拖放功能变得简单而高效。无论你是新手还是经验丰富的开发者,掌握这个插件都能提升你...
jquery.ui.min~draggble~droppable~sortable.js draggble~droppable~sortable 这三个都是难找的资源 界面拖拽或智能选择功能必备插件 一次性放出来...
在使用时,开发者需要在HTML文件中引入这个文件,然后就可以调用jQuery UI的各种方法来实现相应的功能。例如,为了创建一个基本的对话框,开发者可能这样写: ```html <!DOCTYPE html> ...
最新官方jQuery UI插件 主流特效Demo,绝不含糊。 好东西不需要过多的言辞修饰,下了就知道! 所有效果说明: 基本的鼠标互动: 拖拽(drag and dropping)、排序(sorting)、选择(selecting)、缩放(resizing) 各种...
JQuery UI 提供了诸如拖放(Drag and Drop)、对话框(Dialogs)、日历(Datepicker)、滑块(Sliders)、排序(Sortable)、可折叠(Collapsible)、可展开(Tabs)等多种组件,这些组件都经过精心设计,易于使用,并且高度可定制...
本文将详细介绍如何在Cognos中引入jQuery及其UI组件来实现这一目标,并提供具体的步骤和示例代码。 #### Cognos与jQuery的融合背景 Cognos是一款强大的商业智能工具,广泛应用于数据分析、报表制作等领域。然而,...
本篇文章将深入讲解如何使用jQuery UI Drag插件来创建可拖动的浮动div,并将其应用于布局排列,以及如何将排序结果保存到数据库。 **1. jQuery UI Drag插件介绍** jQuery UI是基于jQuery库的一个扩展,它提供了...
首先,拖放功能是基于HTML5的Drag and Drop API,但在不支持HTML5的浏览器中,我们需要依赖像jQuery这样的库来实现兼容性。jQuery.easywidgets.js就是这样一个解决方案,它将拖放功能封装成了一个易于使用的插件。 ...
jQuery UI 1.7.3.custom 是一个基于 jQuery 库的交互式用户界面组件集合,它允许开发者轻松地为网页添加各种功能丰富的交互元素,如对话框(Dialogs)、日历(Calendars)、拖放(Drag and Drop)以及许多其他可...
主要有两个关键部分:`jquery-ui.js`是主库文件,实现了所有UI组件和功能;`jquery.ui.core.js`、`jquery.ui.widget.js`等较小的文件则代表各个组件的核心功能,开发者可以根据需求选择性地引入,以减小最终的页面...
在JavaScript和jQuery的世界里,实现元素的拖拽(Draggable)和吸附(Docking)功能是一项常见的需求,尤其是在创建交互式用户界面时。本篇将深入讲解如何利用这两种技术来增强网页的动态性和用户体验。 首先,...
拖拽(drag and dropping)、排序(sorting)、选择(selecting)、缩放(resizing) 各种互动效果: 手风琴式的折叠菜单(accordions)、日历(date pickers)、对话框(dialogs)、滑动条 (sliders)、表格排序(table sorters)、...
jquery-ui.draggable.touch-scroll-patch 进行简单的调整即可将对象从启用触摸的设备上从可滚动容器中拖出。... 要求: jquery.ui.widget.js jquery.ui.mouse.js jquery.ui.draggable.js jquery.ui.touch-punch.js