คุณสามารถใช้องค์ประกอบ SVG และสไตล์ css สำหรับตำแหน่งที่แน่นอนซ้อนทับตารางของคุณ และรับจุดเริ่มต้นและจุดสิ้นสุดโดย JavaScript DOM API เช่นgetBoundingClientRect()
นี่คือตัวอย่าง (ผลิตด้วย Angular แต่คุณสามารถใช้ได้ทุกที่ตัวอย่าง JavaScript ที่แท้จริงดูด้านล่าง)
const startElement = document.querySelector('#start');
const endElement = document.querySelector('#end');
const startRect = startElement.getBoundingClientRect();
const endRect = endElement.getBoundingClientRect();
const startX = startRect.right;
const startY = startRect.top;
const endX = endRect.left;
const endY = endRect.bottom;
คุณสามารถเปลี่ยนการเริ่มต้นและสิ้นสุดแบบไดนามิก คุณจะต้อง reinvoke วิธีการที่จะได้รับตำแหน่ง โปรดทราบว่าฉันใช้ปุ่มซ้าย, ด้านบน, ขวา, เพื่อวางลูกศรบนขอบขององค์ประกอบ คุณสามารถคำนวณจุดกึ่งกลางหรือขอบโดยการเปรียบเทียบทั้งสองตำแหน่ง
และคุณต้องวาง svg ไว้บนโต๊ะ คุณสามารถทำได้โดยชุด position: absolute; left: 0; top: 0
CSS แต่โปรดทราบว่าผู้ปกครองของคุณควรมีposition
แอตทริบิวต์ position: relative
เช่น
อัปเดต: นี่คือตัวอย่างของ JavaScript อย่างแท้จริง คลิกที่ด้านซ้ายเพื่อดูไฟล์ทั้งหมดและเลือก index.js เพื่อดูไฟล์ JS (เหมือนใน VS Code)
รหัสสมบูรณ์:
<table style="position: absolute; left: 0; top: 0;">
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td id="end">9</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td id="start">0</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<svg style="position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 1">
<defs>
<marker id="arrow" markerWidth="10" markerHeight="10" refX="5" refY="3" orient="auto"
markerUnits="strokeWidth" viewBox="0 0 20 20">
<path d="M0,0 L0,6 L9,3 z" fill="#f00" />
</marker>
</defs>
<line id="svg-line" stroke="#f00" stroke-width="5"
marker-end="url(#arrow)" />
</svg>
</table>
<script>
const svgLine = document.querySelector('#svg-line');
const startElement = document.querySelector("#start");
const endElement = document.querySelector("#end");
const startRect = startElement.getBoundingClientRect();
const endRect = endElement.getBoundingClientRect();
const startX = startRect.right;
const startY = startRect.top;
const endX = endRect.left;
const endY = endRect.bottom;
svgLine.setAttribute('x1', startX);
svgLine.setAttribute('y1', startY);
svgLine.setAttribute('x2', endX);
svgLine.setAttribute('y2', endY);
</script>
เพียงแค่คัดลอกโค้ดข้างต้นในไฟล์ html ที่ว่างเปล่าใหม่แล้วรันในเบราว์เซอร์ของคุณ
Btw คุณสามารถทำได้ด้วยผ้าใบ (ทางเลือกสำหรับ svg)