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

JavaScript点击元素后如何取消对应mouseleave事件的触发效果

问题修复方案

核心问题原因

你当前代码仅移除了mouseleave事件监听,但mouseenter事件仍处于绑定状态,点击导航后如果鼠标重新移入元素,仍会触发hover动画覆盖点击后设置的表单状态。

修复方案

有两种实现方式可选:

方式1:绑定/解绑事件实现

点击导航时同时移除两个hover事件的监听,关闭表单时再重新绑定即可,完整代码如下:

var navContact = document.getElementsByClassName("nav-l")[0];
var contactForm = document.getElementsByClassName("kontakt")[0];
// 请将下方close-btn替换为你实际使用的关闭按钮类名
var closeBtn = document.getElementsByClassName("close-btn")[0];

var navContactMouseEnter = function (e) {
  console.log("mouse entered!");
  navContact.style.paddingLeft = "5vw";
  contactForm.style.transform = "translateX(-25vw)";
}

var navContactMouseLeave = function (e) {
  console.log("mouse left!");
  navContact.style.paddingLeft = "0vw";
  contactForm.style.transform = "translateX(-31vw)";
}

// 初始绑定hover事件
navContact.addEventListener("mouseenter", navContactMouseEnter, true);
navContact.addEventListener("mouseleave", navContactMouseLeave, true);

navContact.addEventListener("click", (e) => {
  e.preventDefault();
  // 同时移除两个hover事件监听,避免hover效果干扰激活态
  navContact.removeEventListener("mouseenter", navContactMouseEnter, true);
  navContact.removeEventListener("mouseleave", navContactMouseLeave, true);
  navContact.style.paddingLeft = "5vw";
  contactForm.style.transform = "translateX(0vw)";
});

// 关闭按钮逻辑
closeBtn.addEventListener("click", (e) => {
  e.preventDefault();
  // 重新绑定hover事件
  navContact.addEventListener("mouseenter", navContactMouseEnter, true);
  navContact.addEventListener("mouseleave", navContactMouseLeave, true);
  // 重置样式到初始状态
  navContact.style.paddingLeft = "0vw";
  contactForm.style.transform = "translateX(-31vw)";
});

方式2:状态变量控制(更推荐)

不用频繁操作事件监听,新增一个状态变量标记表单是否激活,hover事件触发时判断状态再决定是否执行逻辑,代码更易维护:

var navContact = document.getElementsByClassName("nav-l")[0];
var contactForm = document.getElementsByClassName("kontakt")[0];
var closeBtn = document.getElementsByClassName("close-btn")[0];
// 新增状态变量,标记表单是否处于激活状态
var isFormActive = false;

var navContactMouseEnter = function (e) {
  // 表单已激活时直接返回,不执行hover动画
  if (isFormActive) return;
  console.log("mouse entered!");
  navContact.style.paddingLeft = "5vw";
  contactForm.style.transform = "translateX(-25vw)";
}

var navContactMouseLeave = function (e) {
  if (isFormActive) return;
  console.log("mouse left!");
  navContact.style.paddingLeft = "0vw";
  contactForm.style.transform = "translateX(-31vw)";
}

navContact.addEventListener("mouseenter", navContactMouseEnter, true);
navContact.addEventListener("mouseleave", navContactMouseLeave, true);

navContact.addEventListener("click", (e) => {
  e.preventDefault();
  isFormActive = true;
  navContact.style.paddingLeft = "5vw";
  contactForm.style.transform = "translateX(0vw)";
});

closeBtn.addEventListener("click", (e) => {
  e.preventDefault();
  isFormActive = false;
  navContact.style.paddingLeft = "0vw";
  contactForm.style.transform = "translateX(-31vw)";
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:42:02