RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1540598
Accepted
rebroff
rebroff
Asked:2023-09-14 17:01:51 +0000 UTC2023-09-14 17:01:51 +0000 UTC 2023-09-14 17:01:51 +0000 UTC

Yandex 地图。加载地图时必须立即打开所有簇对象的气球

  • 772

如何控制气球行为?

任务。

我使用聚类。有必要始终显示所有群集对象的气球。

问题在于,只有搜索中最后一个簇对象的气球始终打开,因为一次只能存在一个气球。

UPD 从卡初始化的那一刻起,所有集群的所有巴伦都必须始终打开。这些是簇图标上方的静态工具提示,显示有关簇中点数的信息。

yandex-maps-jsapi
  • 2 2 个回答
  • 47 Views

2 个回答

  • Voted
  1. E1mir
    2023-09-15T00:27:09Z2023-09-15T00:27:09Z

    也许这是 ymaps 中气球的默认行为。但您可以创建自己的并分配自己的行为:

    
    // Создаем собственный макет балуна для объектов-кластеров
    const clusterBalloonLayout = ymaps.templateLayoutFactory.createClass(
        '<div class="cluster-balloon">' +
            '<h2>{{properties.clusterCaption}}</h2>' +
            '<p>{{properties.clusterContent}}</p>' +
        '</div>'
    );
    
    // Создайте собственный балун для объектов-кластеров
    const clusterBalloon = new ymaps.Balloon(map, {
        layout: clusterBalloonLayout
    });
    
    // При клике на кластер, обновляем и открываем собственный балун
    cluster.events.add('click', (e) => {
        const cluster = e.get('target');
        const clusterObjects = cluster.getGeoObjects();
        const clusterCaption = "Cluster Info";
        let clusterContent = "";
    
        // Собираем информацию о всех объектах в кластере
        clusterObjects.forEach((object) => {
            clusterContent += `${object.properties.get('balloonContent')}<br>`;
        });
    
        clusterBalloon.setData({
            clusterCaption,
            clusterContent
        });
    
        // Открываем собственный балун
        clusterBalloon.open(cluster.geometry.getCoordinates(), {
            // Тут уже назначаем параметры открытия балуна (по умолчанию или наши настройки)
        });
    });
    

    我认为这个解决方案适合您。

    • 0
  2. Best Answer
    Kjuri
    2023-09-15T16:07:58Z2023-09-15T16:07:58Z

    有这样一个解决方案——所有集群都打开(以全分辨率检查),但这不是最终的解决方案,需要改进。

    1. 更改地图大小/放大/缩小的问题 - 下面注释掉了代码boundschange- 它工作不稳定,需要测试和检查,或者严格禁止所有操作。
    2. 在Yandex文档中我看到只能有1个气球,不建议超过这个数量-许多添加的气球的稳定性不确定

    ymaps.ready(function() {
      var mapCenter = [55.755381, 37.619044],
        map = new ymaps.Map('map', {
          center: mapCenter,
          zoom: 10,
          controls: []
        }),
        placemarks = [];
      var customBalloonContentLayout = ymaps.templateLayoutFactory.createClass([
        '<ul class=list>',
        '{% for geoObject in properties.geoObjects %}',
        '<li><a href=# data-placemarkid="{{ geoObject.properties.placemarkId }}" class="list_item">{{ geoObject.properties.balloonContentHeader|raw }}</a></li>',
        '{% endfor %}',
        '</ul>'
      ].join(''));
    
      var clusterer = new ymaps.Clusterer({
        clusterDisableClickZoom: true,
        clusterOpenBalloonOnClick: true,
        clusterBalloonPanelMaxMapArea: 0,
        clusterBalloonMaxHeight: 200,
        clusterBalloonContentLayout: customBalloonContentLayout
      });
    
    
      for (var i = 0, l = 100; i < l; i++) {
        var placemark = new ymaps.Placemark(getRandomPosition(), {
          balloonContentHeader: 'Заголовок метки №' + (i + 1),
          balloonContentBody: 'Информация о метке №' + (i + 1),
          placemarkId: i
        });
        placemarks.push(placemark);
      }
    
      clusterer.add(placemarks);
      map.geoObjects.add(clusterer);
    
      function getRandomPosition() {
        return [
          mapCenter[0] + (Math.random() * 0.3 - 0.15),
          mapCenter[1] + (Math.random() * 0.5 - 0.25)
        ];
      }
    
      let allBallons = [];
      let setBallons = () => {
        let allClusters = clusterer.getClusters();
        allClusters.forEach(cluster => {
          let balloon = new ymaps.Balloon(map);
          allBallons.push(balloon);
          balloon.options.setParent(map.options);
          balloon.open(cluster.geometry.getCoordinates());
          let contentClaster = '';
          cluster.getGeoObjects().forEach(place => {
            contentClaster += place.properties.get('balloonContentBody') + '<br>';
          })
          balloon.setData({
            content: contentClaster
          });
        })
      }
    
      setBallons();
      /*
          map.events.add('boundschange', function () {
            if (allBallons.length > 0) {
              allBallons.forEach(baloon => {
                baloon.close()
              })
              allBallons.length = 0;
            }
            setBallons();
          });
      */
    });
    html,
    body {
      margin: 0;
      padding: 0;
    }
    
    html,
    body,
    #map {
      width: 100%;
      height: 100%;
    }
    
    .list {
      list-style: none outside;
      margin: 0;
      padding: 0;
    }
    
    .list li {
      padding-bottom: 10px;
    }
    
    .list a {
      color: #207697;
    }
    
    .list a:hover {
      color: #28B8F0;
      text-decoration: none;
    }
    <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=<ваш API-ключ>" type="text/javascript"></script>
    <div id="map"></div>

    • 0

相关问题

  • 根据字段和位置坐标渲染 Yandex API 地图

  • 如何为 Yandex 地图添加标签?

  • Yandex 在模态窗口中按坐标绘制地图

  • Yandex 地图中的 Fancybox 调用

  • Yandex Maps 如何绘制整个世界?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5