javascript组件——可拖拽模态框

本文介绍了一个可拖拽的模态框组件实现方案,该组件内嵌了一个地图应用,利用ECharts库实现了地图数据可视化,并允许用户通过拖动调整模态框的位置。

可拖拽模态框,根据项目需求在模态框中生成一个map。后续将抽象出contentArea部分

var Shamen = (function(global,$,echarts){

    var defaults = {
        dragHandle:null,
    }
    var html = {
        ovl : '<div class="modal-overlay">' + '<div id="modal-content-dialog" class="modal-content"></div>' + '</div>',
        titleArea : '<div class="title-area">' + '</div>',
        contentArea: '<div id="generateChartArea">' + '</div>',
        isOk: '<button>确定</button>'
    }

    function Shamen(rootEl,options){
        this.options = $.extend({},defaults,options);
        var css = {cursor: this.options.cursor || 'move'};

        this.rootEl = rootEl;
        this.$rootEl = $(this.rootEl);
        this.$dragHandle = (this.options.dragHandle) ? $(this.options.dragHandle) : $("#modal-content-dialog");

        this.init();
        this.generateChart(this.options.chartOptions);
        this.bind();
        this.originDragHandleCursor = this.$dragHandle.css('cursor');
        this.$dragHandle.css(css);
    }

    Shamen.prototype = {
        init:function(){
            $(html.ovl).appendTo(this.$rootEl);
            $(html.titleArea).html((this.options.title)? this.options.title : '所选类型在各区的分布').appendTo("#modal-content-dialog");
            $(html.contentArea).css({height:'85%'}).appendTo("#modal-content-dialog");
            $(html.isOk).css({
                'margin-left':'10px',
                'margin-top':'-10px',
                'z-index':1000
            }).appendTo("#modal-content-dialog");
            console.log('create ok');
        },
        generateChart: function(optionChart){
            var options = $.extend({},optionChart);
            var chart = echarts.init(document.getElementById("generateChartArea"));

            $.get('resources/json/beijing.json',function(beijingJson){
                    echarts.registerMap('Beijing', beijingJson, {

                    });
                chart.setOption(options);
            });
        },
        bind: function(){
            var selector = this.options.dragHandle || null;
            var self = this;
            var $el = $("#modal-content-dialog");


            $el.on('mousedown.drag',selector,function(e){
                var mousePos = {
                    x: e.pageX,
                    y: e.pageY
                };

                $(window).on('mousemove.drag',selector,function(e){
                    var diff = {
                        xDiff: e.pageX - mousePos.x,
                        yDiff: e.pageY - mousePos.y
                    };

                    var elPos = {
                        top: document.getElementById('modal-content-dialog').offsetTop,
                        left: document.getElementById('modal-content-dialog').offsetLeft
                    };

                    $el.css({
                        top: elPos.top + diff.yDiff,
                        left: elPos.left + diff.xDiff
                    });

                    mousePos = {
                        x: e.pageX,
                        y: e.pageY
                    };
                });
            });

            this.$rootEl.on('mouseup.drag',function(e){
                $(window).off('mousemove.drag');
            });

            $("button").click(function(){
                $(".modal-overlay").remove();
            });
        }
    }

    return Shamen;
})(window,jQuery,echarts);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值