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

如何用JavaScript/jQuery实现悬停顶部图片时背景图保持淡显

问题解决:点击后保持背景图淡显状态

问题描述

我有一个带背景图的div,鼠标悬停时背景图变淡;同时悬停背景图时,同一容器内的第二个div图片(位于背景图上方)会渐显。点击顶部图片会触发JS代码,让一组社交图标滑入右侧。现在的问题是:用户悬停顶部图片并点击后,背景图不会保持淡显状态,但我需要它一直保持淡显。

因为HTML的div顺序限制,无法用纯CSS实现,且不能修改div顺序(修改后顶部图片无法在悬停时显示),试过多种JS和jQuery方案都没成功。

原始代码

JavaScript

function myFunction() {
  var x = document.getElementById("hidden-social");
  x.addEventListener("animationend", function(e) {
    e.preventDefault();
    if (x.style.animationName == "slide-left") {
      x.style.display = "none";
    }
  });
  if (x.style.display === "none") {
    x.style.display = "block";
    x.style.animation = "1s slide-right";
  } else {
    x.style.animation = "1s slide-left";
  }
}

CSS

.fading-image {
  opacity: 1;
  transition: opacity 1s;
}

.fading-image:hover {
  opacity: 0.5;
}

.cross-button {
  opacity: 0;
  transition: opacity 1s;
  cursor: pointer;
  position: relative;
  top: -50px;
  left: 325px;
}

.fading-image:hover~.cross-button,
.cross-button:hover {
  opacity: 1;
}

.social-icon-2 {
  width: 25px;
}

.social-icon-p2 {
  width: 15px;
}

#hidden-social-container {
  width: 200px;
  height: 32px;
  position: relative;
  top: -80px;
  left: 640px;
  overflow: hidden;
}

#hidden-social {
  width: 145px;
}

@keyframes slide-right {
  from {
    margin-left: -100%;
  }
  to {
    margin-left: 0%;
  }
}

@keyframes slide-left {
  from {
    margin-left: 0%;
  }
  to {
    margin-left: -100%;
  }
}

HTML

<div class="ev-fade">
  <div class="fading-image"><img src="http://box5385.temp.domains/~atelifw5/wp-content/uploads/2022/12/RO_PIX_EV_03.png">
  </div>

  <div class="cross-button" onclick="myFunction()"><img src="http://box5385.temp.domains/~atelifw5/wp-content/uploads/2022/12/cross.thin_.png">
  </div>
</div>


<div id="hidden-social-container">
  <div id="hidden-social" style="display:none;">

    <a href="https://instagram.com" target="blank"><img class="social-icon-2" src="http://box5385.temp.domains/~atelifw5/wp-content/uploads/2022/12/Instagram_Black.svg">
    </a>

    <a href="https://www.facebook.com/sharer/sharer.php?u=http://box5385.temp.domains/~atelifw5/east-village" target="blank"><img class="social-icon-2" src="http://box5385.temp.domains/~atelifw5/wp-content/uploads/2022/12/Facebook_Black.svg">
    </a>

    <a href="https://twitter.com/share?url=http://box5385.temp.domains/~atelifw5/east-village/" target="_blank">
      <img class="social-icon-2" src="http://box5385.temp.domains/~atelifw5/wp-content/uploads/2022/12/Facebook_Black.svg"></a>

    <a href="https://www.linkedin.com/shareArticle?url=http://box5385.temp.domains/~atelifw5/east-village" target="blank"><img class="social-icon-2" src="http://box5385.temp.domains/~atelifw5/wp-content/uploads/2022/12/LinkedIn_Black.svg">
    </a>

    <a href="https://pinterest.com/pin/create/button/" target="blank"><img class="social-icon-p2" src="http://box5385.temp.domains/~atelifw5/wp-content/uploads/2022/12/Pinterest_Black.svg">
    </a>
  </div>
</div>

解决方案

核心思路是给背景图添加一个持久化类来保持淡显状态,通过JS根据社交图标的显示/隐藏状态切换这个类:

修改后的CSS

新增.faded类,和hover状态共同控制透明度:

.fading-image {
  opacity: 1;
  transition: opacity 1s;
}

/* 同时保留hover和新增的faded类控制淡显 */
.fading-image.faded,
.fading-image:hover {
  opacity: 0.5;
}

/* 其余CSS代码不变 */
.cross-button {
  opacity: 0;
  transition: opacity 1s;
  cursor: pointer;
  position: relative;
  top: -50px;
  left: 325px;
}

.fading-image:hover~.cross-button,
.cross-button:hover {
  opacity: 1;
}

.social-icon-2 {
  width: 25px;
}

.social-icon-p2 {
  width: 15px;
}

#hidden-social-container {
  width: 200px;
  height: 32px;
  position: relative;
  top: -80px;
  left: 640px;
  overflow: hidden;
}

#hidden-social {
  width: 145px;
}

@keyframes slide-right {
  from {
    margin-left: -100%;
  }
  to {
    margin-left: 0%;
  }
}

@keyframes slide-left {
  from {
    margin-left: 0%;
  }
  to {
    margin-left: -100%;
  }
}

修改后的JavaScript

在函数中获取背景图元素,根据社交图标状态添加/移除.faded类:

function myFunction() {
  var x = document.getElementById("hidden-social");
  // 获取背景图元素
  const fadingImage = document.querySelector('.fading-image');
  
  x.addEventListener("animationend", function(e) {
    e.preventDefault();
    if (x.style.animationName == "slide-left") {
      x.style.display = "none";
      // 社交图标隐藏时移除淡显类
      fadingImage.classList.remove('faded');
    }
  });
  
  if (x.style.display === "none") {
    x.style.display = "block";
    x.style.animation = "1s slide-right";
    // 社交图标显示时添加淡显类
    fadingImage.classList.add('faded');
  } else {
    x.style.animation = "1s slide-left";
  }
}

说明

  • hover状态仅在鼠标悬停时生效,点击后鼠标离开会恢复原状,用.faded类实现持久化淡显
  • 社交图标滑入显示时,给背景图添加.faded类保持淡显
  • 社交图标滑出隐藏时,移除.faded类,背景图恢复正常透明度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:20:20