`

Jquery不使用ui.js来实现drag功能

阅读更多
摘自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.dragtable.js

    bootstrap-table拖拽需要dragtable.css,jquery.dragtable.js,jquery-ui.js,bootstrap-table-reorder-columns.js

    jquery.ui.min~draggble~droppable~sortable.js

    jquery.ui.min~draggble~droppable~sortable.js draggble~droppable~sortable 这三个都是难找的资源 界面拖拽或智能选择功能必备插件 一次性放出来...

    jQuery-ui Demo 官方UI插件

    最新官方jQuery UI插件 主流特效Demo,绝不含糊。 好东西不需要过多的言辞修饰,下了就知道! 所有效果说明: 基本的鼠标互动: 拖拽(drag and dropping)、排序(sorting)、选择(selecting)、缩放(resizing) 各种...

    最新jquery-ui-1.8.2.custom.zip

    拖拽(drag and dropping)、排序(sorting)、选择(selecting)、缩放(resizing) 各种互动效果: 手风琴式的折叠菜单(accordions)、日历(date pickers)、对话框(dialogs)、滑动条 (sliders)、表格排序(table sorters)、...

    jquery-ui.draggable.hold-to-drag:允许将对象从启用触摸的设备上的可滚动容器中拖出

    jquery-ui.draggable.touch-scroll-patch 进行简单的调整即可将对象从启用触摸的设备上从可滚动容器中拖出。... 要求: jquery.ui.widget.js jquery.ui.mouse.js jquery.ui.draggable.js jquery.ui.touch-punch.js

    jquery.simulate.drag-sortable.js:在JQuery UI Sortable小部件内模拟拖动事件(主要用于集成测试)

    在JQuery UI Sortable上模拟拖动尽管提供了模拟许多JQuery和JQuery UI事件的功能,但由于使JQuery UI Sortable小部件触发正确事件所需的复杂行为,因此它无法为JQuery UI Sortable小部件模拟拖动事件。 这个库允许您...

    jquery.drag.js:使用jQuery轻松拖动元素但没有jQueryUI

    jquery.drag.js 使用jQuery轻松拖动元素但没有jQueryUI 主要基于在那里找到的脚本和评论: : 我刚刚补充说: 小更正支持触摸事件每次移动后回调用法 : $('div').drags({ handle: ".myHandle", onMoved: function(){...

    jqert ui demo

    ui.mouse.js ui.draggable.js ui.draggable.ext.js 用法:文件载入后,可以拖拽class = "block"的层 $(document).ready(function(){ $(".block").draggable(); }); draggable(options)可以跟很多选项 选项说明:...

    dragtable.css

    bootstrap-table拖拽需要dragtable.css,jquery.dragtable.js,jquery-ui.js,bootstrap-table-reorder-columns.js

    iquery经典教程

    http://docs.jquery.com/UI/Draggables/draggable#options 选项实例:http://dev.jquery.com/view/trunk/plugins/ui/tests/draggable.html 1.2 Droppables 所需要文件,drag drop ui.mouse.js ui.draggable.js ui....

    精通jQuery(2012年版)

    Part 4: Using jQuery UI........................................................................................467 Chapter 17: Setting Up jQuery UI ......................................................

    jQuery排序插件html5sortable.zip

    类似 jQuery-UI 可排序插件的 API 和功能 可以在 IE 5.5 , Firefox 3.5 , Chrome 3 , Safari 3 和 Opera 12 上使用 用法: 从这里下载 here,然后: ul class="sortable"> li>Item 1 li>Item 2 ...

    jquery.ui.draggable中文文档(原文翻译)

    如果需要的不仅仅是拖, 而是一个完整的拖放功能, 请参阅JQuery UI 的Droppable插件, 该插件提供了一个draggable放的目标.所有的回调函数(start, stop, drag等事件)接受两个参数: event: 浏览器原生的事件ui: 一个...

    jQuery LigerUI V1.1.9

    jQuery LigerUI 是基于jQuery的一系列UI控件组合,简单而又强大,致力于快速打造Web前端界面解决方案。 因为是前端控件,跟服务器无关,可以适合.net,jsp,php等等web服务器环境。目前全部插件的打包压缩JS只有100K...

    jquery需要的所有js文件

    jquery需要的所有js文件 /*! * jQuery UI 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * ...

    JQuery可拖拽的DIV排序

    通过鼠标拖动来改变div的顺序,来实现指标的排序。使用了Jquery,jquery-ui.js,sortable,自己原创,效果很绚。 配合ThinkPHP可以实现把数据入库,由于使用的是ubuntu, 文件编码格式都是utf-8.

    JQuery UI的拖拽功能实现方法小结

    JQuery UI提供的API极大简化了拖拽功能的开发。只需要分别在拖拽源(source)和目标(target)上调用draggable和droppable两个函数即可。 拖拽原理 首先要明确几个概念。 ource:拖拽源,要拖动的元素。 taerget:拖放...

    drag_n_drop:AngularJS 1.x拖放指令(jQuery UI)

    AngularJS 1.x拖放指令(jQuery UI) ###演示: ##特征: 支持jQuery UI的所有功能可拖放全局和每个元素轻松配置代码小(如果您已经在项目中使用jQuery和jQuery UI) ##入门:(1)使用凉亭安装bower install ...

    jQuery LigerUI V1.2.2

    jQuery LigerUI 是基于jQuery的一系列UI控件组合,简单而又强大,致力于快速打造Web前端界面解决方案。 因为是前端控件,跟服务器无关,可以适合.net,jsp,php等等web服务器环境。目前全部插件的打包压缩JS只有150K...

    jQuery可水平垂直自由拖拽代码.zip

    jQuery可水平垂直自由拖拽代码是一款基于drag.js插件实现的支持水平拖拽,垂直拖拽,自由拖拽等不同特效。

Global site tag (gtag.js) - Google Analytics