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

移动端如何手动清除链接的点击/悬停/激活/聚焦状态?

手动重置移动端链接激活状态的可行方案

核心思路

放弃依赖原生blur()或事件解绑,改用自定义CSS类控制视觉状态,配合JS监听点击/滚动事件手动切换类,既满足状态切换需求,又保留链接原生的focusability特性。

步骤1:定义CSS状态规则

通过类明确区分默认状态和激活状态,同时保留原生focus样式(按需调整):

/* 默认链接样式 */
.list-item a {
  color: #ffffff;
  transition: color 0.2s ease;
}

/* 自定义激活状态(点击后触发) */
.list-item a.active-link {
  color: #9333ea; /* 紫色 */
}

/* 保留原生focus状态,满足可聚焦需求 */
.list-item a:focus {
  outline: 2px solid #9333ea;
  color: #9333ea;
}

步骤2:JS事件监听与状态切换

通过事件监听实现点击激活、滚动重置逻辑,同时给滚动事件加防抖优化性能:

// 获取所有目标列表项
const listItems = document.querySelectorAll('.list-item');

// 防抖函数:避免滚动事件频繁触发导致性能问题
function debounce(func, delay = 100) {
  let timer;
  return function() {
    clearTimeout(timer);
    timer = setTimeout(func, delay);
  };
}

// 点击列表项:给对应链接添加激活类
listItems.forEach(item => {
  const link = item.querySelector('a');
  item.addEventListener('click', () => {
    // 先清除其他链接的激活状态
    document.querySelectorAll('.list-item a.active-link').forEach(el => el.classList.remove('active-link'));
    // 激活当前链接
    link.classList.add('active-link');
  });
});

// 页面滚动:清除所有链接的激活状态
window.addEventListener('scroll', debounce(() => {
  document.querySelectorAll('.list-item a.active-link').forEach(el => el.classList.remove('active-link'));
}));

补充:处理触摸交互(可选)

如果需要适配移动端触摸触发的状态,可额外添加touchstart事件监听:

listItems.forEach(item => {
  const link = item.querySelector('a');
  item.addEventListener('touchstart', () => {
    link.classList.add('active-link');
  });
});

这个方案完全规避了blur()无效、事件解绑丢失聚焦性的问题,在2023+的移动端浏览器中兼容性拉满,逻辑直接可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:42:49