最近学东西学的有点太散了,歇一阵子,重新完善之前的JQ插件,今天先上拖拽吧

// JavaScript Document
(function($){
var defaults = {
actionElement : "", //获得事件的元素,非必填项
rangeElement : window, //可拖动范围的元素 非必填
direction : "", //默认为空,表示何以任意拖动, 可选值为vertical或者horizontal
magnetic : 0 //磁性吸附尺寸 非必填
} var opts = ""; //储存参数 var disX;
var disY; //保存后续需要操作的元素
var dragEle,actionEle,rangeElement; //像jQuery对象下添加方法
$.fn.drag = function( options ) { opts = $.extend( defaults , options || {} );
dragEle = $( this ); rangeEle = $( opts.rangeElement ); var actionSelector;
opts.actionElement != "" ? actionSelector = opts.actionElement : actionSelector = null ; dragEle.on("mousedown",actionSelector,dragFn); return $(this).each(function(){});
} //限制范围
function range ( value , maxValue , minValue) {
if( value > maxValue - opts.magnetic ){
return maxValue;
}else if( value < minValue + opts.magnetic ){
return minValue;
}
return value;
} //拖拽的主体函数
function dragFn(ev){ disX = ev.clientX - dragEle.offset().left;
disY = ev.clientY - dragEle.offset().top; $(document).on("mousemove",mousemove);
$(document).on("mouseup",mouseup); return false;
} //鼠标移动事件
function mousemove (ev) {
var left = ev.clientX - disX;
var top = ev.clientY - disY; left = range(left , rangeEle.width() - dragEle.width() , 0);
top = range(top , rangeEle.height() - dragEle.height() , 0); switch( opts.direction ){
case "horizontal" :
dragEle.css({"left" : left});
break;
case "vertical" :
dragEle.css({"top" : top });
break;
default :
dragEle.css({"left" : left,"top" : top });
break;
}
} //鼠标抬起移除事件
function mouseup () {
$(document).off("mouseup",mouseup);
$(document).off("mousemove",mousemove);
} })(jQuery)

使用方法

$("#drag").drag({
actionElement : ".action",
rangeElement : "#container",
direction : "horizontal",
magnetic : 15
});

暂时想不出来需要暴漏出来哪些参数比较有用,暂且这样,后续若有必要再修改

不断优化,重构我的代码-----拖拽jquery插件的更多相关文章

  1. 11个好用的jQuery拖拽拖放插件

    这次我们整理一些拖拽播放类型的jQuery插件,这些可能不是很常用,但偶尔会有网站设计项目用到,特别是后台相关的开发项目,这个拖放排序功能一般都会有,所以适合大家收藏起来,方便日后使用.接下来一起看盾 ...

  2. Sortable拖拽排序插件数据筛选

    后台有拖拽排序功能,然而前段在开发的时候,一整页的数据都发给后端了. 于是查看前端代码,想到了如下解决办法,即先把排序前的保存,然后对比排序后的,有差异的才发回给后端. var new_ids_ord ...

  3. div/dom元素拖拽缩放插件,纯js实现拖拽缩放,不依赖jQuery~

    产品需求,需要用到对div(dom)进行拖拽缩放操作,看到有好多插件,要么依赖jQuery,要么文件太大. 封装了一个插件,不压缩状态下5KB. html <!DOCTYPE html> ...

  4. HTML5 拖拽 & fabric 插件

    ### 拖拽 //html <div ondrop="drop(event)" ondragover="allowDrop(event)">< ...

  5. 拖拽 ‘vue-grid-layout’ 插件了解下

    我接触到vue-grid-layout是通过我们公司的项目,感觉还是比较简单上手的,大概看了有1个小时吧,我是个行动派,就是觉得实践出真知,但是记性也不太好,有时候自己踩过的坑会忘记,会改但是会忘记原 ...

  6. 拖拽排序插件 ---- Dragula

    相关链接:  https://github.com/bevacqua/react-dragula https://github.com/bevacqua/react-dragula demo:  ht ...

  7. vue-draggable-resizable 拖拽缩放插件

    安装: npm install --save vue-draggable-resizable 使用: <template>   <div style="height: 50 ...

  8. 如何将Js代码封装成Jquery插件

    很多相同的Jquery代码会在很多页面使用,每次都复制粘贴太麻烦了,不如封装成一个Jquery插件就方便了,至于影响网页的速度不,我就没有测试了哈. 代码如下 这是一个自定闪烁打印文字的Jquery特 ...

  9. .net mvc mssql easyui treegrid 及时 编辑 ,支持拖拽

    这里提到了,1个问题,怎么扩展 Easyui 参见: http://blog.csdn.net/chenkai6529/article/details/17528833 @{ ViewBag.Titl ...

随机推荐

  1. javascript中的冒泡排序

    冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列. var array=[9,8,7,6,5,4,3,2,1]; 第一轮比较:8,7,6,5,4,3,2,1,9      交换了 ...

  2. SpringMVC Controller介绍

    SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...

  3. render()方法是render_to_response

    自django1.3开始:render()方法是render_to_response的一个崭新的快捷方式, 前者会自动使用 RequestContext.而后者必须coding 出来,这是最明显的区别 ...

  4. 音频指纹(Philips)

    参考<A Highly Robust Audio Fingerprinting System> Philips 音频指纹提取流程: 仿真效果: 第一个图为歌曲1的第一个指纹. 第二个图为歌 ...

  5. PHP - xhprof+Graphviz 安装配置

    简介:XHProf是Facebook放出的轻量级调试工具.和Xdebug相比,XHProf更加易用和可控,尤其是生成流程图和调试数据对比的功能很好很强大. 参考:http://us2.php.net/ ...

  6. 找出只含有2,3,5因子构成的数的第N个

    https://leetcode.com/problems/ugly-number-ii/ 刚开始,一看题以为用刷选法,但是当数据量大时明显不行.然后感觉用含2,3,5因子的个数当做进制来处理还是不行 ...

  7. JavaScript链表

        //实现列表类     function list() {         this.listSize = 0;//元素个数 属性         this.pos = 0;//当前位置 属性 ...

  8. 与你相遇好幸运,使用gulp流程化Typescript后端开发

    tsc --init {    "compilerOptions": {        "module": "commonjs",      ...

  9. 自动换行 lable换行 div换行 span换行 label换行

    label  word-break: break-all; white-space: normal;

  10. sysbench的安装与使用(with MySQL)

    sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试. 项目主页: http://sysbench.sourceforge.net/ 安装文档htt ...