Reputation: 11
I'm trying to toggle multiple divs with an image map. My end goal is to:
I am very new to Javascript. Literally took me forever just to get an understanding of how to even create a function to toggle. I CAN'T USE JQUERY so please don't offer any solution that requires me to use that library.
function toggle(id) {
var x = document.getElementById(id)
if(x.style.display =='none')
x.style.display = 'block';
else x.style.display = 'none';
}
<img id="Image-Maps-Com-image-maps-2019-03-13-221105" src="https://picsum.photos/349/290" border="0" width="349" height="290" orgWidth="349" orgHeight="290" usemap="#image-maps-2019-03-13-221105" alt="" />
<map name="image-maps-2019-03-13-221105" id="ImageMapsCom-image-maps-2019-03-13-221105">
<area alt="" title="" href="#" onclick="toggle('unit1')" shape="rect" coords="9,164,152,263" style="outline:none;" target="_self" />
<area alt="" title="" href="#" onclick="toggle('unit2')" shape="rect" coords="198,175,328,273" style="outline:none;" target="_self" />
<area alt="" title="" href="#" onclick="toggle('unit3')" shape="rect" coords="55,25,291,132" style="outline:none;" target="_self" />
<area shape="rect" coords="347,288,349,290" alt="Image Map" style="outline:none;" title="image Map" href="http://www.image-maps.com/index.php?aff=mapped_users_0" />
</map>
<div id="unit1" class="unit1" style="display: none;">
Hello World
</div>
<div id="unit2" class="unit2" style="display: none;">
This is me
</div>
<div id="unit3" class="unit3" style="display: none;">
Goodbye
</div>
Upvotes: 1
Views: 108
Reputation: 12959
1) Get
the new status for the unit you clicked .
2) Set
display:none for all units .
3) Set
the new status for the unit you clicked .
function toggle(id) {
var x = document.getElementById(id) ;
var newStatus = (x.style.display === 'none') ? 'block' : 'none' ;
var units = document.getElementsByClassName('units') ;
for( var i = 0; i < units.length ; i++ )
units[i].style.display = 'none'
x.style.display = newStatus ;
}
<img id="Image-Maps-Com-image-maps-2019-03-13-221105" src="https://picsum.photos/349/290" border="0" width="349" height="290" orgWidth="349" orgHeight="290" usemap="#image-maps-2019-03-13-221105" alt="" />
<map name="image-maps-2019-03-13-221105" id="ImageMapsCom-image-maps-2019-03-13-221105">
<area alt="" title="" href="#" onclick="toggle('unit1')" shape="rect" coords="9,164,152,263" style="outline:none;" target="_self" />
<area alt="" title="" href="#" onclick="toggle('unit2')" shape="rect" coords="198,175,328,273" style="outline:none;" target="_self" />
<area alt="" title="" href="#" onclick="toggle('unit3')" shape="rect" coords="55,25,291,132" style="outline:none;" target="_self" />
<area shape="rect" coords="347,288,349,290" alt="Image Map" style="outline:none;" title="image Map" href="http://www.image-maps.com/index.php?aff=mapped_users_0" />
</map>
<div id="unit1" class="units unit1" style="display: none;">
Hello World
</div>
<div id="unit2" class="units unit2" style="display: none;">
This is me
</div>
<div id="unit3" class="units unit3" style="display: none;">
Goodbye
</div>
Upvotes: 0
Reputation: 36564
You can achieve that in following steps.
class
for all your divsquerySelectorAll()
and hide all elements of classid
using Ternary Operator.<area>
and use addEventListener()
instead of onclick = toggle(...)
document.querySelectorAll('area[alt]').forEach((a,i) =>
{
a.addEventListener('click',(e) => {
e.preventDefault();
var x = document.getElementById(`unit${i+1}`)
let {display} = x.style
document.querySelectorAll('.unit').forEach(z => z.style.display = 'none')
x.style.display = display === 'none' ? 'block' : 'none';
})
})
<img id="Image-Maps-Com-image-maps-2019-03-13-221105" src="https://picsum.photos/349/290" border="0" width="349" height="290" orgWidth="349" orgHeight="290" usemap="#image-maps-2019-03-13-221105" alt="" />
<map name="image-maps-2019-03-13-221105" id="ImageMapsCom-image-maps-2019-03-13-221105">
<area alt="" title="" href="#" shape="rect" coords="9,164,152,263" style="outline:none;" target="_self" />
<area alt="" title="" href="#" shape="rect" coords="198,175,328,273" style="outline:none;" target="_self" />
<area alt="" title="" href="#" shape="rect" coords="55,25,291,132" style="outline:none;" target="_self" />
<area shape="rect" coords="347,288,349,290" alt="Image Map" style="outline:none;" title="image Map" href="http://www.image-maps.com/index.php?aff=mapped_users_0" />
</map>
<div id="unit1" class="unit" style="display: none;">
Hello World
</div>
<div id="unit2" class="unit" style="display: none;">
This is me
</div>
<div id="unit3" class="unit" style="display: none;">
Goodbye
</div>
Upvotes: 1