不断优化,重构我的代码-----拖拽jquery插件

最近学东西学的有点太散了,歇一阵子,重新完善之前的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
});

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

时间: 2024-08-24 20:10:41

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

自定义拖拽框插件

1.HTML代码如下 注意引入jquery和自定仪的drag.js , 路径正确打开页面就能看到效果 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus?"> <meta name="Author&

将代码转化成jQuery插件

将类似的jQuery代码,转化为插件,可以提高代码的重用性,并能够有效的组织代码. (function($){ $.fn.yourPluginName=function(){ //Your code goes here return this; } })(jQuery) 总结以便之后查阅. 将代码转化成jQuery插件

jQuery拖拽小插件

基本实现思路是利用了onmousedown,onmouseup,onmousemove三种事件和css中的绝对定位 插件功能: 1.设置拖拽热点 2.设置被拖拽对象 3.设置拖拽范围 默认情况下,拖拽热点和被拖拽对象是同一个元素,拖拽范围是文档窗口 jQuery代码 (function($){ $.fn.drag=function(opts){ var defaults={ dragObj:$(this), scope:{ left:0, top:0, right:$(document).wid

vue拖拽排序插件vuedraggable的使用 附原生使用方法

Vue中使用 先下载依赖: npm install vuedraggable -S 项目中引入 import draggable from 'vuedraggable' 注册 components: { draggable }, demo: <template> <draggable v-model="colors" @update="datadragEnd" :options = "{animation:500}"> &

js拖拽 jquery实现

1 <!doctype html> 2 <html> 3 <head> 4 <meta http-equiv="content-type" content="text/html;charset=utf-8"/> 5 <title>拖拽</title> 6 <style> 7 #drag{ 8 position:absolute; 9 width:200px; 10 height:10

拖拽排序插件 ---- Dragula

相关链接:  https://github.com/bevacqua/react-dragula https://github.com/bevacqua/react-dragula demo:  https://bevacqua.github.io/dragula/ 引用dragula.css  否则没有拖拽时的样式效果,可在.gu-mirror里面调整拖拽时的样式.

公用拖拽功能插件

(function($){ var defaults = { // 是否可拖拽默认为true enable : true, // 要拖动的对象,默认为handle的父级的父级元素 target : null, // 回调 callback : { // move时的回调 onMove : function(e){ }, // drop时的回调 onDrop : function(e){ } } }; $.fn.name= function(options){ //name处为要绑定拖拽效果的对象

vue-draggable-resizable 拖拽缩放插件

安装: npm install --save vue-draggable-resizable 使用: <template> <div style="height: 500px; width: 500px; border: 1px solid red; position: relative;"> <vue-draggable-resizable :w="100" :h="100" v-on:dragging="

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

很多相同的Jquery代码会在很多页面使用,每次都复制粘贴太麻烦了,不如封装成一个Jquery插件就方便了,至于影响网页的速度不,我就没有测试了哈. 代码如下 这是一个自定闪烁打印文字的Jquery特效 HTML代码如下: <div id="code"> <p>/**</p> <p>*2014-2-12</p> <p>*代码自动闪烁输入</p> <p>*/</p> 2014-2-