Leaflet实现通用底图灰度效果

该博客介绍了如何使用Leaflet.js库创建一个自定义的灰度底图插件。通过L.TileLayer.Grayscale扩展了L.TileLayer,实现了动态切换地图灰度显示的功能。博客包含了JavaScript代码示例,展示了如何初始化灰度图层,并提供了相应的CSS样式以实现图片的灰度过滤。用户可以方便地通过layer.setGrayscale方法动态设置地图的灰度效果。
摘要由CSDN通过智能技术生成

Leaflet实现通用底图灰度效果

js插件

L.TileLayer.Grayscale = L.TileLayer.extend({
    options: {
        isGrayscale: false,
    },

    initialize: function (url, options) {
        options = options || {}
        options.crossOrigin = true;
        L.TileLayer.prototype.initialize.call(this, url, options);
        L.TileLayer.prototype.setGrayscale = this.setGrayscale;
        this.on('tileload', function (e) {
            if (!e.target.options.key) e.target.options.key = 'grayscale' + e.target._leaflet_id;
            this._makeGrayscale(e.tile);
        });
    },

    _createTile: function () {
        const tile = L.TileLayer.prototype._createTile.call(this);
        tile.crossOrigin = "Anonymous";
        return tile;
    },

    // 设置底图是否灰度---默认取消灰度
    setGrayscale: function (state = false) {
        this.options.isGrayscale = state;
        this.isGrayscale = state;
        document.querySelectorAll(".custom_tile_grayscale." + this.options.key + "").forEach(img => {
            if (state) {
                img.classList.add("tile_grayscale");
            } else {
                img.classList.remove("tile_grayscale");
            }
        })
    },

    _makeGrayscale: function (img) {
        img.classList.add(this.options.key);
        img.classList.add("custom_tile_grayscale");
        if (this.options.isGrayscale) {
            img.classList.add("tile_grayscale");
        } else {
            img.classList.remove("tile_grayscale");
        }
    }
});

L.tileLayer.grayscale = function (url, options) {
    return new L.TileLayer.Grayscale(url, options);
};

css插件

.custom_tile_grayscale.tile_grayscale{
    filter:grayscale(1)
}

使用方法

 L.tileLayer.grayscale('https://xxx', {
     isGrayscale: true
 });
 // 动态设置灰度效果
layer.setGrayscale(true);	//true:设置灰度,false:取消灰度

基于这个方法实现:https://github.com/Zverik/leaflet-grayscale/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值