将JavaScript的事件监听器绑定到分层目标

在我们的落地页上,我们有标注特定类别的“卡片”,以及该类别下的一些具体项目。目标是把对面板本身的点击和对目标网页的点击区分开来(见下图)。
对整个卡片的点击,以及类别标题的点击都会触发一个弹出覆盖层。点击目标项将导航到相应的目标网页。
如何给图片分配一个事件监听器,使其忽略覆盖在其上的其他链接的点击?(在弄清楚怎么做之前,我还没有为JS指定ID或 CLASS以便定位。)
<div class="card">
<div class="dark">
<a href="https://pedalers.travel/pacific-islands-bicycle-tours-hawaii-tahiti-bora-bora.htm">
<header><h2 class="title3">South Pacific Bike Tours</h2></header>
</a>
<a href="https://pedalers.travel/bicycling-tahiti-french-polynesia.htm">Tahiti</a>,
<a href="https://pedalers.travel/samoa-bicycle-tour-samoa-cycling.htm">Samoa</a>,
<a href="https://pedalers.travel/hawaii-bike-tours-big-island-dreams-cycling-tours.htm">Hawaii</a>
</div>
<a href="https://pedalers.travel/pacific-islands-bicycle-tours-hawaii-tahiti-bora-bora.htm">
<img src="img/pedalers-homepage/cycling-on-raiatea-island.jpg"
alt="cycling in French Polynesia"
title="island bicycling tours around the Pacific">
</a>
</div>
解决方案
以下是对所建议方案的一个可行实现——从卡片本身委派点击事件。
我需要生成一些CSS来模拟你的卡片,但我没有修改HTML
const showOverlay = (href) => console.log(href);
document.querySelector('.card').addEventListener('click', (e) => {
const link = e.target.closest('a');
const header = e.target.closest('header');
// Link in the header or with an image triggers overlay.
// other links are followed
if (link && !header && !link.querySelector('img')) return;
e.preventDefault(); // stop the link
showOverlay(link.href);
});
.card {
position: relative;
overflow: hidden;
border-radius: 1rem;
min-height: 500px;
text-align: center;
}
.card>a {
display: block;
position: absolute;
inset: 0;
z-index: 1;
}
.card img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* text overlay */
.card .dark {
position: relative;
z-index: 2;
padding: 1rem;
color: white;
background: rgba(0, 0, 0, 0.45);
}
.card a {
color: inherit;
text-decoration: none;
}
/* debug at SO */
.as-console-wrapper { z-index: 100 !important }
<div class="card">
<div class="dark">
<header>
<h2 class="title3"><a href="https://pedalers.travel/pacific-islands-bicycle-tours-hawaii-tahiti-bora-bora.htm">South Pacific Bike Tours</a></h2>
</header>
<a href="https://pedalers.travel/bicycling-tahiti-french-polynesia.htm">Tahiti</a>,
<a href="https://pedalers.travel/samoa-bicycle-tour-samoa-cycling.htm">Samoa</a>,
<a href="https://pedalers.travel/hawaii-bike-tours-big-island-dreams-cycling-tours.htm">Hawaii</a>
</div>
<a href="https://pedalers.travel/pacific-islands-bicycle-tours-hawaii-tahiti-bora-bora.htm"><img src="https://pedalers.travel/img/pedalers-homepage/cycling-on-raiatea-island.jpg" alt="cycling in French Polynesia" title="island bicycling tours around the Pacific"></a>
</div>
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。