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

实现列表鼠标下移激活:hover、上移移除,及前置元素同步hover效果

实现动态列表hover联动效果(向下触发、向上移除)

嘿,这个交互需求挺有意思的!我们没法直接操控:hover伪类来批量控制其他元素,所以用自定义CSS类来模拟hover的背景色变化,搭配jQuery实现方向判断和动态样式切换,具体实现如下:

1. 基础HTML结构

先准备好列表的基本结构:

<ul class="linked-hover-list">
  <li>列表项 1</li>
  <li>列表项 2</li>
  <li>列表项 3</li>
  <li>列表项 4</li>
  <li>列表项 5</li> <!-- 可按需扩展更多列表项 -->
</ul>

2. CSS样式定义

默认样式+模拟hover效果的类,添加过渡动画让颜色变化更顺滑:

.linked-hover-list {
  list-style: none;
  padding: 0;
  width: 220px;
  margin: 0;
}

.linked-hover-list li {
  padding: 12px 16px;
  border-bottom: 1px solid #f0f0f0;
  transition: background-color 0.2s ease;
  cursor: pointer;
}

/* 用这个类模拟:hover的背景色效果 */
.linked-hover-list li.active {
  background-color: #e6f7ff; /* 替换成你需要的hover背景色 */
}

3. jQuery核心逻辑

通过跟踪鼠标上一次停留的列表项索引,判断移动方向,动态添加/移除样式类:

$(document).ready(function() {
  let prevIndex = -1; // 记录上一次鼠标停留的列表项索引

  // 监听每个li的鼠标进入事件
  $('.linked-hover-list li').on('mouseenter', function() {
    const currentIndex = $(this).index();
    
    // 判断移动方向:当前索引大于上一个 → 向下移动
    if (currentIndex > prevIndex) {
      // 给当前项及所有前置项添加active类
      $('.linked-hover-list li').slice(0, currentIndex + 1).addClass('active');
    } else {
      // 向上移动时,移除当前项之后所有项的active类
      $('.linked-hover-list li').slice(currentIndex + 1).removeClass('active');
    }

    // 更新上一次的索引记录
    prevIndex = currentIndex;
  });

  // 鼠标离开整个列表时,重置所有状态
  $('.linked-hover-list').on('mouseleave', function() {
    $('.linked-hover-list li').removeClass('active');
    prevIndex = -1;
  });
});

效果验证

  • 鼠标向下移动到第4个li时,第1-4个li都会同步显示hover背景色;
  • 鼠标向上移动到第2个li时,第3、4个li的hover效果会被移除,仅保留第1-2个的效果;
  • 鼠标离开整个列表后,所有hover状态清空,恢复初始样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:26:22