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

泰式炒粉卡路里计算器jQuery显示NaN问题及悬停加号需求

嘿,我来帮你搞定这两个问题!

问题1:Total Calories 出现 NaN 的修复方案

NaN 通常是因为非数值类型参与了算术运算,结合你说的只有 Main Dish 模块交互后才出现这个问题,大概率是计算总热量时出了这几个问题:

  • 你可能直接把 DOM 里获取的文本内容(比如带格式的字符串)拿来做加法了,比如如果 Carbs/Fats/Proteins 的值是像 "150" 这样的字符串,直接相加会变成字符串拼接;如果某个值是 undefined(比如元素没找到或者没赋值),加起来就会变成 NaN。
  • 总热量的初始值没正确设置为数字(比如初始是 undefined 而不是 0)。

具体修复步骤:

  1. 确保营养成分值被转为数字类型:从 DOM 取数值时,用 parseFloat() 或 parseInt() 处理,还要加默认值避免 null/undefined 导致的问题:
// 示例代码,替换成你实际获取元素的方式
const carbs = parseFloat(document.querySelector('.carbs-value').textContent) || 0;
const fats = parseFloat(document.querySelector('.fats-value').textContent) || 0;
const proteins = parseFloat(document.querySelector('.proteins-value').textContent) || 0;
  1. 计算总热量:用处理后的数字相加,再把结果赋值给总热量的显示元素:
const totalCalories = carbs + fats + proteins;
document.querySelector('.total-calories').textContent = totalCalories.toFixed(0); // 可选:保留整数格式
  1. 排查变量初始化:检查你的代码里,总热量的相关变量是不是一开始就设为 0,而不是 undefined 或者空字符串。
问题2:图片悬停中央叠加+号的实现

这个是 CSS 定位的常见坑,核心是要让+号的定位基于图片容器,再用 transform 实现完美居中,而不是硬写 top/left 百分比(硬写会基于元素左上角,不是中心)。

实现代码示例:

假设你的 HTML 结构是这样的:

<div class="dish-image-container">
  <img src="你的菜品图片URL" alt="泰式炒粉">
  <span class="hover-plus-sign">+</span>
</div>

对应的 CSS:

.dish-image-container {
  position: relative; /* 关键:父元素设为相对定位,让子元素的绝对定位基于它 */
  display: inline-block; /* 或者 block,根据你的布局调整 */
  overflow: hidden; /* 可选:防止+号超出容器 */
}

.dish-image-container img {
  width: 100%; /* 确保图片填满容器 */
  height: auto;
}

.hover-plus-sign {
  position: absolute;
  top: 50%;
  left: 50%;
  /* 核心:用transform把元素自身的中心移到容器中心 */
  transform: translate(-50%, -50%);
  /* 以下是样式美化,按需调整 */
  font-size: 3rem;
  color: white;
  background-color: rgba(0, 0, 0, 0.6);
  width: 60px;
  height: 60px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0; /* 默认隐藏 */
  transition: opacity 0.3s ease; /* 平滑过渡效果 */
  cursor: pointer;
}

.dish-image-container:hover .hover-plus-sign {
  opacity: 1; /* 悬停时显示+号 */
}

之前你调试没成功,大概率是没给图片容器加 position: relative,导致+号的定位是基于整个页面,而不是图片;或者没用到 transform: translate(-50%, -50%),只靠 top: 50%; left: 50% 会让+号的左上角在中心,而不是+号本身居中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:16:29