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

如何优化JavaScript代码:消除mousemove事件与if判断的重复冗余

优化思路

你这段代码的重复逻辑非常好剥离:只有弹窗里显示的部门名称是差异化内容,其余的弹窗创建、鼠标事件绑定、坐标计算逻辑完全一致,直接把差异化的部分提前判断处理,公共逻辑复用即可,同时还可以修复原有逻辑的潜在问题、进一步优化性能。

核心优化点

  • 剥离唯一的差异化变量:只提前判断dept的取值,决定弹窗里显示的部门名称,不用把整套逻辑写两遍
  • 修复原有逻辑漏洞:原代码在窗口宽度恰好等于480px时,不会进入任何判断分支,x、y变量未定义会导致报错,改用三元表达式覆盖全场景
  • 降低DOM操作频率:原代码每次mousemove都会执行一次append操作,优化后只在鼠标移入时添加一次弹窗,mousemove仅更新坐标,性能更好
  • 复用重复的坐标计算逻辑,避免冗余代码,同时缓存重复调用的DOM查询结果,减少性能损耗

优化后代码

// 提前处理唯一的差异化内容:弹窗显示的部门名
const showDept = dept === "Parlement européen" ? dep : dept;
// 统一创建弹窗
const popup_topo = $(`<div class='popup_topo'><strong>${showDept}<br/>${total} parrainages</strong></div>`);
const $this = $(this);

$this.on("mouseenter", function() {
  // 鼠标移入时只添加一次弹窗
  $this.append(popup_topo);
}).on("mousemove", function(event) {
  const winWidth = $(window).width();
  const offset = $this.offset();
  // 三元表达式直接计算x偏移,覆盖全窗口宽度场景
  const xOffset = winWidth < 480 ? -45 : 30;
  const x = event.pageX - offset.left + xOffset;
  const y = event.pageY - offset.top + 30;
  // 仅更新坐标
  popup_topo.css({
    top: `${y}px`,
    left: `${x}px`
  });
}).on("mouseleave", function() {
  popup_topo.remove();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:36:04