xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

svg insert shape string bug

svg insert shape string bug

not support custom areaProps attributes ???


const svg = document.querySelector(`[data-uuid="live_map_svg"]`);

svg.insertAdjacentHTML(`beforeend`, svgPolygon);

svgPolygon = `<polygon stroke="" fill="#DB524F" points="454.99798583984375 586.333984375 534.9979858398438 586.333984375 534.9979858398438 719.6680297851562 454.99798583984375 719.6680297851562" center='{"x":494.99798583984375,"y":653.0010070800781}' areaprops='{"id":10202,"activityEventId":2801,"ticketCategoryId":11201,"desc":"_贵宾区","name":"贵宾区","floor":0,"sort":0,"status":1} uuid="polygon_1583483461614_10045"></polygon>`

// "<polygon stroke="" fill="#DB524F" points="454.99798583984375 586.333984375 534.9979858398438 586.333984375 534.9979858398438 719.6680297851562 454.99798583984375 719.6680297851562" center='{"x":494.99798583984375,"y":653.0010070800781}' areaprops='{"id":10202,"activityEventId":2801,"ticketCategoryId":11201,"desc":"_贵宾区","name":"贵宾区","floor":0,"sort":0,"status":1} uuid="polygon_1583483461614_10045"></polygon>"

svg.insertAdjacentHTML(`beforeend`, svgPolygon);


svgPolygon = `<polygon stroke="" fill="#DB524F" points="454.99798583984375 586.333984375 534.9979858398438 586.333984375 534.9979858398438 719.6680297851562 454.99798583984375 719.6680297851562"  uuid="polygon_1583483461614_10045"></polygon>`
// "<polygon stroke="" fill="#DB524F" points="454.99798583984375 586.333984375 534.9979858398438 586.333984375 534.9979858398438 719.6680297851562 454.99798583984375 719.6680297851562"  uuid="polygon_1583483461614_10045"></polygon>"

svg.insertAdjacentHTML(`beforeend`, svgPolygon);


svgPolygon = `<text x="494.99798583984375" y="653.0010070800781" fill="#000" uuid="area_1583483461614_10045">贵宾区</text>`
// "<text x="494.99798583984375" y="653.0010070800781" fill="#000" uuid="area_1583483461614_10045">贵宾区</text>"

svg.insertAdjacentHTML(`beforeend`, svgPolygon);


solution

missing ' single quote bug 😂 ⚠️

OK


const computePolygonCenterPoint = (points = []) => {
  // 设置旋转的 origin,为 polygon 的中心,旋转偏移量
  let [top, left, right, bottom] = ["", "", "", ""];
  points.forEach(([x, y], i) => {
    if (i === 0) {
      top = y;
      bottom = y;
      left = x;
      right = x;
    } else {
      top = Math.min(top, y);
      bottom = Math.max(bottom, y);
      left = Math.min(left, x);
      right = Math.max(right, x);
    }
  });
  const point = {
    cx: (left + right) / 2,
    cy: (top + bottom) / 2,
  };
  return point;
}

const polygonGenerator = (feature = {}, uuid = ``, areaUuid, offsetFlag = false) => {
  const {
    properties: {
      labelPoint,
      fill,
      stroke,
      type,
      // text === name / desc,
      id,
      activityEventId,
      ticketCategoryId,
      desc,
      name,
      floor,
      sort,
      status,
    },
    geometry: {
      coordinates,
    },
  } = feature;
  const points = coordinates.flat(3).join(` `);
  const points_arr = coordinates[0];
  let x = 0;
  let y = 0;
  if(!labelPoint) {
    const {
      cx,
      cy,
    } = computePolygonCenterPoint(points_arr);
    x = cx;
    y = cy;
  } else {
    const {
      x: cx,
      y: cy,
    } = labelPoint;
    x = cx;
    y = cy;
  }
  // svg 绑定区域的 text 偏移量优化 ??? offsetFlag ? +number : -number
  const xOffset = 20;
  const yOffset = -10;
  x = x - xOffset;
  y = y - yOffset;
  const center = JSON.stringify({
    x,
    y,
  });
  let result = ``;
  // 🐛 true && number !== boolean
  // if (type === "section" && (name.length ? true : false)) {
  if (type === "section" && name.length > 0) {
    const ticketArea = {
      id,
      activityEventId,
      ticketCategoryId,
      desc,
      name,
      floor,
      sort,
      status,
    };
    const areaProps = JSON.stringify(ticketArea);
    // areaprops 🐛 areaProps auto convert to lowercase bug
    result = `
      <polygon stroke="${stroke || ''}" fill="${fill || polygonFillColor}" points="${points}" center='${center}' areaprops='${areaProps}' uuid="${uuid}"></polygon>
      <text x="${x || ''}" y="${y || ''}" fill="${textFillColor}" uuid="${areaUuid}">${name}</text>
    `;
  } else {
    result = `
      <polygon stroke="${stroke || ''}" fill="${fill || polygonFillColor}" points="${points}" center='${center}' uuid="${uuid}"></polygon>
    `;
  }
  return result.trim();
}


posted @   xgqfrms  阅读(181)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-03-06 react & monaco editor & vs code
点击右上角即可分享
微信分享提示