आप अपनी तालिका में ओवरलेइंग स्थिति के लिए एक एसवीजी तत्व और सीएसएस शैलियों का उपयोग कर सकते हैं। और जावास्क्रिप्ट डोम एपीआई की तरह शुरुआत और अंत बिंदु प्राप्त करेंgetBoundingClientRect()
यहाँ एक डेमो है। (कोणीय के साथ बनाया गया है, लेकिन आप इसे हर जगह उपयोग कर सकते हैं। शुद्ध जावास्क्रिप्ट उदाहरण नीचे देखें।)
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;
आप शुरू और अंत को गतिशील रूप से बदल सकते हैं। आपको केवल पदों को प्राप्त करने के लिए विधि को फिर से बनाना होगा। ध्यान दें कि मैं तत्व के किनारे पर तीर को रखने के लिए बाएं, ऊपर, दाएं, बटन का उपयोग करता हूं। आप दोनों स्थितियों की तुलना करके केंद्र बिंदु या किनारे की गणना कर सकते हैं।
और आपको टेबल पर एसवीजी रखना होगा। आप इसे सेट सीएसएस द्वारा कर सकते हैं position: absolute; left: 0; top: 0
। लेकिन ध्यान दें, कि आपके माता-पिता में भी position
विशेषता होनी चाहिए । उदा position: relative
।
अद्यतन: यहाँ एक शुद्ध जावास्क्रिप्ट डेमो है। सभी फाइलों को देखने के लिए बाईं ओर क्लिक करें और JS सामान देखने के लिए index.js का चयन करें। (वीएस कोड की तरह)।
पूरा कोड:
<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 के लिए वैकल्पिक)