泰式炒粉卡路里计算器jQuery显示NaN问题及悬停加号需求
嘿,我来帮你搞定这两个问题!
问题1:Total Calories 出现 NaN 的修复方案
NaN 通常是因为非数值类型参与了算术运算,结合你说的只有 Main Dish 模块交互后才出现这个问题,大概率是计算总热量时出了这几个问题:
- 你可能直接把 DOM 里获取的文本内容(比如带格式的字符串)拿来做加法了,比如如果 Carbs/Fats/Proteins 的值是像
"150"这样的字符串,直接相加会变成字符串拼接;如果某个值是undefined(比如元素没找到或者没赋值),加起来就会变成 NaN。 - 总热量的初始值没正确设置为数字(比如初始是
undefined而不是0)。
具体修复步骤:
- 确保营养成分值被转为数字类型:从 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;
- 计算总热量:用处理后的数字相加,再把结果赋值给总热量的显示元素:
const totalCalories = carbs + fats + proteins; document.querySelector('.total-calories').textContent = totalCalories.toFixed(0); // 可选:保留整数格式
- 排查变量初始化:检查你的代码里,总热量的相关变量是不是一开始就设为
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
相关产品推荐
相关产品推荐

