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

jQuery实现卡片悬停缩放动画 如何优化逐次操作类的冗余代码

卡片悬停缩放效果优化方案

核心优化思路

原代码为每个卡片单独绑定事件冗余度较高,优化后仅需统一给所有.card绑定事件,通过计算卡片之间的索引差绝对值,动态为其余卡片添加对应size类即可,后续新增卡片也不需要额外修改JS代码,可自动适配。

优化后代码

JavaScript 代码

// 统一绑定悬停事件
$(".card").mouseover(function() {
  // 清空所有卡片的active和size类
  $(".card").removeClass('active size1 size2 size3 size4');
  const $hoverCard = $(this);
  // 当前悬停卡片添加active类
  $hoverCard.addClass('active');
  // 获取当前悬停卡片的索引
  const hoverIndex = $hoverCard.index();
  // 遍历所有卡片计算距离
  $(".card").each(function() {
    const currentIndex = $(this).index();
    const distance = Math.abs(currentIndex - hoverIndex);
    // 按距离添加对应size类
    if (distance > 0 && distance <=4) {
      $(this).addClass(`size${distance}`);
    }
  });
});

// 鼠标移出恢复默认状态
$(".card").mouseout(function() {
  $(".card").removeClass('active size1 size2 size3 size4');
  $(".c").addClass('active');
});

CSS 代码(无需修改,和原有实现一致)

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  margin-top: 100px;
}

.container .card {
  background-color: red;
  color: #fff;
  width: 100px;
  height: 150px;
  text-align: center;
  display: inline-block;
  transition: 0.2s;
}

.container .card.active {
  transform: scale(1.4, 1.4);
  position: relative;
  z-index: 100;
}

.container .card.a {
  background-color: black;
}

.container .card.b {
  background-color: blue;
  width: 120px;
  height: 170px;
}

.container .card.c {
  background-color: red;
}

.container .card.d {
  background-color: orange;
  width: 120px;
  height: 170px;
}

.container .card.e {
  background-color: yellow;
}

.container .card.size1 {
  transform: scale(1.1, 1.1);
  z-index: 1;
}

.container .card.size2 {
  transform: scale(1.15, 1.15);
  z-index: -1;
}

.container .card.size3 {
  transform: scale(0.9);
  z-index: -2;
}

.container .card.size4 {
  transform: scale(0.8);
  z-index: -3;
}

HTML 代码(无需修改,和原有实现一致)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div class="container">
  <div class="card a"><p>Card 1</p></div>
  <div class="card b"><p>Card 2</p></div>
  <div class="card c active"><p>Card 3</p></div>
  <div class="card d"><p>Card 4</p></div>
  <div class="card e"><p>Card 5</p></div>
</div>

优化效果说明

  • 代码量大幅缩减,无重复的事件绑定逻辑
  • 扩展性更强,后续新增卡片仅需提前定义对应距离的size类即可自动生效
  • 功能和原有实现完全一致,鼠标悬停时其余卡片会根据距离自动应用对应缩放等级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:39:04