• jquery插件之拖拽


    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧。

    此插件旨在实现目前较为流行的拖拽效果,您可以根据自己的实际需求来设置被拖拽元素是否可以被拖拽至可视区域以外。整体代码如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <style>
    *{margin:0;padding:0;}
    .box{position:absolute;left:100px;top:100px;border:1px solid #eee;width:150px;height:150px;padding:10px;cursor:move;}
    </style>
    <script type="text/javascript" src="../test/jquery-1.7.1.js"></script>
    <script type="text/javascript" src="jquery.drag.js"></script>
    </head>
    
    <body>
    <div class="box">拖拽我吧!</div>
    <script>
    $(function(){
        $(".box").drag({
            out:false    //false 默认匹配元素不能被拖拽至可视区域以外
            });
        })
    </script>
    </body>
    </html>

    拖拽插件jquery.drag.js代码:

    /*
    *drag 0.1
    *Copyright (c) 2015 小坏 http://tnnyang.cnblogs.com
    *Dependenc jquery-1.7.1.js
    */
    ;(function(a){
        a.fn.drag = function(options){
            var defaults = {   //默认参数
                out:false   //默认匹配元素不会被拖至可视区域以外
                }
            var opts = a.extend(defaults, options);
            
            this.each(function(){
                var obj = a(this);    
                obj.mousedown(function(e){    
                    var e = e || event;    //区分IE和其他浏览器事件对象
                    var x = e.pageX - obj.offset().left;    //获取鼠标距离匹配元素左侧的距离                        
                    var y = e.pageY - obj.offset().top;     //获取鼠标距离匹配元素顶端的距离
                    
                    $(document).mousemove(function(e){
                        var e = e || event;
                        var _x = e.pageX - x;        //动态获取元素左侧距离
                        var _y = e.pageY - y;
                        if(!opts.out){                        
                            var maxW = $(window).width() - obj.outerWidth();    //除去匹配元素宽度后的可视区域的宽度
                            var maxH = $(window).height() - obj.outerHeight();   //除去匹配元素高度后的可视区域的高度
                            _x = _x < 0 ? 0 : _x;      //保证匹配元素不会被拖至可视区域以外
                            _x = _x > maxW ? maxW : _x;
                            _y = _y <0 ? 0 : _y;
                            _y = _y > maxH ? maxH : _y;
                            }else{
                                _x = _x;
                                _y = _y;
                                }        
                        obj.css({left:_x,top:_y});
                    }).mouseup(function(){
                        $(this).unbind("mousemove");  //当鼠标抬起  删除移动事件   匹配元素停止移动
                        });
                    });
                
                })
            }
        })(jQuery);

    点击下载拖拽DEMO

  • 相关阅读:
    ES6中的class的详解
    JavaSrcipt中字符串和数组容易搞混的操作
    ES6中的数据结构Map的理解和描述
    ES6中新增数据结构Set的理解和用法详情描述
    ES6中的Promise的用法总结
    JS中的async/await的用法和理解
    字节跳动、拼多多前端面经
    前端项目优化 -Web 开发常用优化方案、Vue & React 项目优化
    记几个 DOM 操作技巧
    JavaScript 面试题
  • 原文地址:https://www.cnblogs.com/tnnyang/p/4795442.html
Copyright © 2020-2023  润新知