Elementor 原子化元素(Atomic Tabs)如何实现鼠标悬停切换(Hover)?完整教程
随着 Elementor 新版 Atomic Elements(原子化元素) 的推出,越来越多的网站开始使用新的 Atomic Tabs(选项卡) 组件。
不过,很多用户都会发现一个问题:
Atomic Tabs 默认只能点击(Click)切换,无法像很多高端企业官网一样,实现鼠标悬停(Hover)自动切换。
例如 Apple、HubSpot、Framer 等网站,鼠标移动到不同的 Tab 上,就会立即切换对应内容,整个交互更加流畅,也更符合现代网页设计趋势。
那么,Elementor Atomic Tabs 能不能实现 Hover 切换呢?
答案是:可以,而且无需修改 Elementor 核心文件。
文章目录
Toggle为什么要使用 Hover 切换?
相比点击切换,鼠标悬停切换具有以下优势:
- 提高用户浏览效率
- 产品展示更加直观
- 增强页面交互体验
- 更符合现代 SaaS 网站设计风格
- 提升页面整体高级感
特别是在展示:
- 产品分类
- 服务介绍
- 企业优势
- 案例展示
- 图片切换
这些模块时,Hover Tabs 的体验通常会比 Click Tabs 更自然。
Atomic Tabs 的工作原理
新版 Elementor Atomic Tabs 与旧版 Tabs 小工具完全不同。
Atomic Tabs 的 HTML 结构大致如下:
<button data-e-type="e-tab" role="tab" aria-selected="false"> </button>
每一个 Tab 本质上都是一个 <button>。
点击按钮时,Elementor 内部会更新:
- 当前激活状态
- aria-selected
- 内容区域
- 动画效果
因此,我们无需研究 Elementor 内部代码,只需要模拟一次点击即可完成切换。
最简单的 Hover 实现
最基础的方法就是监听鼠标移入事件。
document.querySelectorAll('[data-e-type="e-tab"]').forEach(tab => { tab.addEventListener('mouseenter', function () { if (this.getAttribute('aria-selected') !== 'true') { this.click(); } }); });
这样,当鼠标进入 Tab 时,就会自动执行一次点击,从而实现 Hover 切换。
整个过程仍然使用 Elementor 自己的切换逻辑,因此兼容性非常高。
推荐使用的完整版本(生产环境)
如果直接鼠标进入就立即切换,当用户快速划过多个 Tab 时,页面可能会不停切换,体验并不好。
因此,更推荐下面这套代码。
它增加了:
- 防止重复绑定事件
- Hover 延迟切换
- 支持 Elementor AJAX 加载
- 支持动态生成的 Atomic 元素
如果你想针对某个Tab
查询到当前TAB的HTML
data-id="4151fbe"
document.addEventListener("DOMContentLoaded", function () {
const tabs = document.querySelectorAll(
'[data-id="4151fbe"] [data-e-type="e-tab"]'
);
tabs.forEach(tab => {
let timer;
tab.addEventListener("mouseenter", function () {
timer = setTimeout(() => {
if (this.getAttribute("aria-selected") !== "true") {
this.click();
}
}, 80);
});
tab.addEventListener("mouseleave", function () {
clearTimeout(timer);
});
});
});
如果你想全站所有 Atomic Tabs 都支持 Hover
(function () {
function initHoverTabs() {
document.querySelectorAll('[data-e-type="e-tab"]').forEach(tab => {
if (tab.dataset.hoverInit) return;
tab.dataset.hoverInit = "1";
let timer;
tab.addEventListener("mouseenter", function () {
timer = setTimeout(() => {
if (this.getAttribute("aria-selected") !== "true") {
this.click();
}
}, 100);
});
tab.addEventListener("mouseleave", function () {
clearTimeout(timer);
});
});
}
initHoverTabs();
new MutationObserver(initHoverTabs).observe(document.body, {
childList: true,
subtree: true
});
})();
相比简单版本,这套代码更加稳定,也更适合正式网站使用。

为什么要使用 MutationObserver?
很多人第一次写 Hover Tabs 时都会这样写:
document.addEventListener('DOMContentLoaded', function () { });
这种写法对于普通页面没有问题。
但是 Elementor 的很多组件并不是页面加载时一次性生成,而是在后续通过 JavaScript 动态创建,例如:
- Popup(弹窗)
- Loop Grid
- AJAX 内容
- 动态模板
- Atomic Components
如果只在 DOMContentLoaded 时绑定事件,新生成的 Tabs 就不会拥有 Hover 功能。
因此,使用 MutationObserver 可以监听页面变化,只要页面新增了 Atomic Tabs,就会自动绑定 Hover 事件。
兼容性更好,也更加稳定。
建议增加 Hover 延迟
很多国外优秀的网站并不会在鼠标刚进入 Tab 时立即切换,而是会等待 100~200 毫秒。
例如:},100);
可以改成:},180);
或者:},200);
这样可以有效避免:
鼠标快速划过多个 Tab
页面频繁闪烁
用户误触
整体交互会更加自然。
代码应该放在哪里?
可以放到以下任意位置:
- Elementor → 自定义代码(Footer)
- 子主题 JS 文件
- Code Snippets 插件
- 主题页脚自定义 JS
由于整个方案没有修改 Elementor 核心文件,因此即使 Elementor 升级,也不会影响代码正常运行。
需要外贸独立站建站或 GEO 优化服务?美络云科技(Mloun)提供 WordPress 外贸独立站建站、WooCommerce 跨境商城、海外 SEO 与 GEO 生成式引擎优化一站式服务,服务覆盖全球 25% 的国家和地区。