其他分享
首页 > 其他分享> > 百度地图(BMapGL) 显示可视范围的插件 mapMaxBounds

百度地图(BMapGL) 显示可视范围的插件 mapMaxBounds

作者:互联网

class mapMaxBounds {
  
  
// map 是百度的BMap实例对象
// bounds 是百度的可视范围类型 BMap.bounds
// 这里的map类型在我开发的时候使用的是BMapGL
constructor(map, bounds) {
this.map = map;
        map.disableInertialDragging();
        this.enableMaxBounds(bounds);
    }

    // 关闭限制区域
    disableMaxBounds() {
        this.map.container.removeEventListener("mouseup", this.containerMounseup);
        this.map.removeEventListener("moving", this.moving);
        this.map.removeEventListener("zoomstart", this.zoomstart);
        this.map.removeEventListener("zoomend", this.zoomend);
    }

    // 开启限制最大范围
    enableMaxBounds(bounds) {
        // 开启监听
        // var extent=new Object();
        // extent.minX="-180.380133";
        // extent.maxX="177.557674";
        // extent.minY="-80.395352";
        // extent.maxY="86"; 

        let _this = this;

        let oldPoint = null;
        let oldBounds = null, oldCenter = null, oldZoom = null;

        // this.containerMousedown = (e)=>{  };
        // this.map.container.addEventListener("mousedown", this.containerMousedown);

        this.containerMounseup = (e) => { this.map.enableDragging(); }
        this.map.container.addEventListener("mouseup", this.containerMounseup);

        // this.movestart = function(){ }
        // this.map.addEventListener("movestart", this.movestart);

        // this.dragend = function(){ console.log("dragend"); }
        // this.map.addEventListener("dragend", function(){ console.log("dragend"); });

        this.moving = function (type, target) {
            if (!bounds.containsBounds(this.getBounds())) {

                if (oldPoint) {

                    this.panTo(oldPoint, { noAnimation: false });
                }
                this.disableDragging();
            } else {
                oldPoint = this.getCenter();
            }
        }
        this.map.addEventListener("moving", this.moving);

        this.zoomstart = function () {
            if (!map.config.enableWheelZoom) return;
            oldBounds = this.getBounds();
            oldCenter = this.getCenter();
            oldZoom = this.getZoom();
        }
        this.map.addEventListener("zoomstart", this.zoomstart);

        const keyZoom = true;

        this.zoomend = function (type, target) {

            if (!map.config.enableWheelZoom) return;

            if (!bounds.containsBounds(this.getBounds())) {
                this.disableScrollWheelZoom();
                setTimeout(() => {
                    this.enableScrollWheelZoom()
                }, 1000)
                // oldBounds && this.setViewport([oldBounds.sw,oldBounds.ne], { enableAnimation: false, delay: 0, zoomFactor: -1});
                if (oldZoom < 4.4 || this.getZoom() < 4.6) {
                    // this.setBounds(bounds);
                    // this.panTo(new BMapGL.Point(106.75431201486032, 34.13381700418861), { noAnimation: false });
                    // this.setZoom(4.5);
                    this.setViewport({ center: new BMapGL.Point(106.75431201486032, 34.13381700418861), zoom: 4.5 })
                }
                else if (this.getZoom() != oldZoom) {
                    //this.panTo(oldCenter, { noAnimation: false });
                    //this.setZoom(oldZoom);
                    //this.centerAndZoom(oldCenter, oldZoom);
                    this.setViewport({ center: oldCenter, zoom: oldZoom });
                }
            };
        }
        this.map.addEventListener("zoomend", this.zoomend);

        this.map._off = this.map.off;
        this.map.off = function (type) {
            this._off.apply(this, arguments);
            if (type === "zoomend") {
                this.addEventListener("zoomend", _this.zoomend);
            }
        }
    }
}

标签:function,map,插件,bounds,mapMaxBounds,oldZoom,addEventListener,BMapGL,zoomend
来源: https://www.cnblogs.com/liao1992/p/16594295.html