mapbox 鼠标经过图层高亮

3 篇文章 1 订阅

项目有个需求,就是我们加载一个市级行政区划图层,当我们鼠标经过某个县级的时候,当前县显示高亮, mapbox官网有个例子,找了好久才解决。当时我用错了鼠标事件,鼠标进入图层是有两个事件的,一个是mouseenter,一个是mousemove,当时我用的是mouseente,导致鼠标每次进入县A的时候图层可以高亮,但是由县A进去到县B的时候却没有效果。后面查阅资料才知道,mouseenter只会监听这个元素,而mousemove监听这个元素并包含其子元素,换了事件后彻底解决。

1、鼠标进入

    this.map.map.on("mousemove", layerId, (e) => {

             if (this.hoveredStateId !== null) {

                  this.map.map.setFeatureState(

                    { source: 'fanghuozhanPolygon7', id: this.hoveredStateId },

                    { hover: false }

                  );

             }

          if (e.features[0].id) {

            this.hoveredStateId = e.features[0].id;

            this.map.map.setFeatureState(

              { source: "fanghuozhanPolygon7", id: this.hoveredStateId },

              { hover: true }

            );

            this.mousemoveFun(e,layerId)

          }

        });

 //鼠标经过某个县展示不同高亮颜色

 mousemoveFun(e, layerId) {

      if (layerId == "fanghuozhanPolygon") {

        let id = e.features[0].properties.Id;

        let name = e.features[0].properties.name;

        let matchArr = [];

        if (name == "汉江护林防火站") {

          matchArr = [

            "match",

            ["get", "Id"],

            id,

            "rgba(180, 235, 241,1)",

            "rgba(192,192,192,1)",

          ];

        } else if (name == "西燕护林防火站") {

          matchArr = [

            "match",

            ["get", "Id"],

            id,

            "rgba(15, 116, 183,1)",

            "rgba(192,192,192,1)",

          ];

        } else if (name == "铜矿护林防火站") {

          matchArr = [

            "match",

            ["get", "Id"],

            id,

            "rgba(52, 198, 217,1)",

            "rgba(192,192,192,1)",

          ];

        } else if (name == "天枰护林防火站") {

          matchArr = [

            "match",

            ["get", "Id"],

            id,

            "rgba(18, 136, 214,1)",

            "rgba(192,192,192,1)",

          ];

        }

        this.map.map.setPaintProperty(

          "fanghuozhanPolygon",

          "fill-color",

          matchArr

        );

      }

    },

2、鼠标离开

this.map.map.on("mouseleave", layerId, (e) => {

          this.map.map.getCanvas().style.cursor = "default";

          if (this.hoveredStateId !== null) {

            this.map.map.setFeatureState(

              { source: "fanghuozhanPolygon7", id: this.hoveredStateId },

             { hover: false }

             );

           }

          this.hoveredStateId = null;

          this.mouseleaveFun(e,layerId)

        });

//鼠标离开的时候恢复到默认图层

 mouseleaveFun(e, layerId) {

    this.map.map.setPaintProperty('fanghuozhanPolygon', "fill-color", 'rgba(192,192,192,1)');

 },

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值