You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现鼠标悬停左侧div文本时切换右侧div中的图片?

悬停左侧文本切换右侧独立div中的图片

我正在把作品集网站拆分为两个独立div:左侧.main包含文本及悬停状态,右侧.box里的.photo当前显示一张静态图片。需要实现鼠标悬停左侧特定文字时,切换右侧的图片,但不清楚如何处理触发元素与图片容器相互独立的情况。以下是我写的初始代码:

初始CSS代码

.main {
width: 40%;
margin-left: 2%;
margin-top: 5%;
float: left;
font-family: "calluna-sans", sans-serif;
font-weight: 300;
font-style: normal;
color: black;
line-height: 0.8em;
font-size: 1.4em;
height: 100%;
}

.box {
margin-left:50%;
background-color: black;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
vertical-align: middle;

}

.photo {
position: relative;
}

初始HTML代码

<div class="main">
This paragraph will show image 1 on hover, image 2 on hover, and so on.
</div>

<div class="box">
<div class="photo">
<img src="https://picsum.photos/200/300">
</div></div>

解决方案1:JavaScript实现(推荐新手使用)

这种方法逻辑直观,容易理解和扩展,适合处理独立元素间的交互。

修改后的HTML

给每个需要触发图片切换的文本加上<span>标签,用data-img-src属性存储对应图片的地址,同时给右侧图片加id方便选择:

<div class="main">
  <span class="img-trigger" data-img-src="https://picsum.photos/200/300?img=1">悬停显示图片1</span>,
  <span class="img-trigger" data-img-src="https://picsum.photos/200/300?img=2">悬停显示图片2</span>,
  <span class="img-trigger" data-img-src="https://picsum.photos/200/300?img=3">悬停显示图片3</span>。
</div>

<div class="box">
  <div class="photo">
    <img id="main-photo" src="https://picsum.photos/200/300" alt="默认图片">
  </div>
</div>

补充CSS(可选,优化交互提示)

给触发文本添加样式,提示用户可交互:

/* 原有CSS保留,新增以下内容 */
.img-trigger {
  color: #0066cc;
  text-decoration: underline;
  cursor: pointer;
}

JavaScript代码

通过事件监听实现图片切换:

// 获取所有触发元素和右侧图片
const triggers = document.querySelectorAll('.img-trigger');
const mainPhoto = document.getElementById('main-photo');
// 保存默认图片地址,用于鼠标离开时恢复
const defaultSrc = mainPhoto.src;

// 给每个触发元素绑定悬停事件
triggers.forEach(trigger => {
  // 鼠标移入时切换图片
  trigger.addEventListener('mouseover', () => {
    mainPhoto.src = trigger.dataset.imgSrc;
  });
  
  // 鼠标移出时恢复默认图片(按需选择是否保留)
  trigger.addEventListener('mouseout', () => {
    mainPhoto.src = defaultSrc;
  });
});

解决方案2:纯CSS实现(依赖:has选择器)

如果不需要复杂逻辑,且浏览器支持:has选择器(目前主流浏览器均支持),可以用纯CSS实现:

修改后的HTML

把所有图片放在.photo容器中,默认只显示默认图:

<div class="main">
  <span class="trigger-img1">悬停显示图片1</span>,
  <span class="trigger-img2">悬停显示图片2</span>,
  <span class="trigger-img3">悬停显示图片3</span>。
</div>

<div class="box">
  <div class="photo">
    <img class="default-img" src="https://picsum.photos/200/300" alt="默认图片">
    <img class="img1" src="https://picsum.photos/200/300?img=1" alt="图片1">
    <img class="img2" src="https://picsum.photos/200/300?img=2" alt="图片2">
    <img class="img3" src="https://picsum.photos/200/300?img=3" alt="图片3">
  </div>
</div>

修改后的CSS

通过:has选择器监听左侧文本的悬停状态,控制右侧图片的显示:

/* 原有CSS保留,新增以下内容 */
/* 隐藏非默认图片,设置绝对定位让图片重叠 */
.photo .img1, .photo .img2, .photo .img3 {
  display: none;
  position: absolute;
  top: 0;
  left: 0;
}

/* 悬停对应文本时,显示目标图片并隐藏默认图 */
.main:has(.trigger-img1:hover) .box .photo .img1 {
  display: block;
}
.main:has(.trigger-img1:hover) .box .photo .default-img {
  display: none;
}

.main:has(.trigger-img2:hover) .box .photo .img2 {
  display: block;
}
.main:has(.trigger-img2:hover) .box .photo .default-img {
  display: none;
}

.main:has(.trigger-img3:hover) .box .photo .img3 {
  display: block;
}
.main:has(.trigger-img3:hover) .box .photo .default-img {
  display: none;
}

/* 触发文本样式提示 */
.trigger-img1, .trigger-img2, .trigger-img3 {
  color: #0066cc;
  text-decoration: underline;
  cursor: pointer;
}

内容的提问来源于stack exchange,提问作者Yasmeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:16:03