zoukankan      html  css  js  c++  java
  • jQuery插件开发——元素拖拽和基于鼠标位置为中心缩放

      由于项目中需要用到对元素的拖拽和缩放的实现,在网上找了一些开源的组件,感觉都比较笨重,因此决定自己写个简单的,巩固下jquery组件开发 , dragZoom

    html5页面

    <!DOCTYPE html>
    <html>
    
    <head id="Head1" runat="server">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script type="text/javascript" src="jquery-1.11.2.min.js"></script>
        <!--jquery 鼠标滚动组件-->
        <script type="text/javascript" src="jquery.mousewheel.min.js"></script>
        <!-- 拖拽和缩放 -->
        <script type="text/javascript" src="dragZoom.js"></script>
        <title></title>
    
    </head>
    
    <body style="margin:0;padding:0;">
        <div id="box" style=" 800px;height: 500px;margin:50px auto;border:1px solid red; background: #fff;position:relative;overflow:hidden;">
            <img src="1.jpg" style="background-color: Gray;position:absolute;200px;height:100px;top:100px;left:200px;" id="pan" />
        </div>
    </body>
    
    </html>

    jQuery组件

    组件的结构

    ;
    (function(jQuery, window, document, undfined) {
    
        var DragZoom = function(ele, opt) {}
        DragZoom.prototype = {}
        jQuery.fn.dragZoom = function(options) {
            
        }
    
    })($, window, document, undefined);

    插件参数

     var DragZoom = function(ele, opt) {
            this.$element = ele;
            this.defaults = {
                minzoom: 1,
                maxzoom: 5,
                zoom: 1,
                speed: 0.1,
                scope: null,
                onWheelStart: null,
                onWheelEnd: null,
                onDragStart: null,
                onDragMove: null,
                onDragEnd: null
            };
    
            this.options = $.extend({}, this.defaults, opt);
        }

    插件方法

    DragZoom.prototype = {
            Init: function() {
                var self = this;
                //参数
                self.x = this.$element.offset().left;
                self.y = this.$element.offset().top;
                self.width = this.$element.width();
                self.height = this.$element.height();
                self.scale = 1;
                self.relX = 0;
                self.relY = 0;
                self.isMoved = false;
    
                //缩放
                self.$element.on('mouseout', function(e) {
                    $("body").css('cursor', 'default');
                    return false;
                }).on('mousewheel', function(e, delta) {
                    var size = delta * self.options.speed;
                    self.options.zoom = (self.options.zoom * 10 + delta) / 10;
                    self.wheel(e, self);
                    return false;
                }).on('mousedown', function(e) {
                    $("body").css("cursor", "move")
                    self.start(e, self);
                    return false;
                }).on('mouseup', function(e) {
                    $("body").css('cursor', 'default');
                });
    
                //拖拽
                $(document).on('mousemove', function(e) {
                    // if (self.options.zoom > 1) {
                    //     self.move(e, self);
                    // }
                    self.move(e, self);
                    return false;
                }).on('mouseup', function(e) {
                    self.end(e, self);
                    return false;
                });
                return self.$element;
            },
            wheel: function(ev, self) {
    
                if (self.options.zoom >= self.options.minzoom && self.options.zoom <= self.options.maxzoom) {
                    //缩放开始回调
                    self.options.onWheelStart && typeof self.options.onWheelStart == 'function' ? self.options.onWheelStart() : null;
    
                    var cursor_x = ev.pageX,
                        cursor_y = ev.pageY;
    
                    var eleOffset = self.$element.offset();
                    self.x = eleOffset.left;
                    self.y = eleOffset.top;
    
                    self.x = self.x - (cursor_x - self.x) * (self.options.zoom - self.scale) / self.scale;
                    self.y = self.y - (cursor_y - self.y) * (self.options.zoom - self.scale) / self.scale;
    
                    self.scale = self.options.zoom;
    
                    self.$element.width(self.width * self.scale).height(self.height * self.scale);
                    self.$element.offset({
                        top: self.y,
                        left: self.x
                    });
    
                    //缩放结束回调
                    self.options.onWheelEnd && typeof self.options.onWheelEnd == 'function' ? self.options.onWheelEnd() : null;
                }
                self.options.zoom = self.options.zoom < self.options.minzoom ? self.options.minzoom :
                    (self.options.zoom > self.options.maxzoom ? self.options.maxzoom : self.options.zoom);
            },
            start: function(ev, self) {
                self.isMoved = true;
                var selfOffset = self.$element.offset();
                self.relX = ev.clientX - selfOffset.left;
                self.relY = ev.clientY - selfOffset.top;
    
                //拖拽开始回调
                self.options.onDragStart ? self.options.onDragStart() : null;
    
            },
            move: function(ev, self) {
    
                if (self.isMoved) {
                    self.y = ev.clientY - self.relY;
                    self.x = ev.clientX - self.relX;
    
                    self.$element.offset({
                        top: self.y,
                        left: self.x
                    });
    
    
                    //拖拽移动回调
                    self.options.onDragMove && typeof self.options.onDragMove == 'function' ? self.options.onDragMove() : null;
    
                }
            },
            end: function(ev, self) {
                self.isMoved = false;
                // $(document).off('mousemove').off('mouseup');
    
                //拖拽结束回调
                self.options.onDragEnd && typeof self.options.onDragEnd == 'function' ? self.options.onDragEnd() : null;
            }
        };

    调用

       jQuery.fn.dragZoom = function(options) {
            dragzoom = new DragZoom(this, options);
            return dragzoom.Init();
        }

    最终效果

  • 相关阅读:
    Java13新特性 -- 重新实现旧版套接字API
    Java13新特性 -- switch表达式动态CDS档案(动态类数据共享归档)
    Java13新特性 -- 文本块
    Java13新特性 -- switch表达式
    Java12新特性 -- 其他新增,移除,废弃项
    Java12新特性 -- 增强G1,自动返回未用堆内存给操作系统
    Java12新特性 -- 可中断的 G1 Mixed GC
    Java12新特性 -- 默认生成类数据共享(CDS)归档文件
    Java12新特性 -- 只保留一个 AArch64 实现
    python使用requests发送text/xml报文数据
  • 原文地址:https://www.cnblogs.com/dpwow/p/7813701.html
Copyright © 2011-2022 走看看