mapbox地图弹窗(popup)使用vue组件,实现弹窗样式轻松自定义化

8 篇文章 0 订阅
6 篇文章 2 订阅

摘要:mapbox官方提供的popup,在不要特殊的样式的时候,我们按照官方的实例去添加

var popup = new mapboxgl.Popup({className: 'my-class'})
  .setLngLat(e.lngLat)
  .setHTML("<h1>Hello World!</h1>")
  .setMaxWidth("300px")
  .addTo(map);

但是setHTML的内容只能原生的html,要修改样式就要用内联样式,,最主要在操作弹窗内部dom元素方便存在很大的不便性,现在我们将弹窗的内容写到vue组件里,然后挂载到popup,这样不仅能轻松定义样式,而且使用Vue指令

操作步骤

1、在地图的组件里引入vue和弹窗里面用到的vue组件

import mapboxgl from 'mapbox-gl';
import 'mapbox-gl/dist/mapbox-gl.css';
import popup from './popup.vue'; //引入弹框组件
import Vue from 'vue';

2、添加挂载

举例:需求是点击某图层出现该图层的属性信息

2.1 第一种:使用setDOMContent()

map.on('click', '图层名', function (e) {
  let content = e.features[0].properties;
  const p = Vue.extend(popup);
  let vm = new p({
    propsData: {
      objes: content,
    }, //传参
  });
  vm.$mount(); //挂载

  popup
    .setLngLat(e.lngLat)
    .setMaxWidth('400px') //设置弹窗最大宽度
    .setDOMContent(vm.$el) //插入节点
    .addTo(MapObj.map);
});

上面使用的是setDOMContent,插入节点,如果使用setHTML, 则必须给弹窗设定id

2.2 使用setHTML()

let popupHTML = '<div id="popupId"></div>'
map.on('click', '图层名', function (e) {
  let content = e.features[0].properties;
  const p = Vue.extend(popupHTML);//弹窗组件
  let vm = new p({
    propsData: {
      objes: content,
    }, //传参
  });
  vm.$mount("popupId"); //挂载,id名与上面一致

  popup
    .setLngLat(e.lngLat)
    .setMaxWidth('400px') //设置弹窗最大宽度
    .setHTML(popupHTML) //插入节点
    .addTo(MapObj.map);
});

3、弹窗组件接受

<script>
export default {
  props: ['objes'],
  mounted() {
    console.log('objes: ', this.objes);
  },
};
</script>

这样我们就将vue组件挂载到popup里面啦,轻松自定义样式以及操作dom啦

  • 12
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
实现 Mapbox 点击图标弹出弹框的方法是通过添加一个 Popup 对象,并在点击事件中打开它。以下是一个基本的示例代码: ```javascript // 创建地图对象 mapboxgl.accessToken = 'your-access-token'; var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [lng, lat], // 地图中心点的经纬度 zoom: 12 // 地图缩放级别 }); // 创建一个 Popup 对象 var popup = new mapboxgl.Popup({ closeOnClick: false }) .setLngLat([lng, lat]) // 设置弹窗的位置 .setHTML('<h3>Popup Title</h3><p>Popup content.</p>'); // 设置弹窗的内容 // 创建一个图标对象 var marker = new mapboxgl.Marker() .setLngLat([lng, lat]) // 设置图标的位置 .addTo(map); // 将图标添加到地图上 // 监听图标的点击事件 marker.getElement().addEventListener('click', function() { // 打开弹窗 popup.addTo(map); }); ``` 上述代码中,我们首先创建了一个地图对象 `map`,然后创建了一个 Popup 对象 `popup`,并设置了其位置和内容。接着,我们创建了一个图标对象 `marker`,并将其添加到地图上。最后,我们监听了图标的点击事件,并在事件处理函数中打开了弹窗。 关于自定义弹窗样式,可以在 `setHTML` 方法中使用任何 HTML 和 CSS 样式自定义弹窗的内容。例如: ```javascript .setHTML('<div style="background-color: #f00; color: #fff; padding: 10px;">Popup content.</div>') ``` 上述代码将弹窗的内容设置为一个红色背景、白色文字、有内边距的 `<div>` 元素。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值