You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SVG伊朗地图多分支信息展示问题:点击省份显示多行分支数据

解决SVG伊朗地图多分支机构展示问题

核心修改方向

把原有的单分支MapItem结构改成支持多分支数组,同时实现点击省份后自动以两列布局渲染所有分支(兼容0条、1条、N条分支的场景)。

具体实现步骤

1. 重构MapItem类,适配多分支数据

将原来的单分支参数替换为分支数组,每个分支包含name(分支名称)和info(分支信息)两个字段:

class MapItem {
  constructor(id, name, branches = []) {
    this.id = id;
    this.name = name;
    this.branches = branches; // 存储多条分支的数组
  }
}

2. 重新定义省份数据示例

按新结构配置不同分支数量的省份:

// 德黑兰省(5条分支)
const tehran = new MapItem('tehran', 'استان تهران', [
  {name: 'شعبه مرکزی تهران', info: 'آدرس: خیابان ولیعصر، شماره ۱۲۳'},
  {name: 'شعبه شمال تهران', info: 'آدرس: خیابان لاله زار، شماره ۴۵'},
  {name: 'شعبه جنوب تهران', info: 'آدرس: خیابان آزادی، شماره ۶۷'},
  {name: 'شعبه شرق تهران', info: 'آدرس: خیابان بهارستان، شماره ۸۹'},
  {name: 'شعبه غرب تهران', info: 'آدرس: خیابان انقلاب، شماره ۱۰۱'}
]);

// 无分支的省份示例
const noBranchProvince = new MapItem('yazd', 'استان یزد');

// 单分支的省份示例
const ardabil = new MapItem('ardabil', 'استان اردبیل', [
  {name: 'شعبه اصلی اردبیل', info: 'آدرس: خیابان امام خمینی، شماره ۲۴'}
]);

3. 修改点击事件的渲染逻辑

替换原有的单条信息渲染代码,生成自适应两列的布局:

// 渲染分支信息的核心函数
function renderBranchInfo(mapItem) {
  const infoContainer = document.getElementById('branch-info');
  infoContainer.innerHTML = '';

  // 渲染省份标题
  const provinceTitle = document.createElement('h3');
  provinceTitle.textContent = mapItem.name;
  infoContainer.appendChild(provinceTitle);

  // 处理无分支的情况
  if (mapItem.branches.length === 0) {
    const emptyText = document.createElement('p');
    emptyText.textContent = 'این استان هیچ شعبه‌ای ندارد.';
    infoContainer.appendChild(emptyText);
    return;
  }

  // 创建两列网格容器
  const gridWrapper = document.createElement('div');
  gridWrapper.style.cssText = `
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 1.2rem;
    margin-top: 1rem;
  `;

  // 循环生成每个分支的卡片
  mapItem.branches.forEach(branch => {
    const branchCard = document.createElement('div');
    branchCard.style.cssText = `
      padding: 1rem;
      border: 1px solid #e0e0e0;
      border-radius: 6px;
      background-color: #f9f9f9;
    `;

    const branchName = document.createElement('h4');
    branchName.textContent = branch.name;
    branchName.style.margin = '0 0 0.5rem 0';

    const branchDesc = document.createElement('p');
    branchDesc.textContent = branch.info;
    branchDesc.style.margin = '0';

    branchCard.appendChild(branchName);
    branchCard.appendChild(branchDesc);
    gridWrapper.appendChild(branchCard);
  });

  infoContainer.appendChild(gridWrapper);
}

// 绑定省份点击事件(假设SVG省份元素带有data-id属性)
document.querySelectorAll('svg [data-id]').forEach(provinceEl => {
  provinceEl.addEventListener('click', () => {
    const provinceId = provinceEl.getAttribute('data-id');
    // 假设所有省份数据存在provinceMap对象中
    const targetProvince = provinceMap[provinceId];
    if (targetProvince) {
      renderBranchInfo(targetProvince);
    }
  });
});

4. 整合省份数据到统一对象

方便点击时快速匹配对应数据:

const provinceMap = {
  'ardabil': ardabil,
  'tehran': tehran,
  'yazd': noBranchProvince,
  // 其他省份数据...
};

效果说明

  • 无分支省份:显示提示文本“این استان هیچ شعبه‌ای ندارد.”
  • 单分支省份:自动以单列展示分支卡片
  • 多分支省份:按两列布局排列,超过2条时自动换行

内容的提问来源于stack exchange,提问作者Yousef Keyghobadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:50:33