HTML Map Areas Collection: Accessing Area Elements in JavaScript
The areas collection in HTML provides a way to access all the <area> elements that are part of a <map> element. This is incredibly useful when you need to dynamically manipulate or interact with the clickable areas defined within an image map. This guide will explore how to effectively use the areas collection in JavaScript, providing practical examples to help you understand its usage.
What is the HTML areas Collection?
The HTML areas collection is a read-only property of the HTML <map> element. It returns an HTMLCollection, which is an array-like object containing all the <area> elements associated with that particular map. This collection allows you to iterate through these areas, access their attributes, and even attach event listeners to them, enabling rich, interactive functionality on your web pages.
Purpose of the areas Collection
The primary purpose of the areas collection is to provide a simple and efficient way to:
- Dynamically access all
<area>elements within a map. - Iterate through these areas to apply custom logic.
- Modify attributes or styles of specific areas programmatically.
- Attach event listeners to each area for enhanced interactivity.
- Create dynamic and data-driven image maps.
Syntax of the areas Collection
To access the areas collection, you first need to get a reference to the <map> element, and then access its areas property:
const mapElement = document.getElementById("yourMapId");
const areaCollection = mapElement.areas;
Here, areaCollection will hold the HTMLCollection of <area> elements present inside <map id="yourMapId">.
Important areas Collection Properties and Methods
Understanding the key properties and methods of the areas collection is crucial for effective use:
| Property/Method | Type | Description |
|---|---|---|
| `length` | Number | Returns the number of ` ` elements in the collection. |
| `item(index)` | Method | Returns the ` ` element at the specified index. |
| `namedItem(name)` | Method | Returns the ` ` element with the specified `name` attribute. |
| `[index]` (Array-like access) | – | Accesses the ` ` element at the specified index, similar to accessing an array element. |
Note: The areas collection is a live collection. This means that any changes to the <area> elements within the <map> will be immediately reflected in the collection. 💡
Basic Usage of the areas Collection
Let’s explore some basic examples to understand how the areas collection can be used in practice.
HTML Structure
Before we delve into the JavaScript examples, let’s define the basic HTML structure we’ll be working with:
<img
src="https://dummyimage.com/400x300/007bff/fff"
alt="Image Map Example"
usemap="#myMap"
/>
<map name="myMap" id="myMap">
<area
shape="rect"
coords="50,50,150,150"
href="#area1"
alt="Area 1"
name="area1"
/>
<area
shape="circle"
coords="250,100,40"
href="#area2"
alt="Area 2"
name="area2"
/>
<area
shape="poly"
coords="300,200,350,250,250,250"
href="#area3"
alt="Area 3"
name="area3"
/>
</map>
This HTML sets up an image with a corresponding <map> containing three <area> elements.
Accessing Area Elements
Here’s how to access and log the area elements using the areas collection:
<img
src="https://dummyimage.com/400x300/007bff/fff"
alt="Image Map Example"
usemap="#mapAreasEx1"
/>
<map name="mapAreasEx1" id="mapAreasEx1">
<area
shape="rect"
coords="50,50,150,150"
href="#area1"
alt="Area 1"
name="area1"
/>
<area
shape="circle"
coords="250,100,40"
href="#area2"
alt="Area 2"
name="area2"
/>
<area
shape="poly"
coords="300,200,350,250,250,250"
href="#area3"
alt="Area 3"
name="area3"
/>
</map>
<script>
const mapEx1 = document.getElementById("mapAreasEx1");
const areasEx1 = mapEx1.areas;
console.log("Number of areas:", areasEx1.length);
for (let i = 0; i < areasEx1.length; i++) {
console.log("Area", i + 1, ":", areasEx1[i]);
}
</script>
This script first gets the map element by its ID and then accesses its areas collection. It logs the number of areas and then iterates through the collection, logging each area element.
Accessing Specific Areas by Index
You can access individual <area> elements by their index using the item() method or array-like access:
<img
src="https://dummyimage.com/400x300/007bff/fff"
alt="Image Map Example"
usemap="#mapAreasEx2"
/>
<map name="mapAreasEx2" id="mapAreasEx2">
<area
shape="rect"
coords="50,50,150,150"
href="#area1"
alt="Area 1"
name="area1"
/>
<area
shape="circle"
coords="250,100,40"
href="#area2"
alt="Area 2"
name="area2"
/>
<area
shape="poly"
coords="300,200,350,250,250,250"
href="#area3"
alt="Area 3"
name="area3"
/>
</map>
<script>
const mapEx2 = document.getElementById("mapAreasEx2");
const areasEx2 = mapEx2.areas;
const firstAreaEx2 = areasEx2.item(0);
const secondAreaEx2 = areasEx2[1];
console.log("First Area:", firstAreaEx2);
console.log("Second Area:", secondAreaEx2);
</script>
This example accesses the first and second area elements using both the item(0) method and array-like access [1].
Accessing Areas by Name
You can also access specific <area> elements by their name attribute using the namedItem() method:
<img
src="https://dummyimage.com/400x300/007bff/fff"
alt="Image Map Example"
usemap="#mapAreasEx3"
/>
<map name="mapAreasEx3" id="mapAreasEx3">
<area
shape="rect"
coords="50,50,150,150"
href="#area1"
alt="Area 1"
name="area1"
/>
<area
shape="circle"
coords="250,100,40"
href="#area2"
alt="Area 2"
name="area2"
/>
<area
shape="poly"
coords="300,200,350,250,250,250"
href="#area3"
alt="Area 3"
name="area3"
/>
</map>
<script>
const mapEx3 = document.getElementById("mapAreasEx3");
const areasEx3 = mapEx3.areas;
const area2Ex3 = areasEx3.namedItem("area2");
console.log("Area with name 'area2':", area2Ex3);
</script>
This script retrieves the <area> element with the name “area2” using the namedItem() method.
Practical Examples and Use Cases
Let’s explore more advanced examples to see how the areas collection can be used in real-world scenarios.
Highlighting Areas on Mouseover
You can use the areas collection to add interactive effects, such as highlighting areas when the user hovers over them:
<img
src="https://dummyimage.com/400x300/007bff/fff"
alt="Image Map Example"
usemap="#mapAreasEx4"
/>
<map name="mapAreasEx4" id="mapAreasEx4">
<area
shape="rect"
coords="50,50,150,150"
href="#area1"
alt="Area 1"
name="area1"
/>
<area
shape="circle"
coords="250,100,40"
href="#area2"
alt="Area 2"
name="area2"
/>
<area
shape="poly"
coords="300,200,350,250,250,250"
href="#area3"
alt="Area 3"
name="area3"
/>
</map>
<script>
const mapEx4 = document.getElementById("mapAreasEx4");
const areasEx4 = mapEx4.areas;
areasEx4.forEach((area) => {
area.addEventListener("mouseover", function () {
this.style.outline = "2px solid red";
this.style.cursor = "pointer";
});
area.addEventListener("mouseout", function () {
this.style.outline = "";
this.style.cursor = "default";
});
});
</script>
This script adds mouseover and mouseout event listeners to each <area> element. When hovered, it applies an outline style, and when the mouse leaves, it removes the outline.
Changing Area Attributes Dynamically
You can also modify the attributes of <area> elements on the fly using JavaScript:
<img
src="https://dummyimage.com/400x300/007bff/fff"
alt="Image Map Example"
usemap="#mapAreasEx5"
/>
<map name="mapAreasEx5" id="mapAreasEx5">
<area
shape="rect"
coords="50,50,150,150"
href="#area1"
alt="Area 1"
name="area1"
/>
<area
shape="circle"
coords="250,100,40"
href="#area2"
alt="Area 2"
name="area2"
/>
<area
shape="poly"
coords="300,200,350,250,250,250"
href="#area3"
alt="Area 3"
name="area3"
/>
</map>
<button id="changeAreaButton">Change First Area</button>
<script>
const mapEx5 = document.getElementById("mapAreasEx5");
const areasEx5 = mapEx5.areas;
const changeAreaButton = document.getElementById("changeAreaButton");
changeAreaButton.addEventListener("click", function () {
const firstAreaEx5 = areasEx5[0];
firstAreaEx5.href = "#newHref";
firstAreaEx5.alt = "Changed Area 1";
});
</script>
This code adds a button that, when clicked, modifies the href and alt attributes of the first <area> element.
Data-Driven Area Creation
You can dynamically create <area> elements based on data using JavaScript. For example:
<img
src="https://dummyimage.com/400x300/007bff/fff"
alt="Dynamic Image Map"
usemap="#mapAreasEx6"
/>
<map name="mapAreasEx6" id="mapAreasEx6"></map>
<script>
const mapEx6 = document.getElementById("mapAreasEx6");
const areaData = [
{ shape: "rect", coords: "20,20,80,80", href: "#areaA", alt: "Area A", name: "areaA" },
{ shape: "circle", coords: "150,150,30", href: "#areaB", alt: "Area B", name: "areaB" },
{ shape: "poly", coords: "250,200,300,250,200,250", href: "#areaC", alt: "Area C", name: "areaC" },
];
areaData.forEach((data) => {
const areaEx6 = document.createElement("area");
areaEx6.shape = data.shape;
areaEx6.coords = data.coords;
areaEx6.href = data.href;
areaEx6.alt = data.alt;
areaEx6.name = data.name;
mapEx6.appendChild(areaEx6);
});
</script>
This example demonstrates how to programmatically create and append <area> elements to the <map> based on data stored in an array.
Browser Support
The areas collection and its associated properties and methods are supported by all modern web browsers, ensuring a consistent experience across different platforms.
Note: While browser support is excellent, always test your implementation across various browsers and devices to guarantee compatibility. 🧐
Conclusion
The areas collection provides a valuable tool for accessing and manipulating the <area> elements of a <map> in HTML. Whether it’s highlighting interactive regions, modifying attributes, or dynamically generating areas, this collection opens up a range of possibilities for creating advanced and engaging web experiences. By combining the areas collection with JavaScript event listeners, you can make image maps more interactive and dynamic, offering richer user interactions. This comprehensive guide should equip you with the necessary knowledge to leverage the power of the areas collection in your web projects effectively.








