吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2702|回复: 110
上一主题 下一主题
收起左侧

[原创工具] 体质指数计算器。2025年3月14日更新了,增加了功能

  [复制链接]
跳转到指定楼层
楼主
eastar2008 发表于 2025-3-11 20:26 回帖奖励
本帖最后由 eastar2008 于 2025-3-14 20:24 编辑

看有朋友发,前几天正好做了一个。输入姓名 (非必填)选择性别,默认 女,年龄  身高(厘米) 体重(千克)自动计算体脂率和BMI,给出体质状态,把计算的结果显示在窗口。并且在可执行文件的根目录生成  体质计算器测量记录表.txt 用于记录每次的测量。生成的模式为
2025-03-11 20:15:46
姓名:王菲
性别:女
年龄:56
身高:173 厘米
体重:50 千克
体脂率:27.53%
体质状态:偏瘦
BMI:16.71
----------------------
第一次发,谢谢各位。https://wwru.lanzoub.com/i5e6F2qa87qf


2025年3月14日,根据建议更新了功能,根据计算出的结果给出正常的体重,应该增加或者减少多少kg。
还做了些小的修改,默认光标在姓名输入栏等等。 https://wwru.lanzoub.com/icF1F2qkgamh

新版2.PNG (33.96 KB, 下载次数: 1)

新版2.PNG

新版1.PNG (45.83 KB, 下载次数: 2)

新版1.PNG

免费评分

参与人数 28吾爱币 +31 热心值 +23 收起 理由
seven2024 + 1 谢谢@Thanks!
cntanglang + 1 谢谢@Thanks!
f1984 + 1 + 1 我很赞同!
chakins + 1 + 1 谢谢@Thanks!
VFTGYH + 1 + 1 我很赞同!
kerrychu + 1 + 1 谢谢@Thanks!
YQ大仙 + 1 + 1 谢谢@Thanks!
zhangwei6929 + 1 + 1 谢谢@Thanks!
RF13100 + 1 + 1 热心回复!
advod + 1 + 1 我很赞同!
hoho821 + 1 很方便
lindong00 + 1 我很赞同!
ycg584520 + 1 + 1 好的
12jianhanzhi + 1 用心讨论,共获提升!
lsh7d1 + 1 谢谢@Thanks!
asd9458 + 1 + 1 谢谢@Thanks!
liangxs + 1 谢谢@Thanks!
yuanwiuming + 1 + 1 谢谢@Thanks!
yanglinman + 1 谢谢@Thanks!
liwei69288 + 1 + 1 热心回复!
Devotion6784 + 1 + 1 我很赞同!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
SampsonCXN8 + 1 + 1 谢谢@Thanks!
dspp129 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lsb2pojie + 1 + 1 热心回复!
moranyuyan + 1 + 1 我很赞同!
AG9000 + 1 + 1 对生活很有帮助
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
我的小鱼干 发表于 2025-3-12 13:52
287859999 发表于 2025-3-12 03:37
减肥要怎么能把脸瘦下去  我身高186 从120长到150身上没多少肉胖的肉全长脸上了 做什么运动能瘦脸

其实跟你什么运动无关,你只要把体重减下来脸自然跟着就瘦了,瘦脸除了减脂就是医美了,没什么运动可以说专门瘦脸的,当然你也可以适当练练背因为练好背可以拉升你颈部肌肉让下颌线更立体点,脸上其他地方的肉只能靠减脂了
推荐
zl33333 发表于 2025-3-14 11:53
这是manus写的
[HTML] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>科学BMI计算器 - 健康体重管理助手</title>
    <meta name="description" content="科学的BMI计算器,根据年龄和性别提供精准评估,附带饮食运动建议和历史记录图表">
    <link rel="stylesheet" href="styles.css">
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-annotation"></script>
</head>
<body>
    <div class="container">
        <!-- 标题区域 -->
        <header class="header">
            <h1>科学BMI计算器 <span class="emoji">&#128202;</span></h1>
            <p class="subtitle">根据年龄和性别的精准健康体重评估工具</p>
        </header>
 
        <main class="main-content">
            <!-- 左侧:输入表单区域 -->
            <section class="input-section">
                <h2>输入您的信息 <span class="emoji">&#128221;</span></h2>
                <form id="bmi-form">
                    <div class="form-group">
                        <label for="age">年龄</label>
                        <div class="input-with-unit">
                            <input type="number" id="age" name="age" min="2" max="120" placeholder="请输入您的年龄" required>
                            <span class="unit">岁</span>
                        </div>
                        <small class="form-hint">年龄范围:2-120岁</small>
                    </div>
 
                    <div class="form-group">
                        <label>性别</label>
                        <div class="gender-options">
                            <label class="gender-option">
                                <input type="radio" name="gender" value="male" required>
                                <span class="gender-icon">&#128104;</span>
                                <span>男性</span>
                            </label>
                            <label class="gender-option">
                                <input type="radio" name="gender" value="female">
                                <span class="gender-icon">&#128105;</span>
                                <span>女性</span>
                            </label>
                        </div>
                    </div>
 
                    <div class="form-group">
                        <label for="height">身高</label>
                        <div class="input-with-unit">
                            <input type="number" id="height" name="height" min="50" max="250" step="0.1" placeholder="请输入您的身高" required>
                            <span class="unit">厘米</span>
                        </div>
                        <small class="form-hint">身高范围:50-250厘米</small>
                    </div>
 
                    <div class="form-group">
                        <label for="weight">体重</label>
                        <div class="input-with-unit">
                            <input type="number" id="weight" name="weight" min="2" max="500" step="0.1" placeholder="请输入您的体重" required>
                            <span class="unit">公斤</span>
                        </div>
                        <small class="form-hint">体重范围:2-500公斤</small>
                    </div>
 
                    <button type="submit" class="calculate-btn">
                        <span class="emoji">&#128269;</span> 计算BMI
                    </button>
                </form>
            </section>
 
            <!-- 右侧:结果展示区域 -->
            <section class="result-section" id="result-section">
                <h2>BMI计算结果 <span class="emoji">&#128270;</span></h2>
                 
                <div class="result-placeholder" id="result-placeholder">
                    <p>请输入您的信息并点击"计算BMI"按钮</p>
                    <div class="placeholder-icon">&#9878;&#65039;</div>
                </div>
                 
                <div class="result-content" id="result-content" style="display: none;">
                    <div class="bmi-value">
                        <span>您的BMI值:</span>
                        <strong id="bmi-number">--</strong>
                    </div>
                     
                    <div class="bmi-category">
                        <span>BMI分类:</span>
                        <strong id="bmi-category">--</strong>
                        <span class="category-emoji" id="category-emoji">--</span>
                    </div>
                     
                    <div class="bmi-scale">
                        <div class="scale-container">
                            <div class="scale-segment underweight">
                                <span class="segment-label">体重过轻</span>
                            </div>
                            <div class="scale-segment normal">
                                <span class="segment-label">正常</span>
                            </div>
                            <div class="scale-segment overweight">
                                <span class="segment-label">超重</span>
                            </div>
                            <div class="scale-segment obese">
                                <span class="segment-label">肥胖</span>
                            </div>
                        </div>
                        <div class="scale-pointer" id="scale-pointer"></div>
                    </div>
                     
                    <div class="health-risk">
                        <h3>健康风险提示 <span class="emoji">&#9888;&#65039;</span></h3>
                        <p id="health-risk-text">--</p>
                    </div>
                </div>
            </section>
        </main>
         
        <!-- 历史记录图表区域 -->
        <section class="history-section" id="history-section">
            <h2>BMI历史记录 <span class="emoji">&#128200;</span></h2>
            <div class="history-placeholder" id="history-placeholder">
                <p>您的BMI历史记录将显示在这里</p>
                <div class="placeholder-icon">&#128202;</div>
            </div>
             
            <div class="history-content" id="history-content" style="display: none;">
                <div class="chart-container">
                    <canvas id="history-chart"></canvas>
                </div>
                 
                <div class="history-table-container">
                    <h3>详细记录 <button id="toggle-history" class="toggle-btn">显示/隐藏</button></h3>
                    <div class="history-table-wrapper" id="history-table-wrapper">
                        <table class="history-table" id="history-table">
                            <thead>
                                <tr>
                                    <th>日期</th>
                                    <th>年龄</th>
                                    <th>性别</th>
                                    <th>身高(cm)</th>
                                    <th>体重(kg)</th>
                                    <th>BMI值</th>
                                    <th>分类</th>
                                </tr>
                            </thead>
                            <tbody id="history-table-body">
                                <!-- 历史记录将通过JavaScript动态添加 -->
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </section>
         
        <!-- 建议展示区域 -->
        <section class="recommendations-section" id="recommendations-section">
            <h2>个性化健康建议 <span class="emoji">&#128161;</span></h2>
             
            <div class="recommendations-placeholder" id="recommendations-placeholder">
                <p>计算BMI后,您将在这里看到个性化的健康建议</p>
                <div class="placeholder-icon">&#129367; &#127939;&#8205;♂&#65039;</div>
            </div>
             
            <div class="recommendations-content" id="recommendations-content" style="display: none;">
                <div class="recommendations-columns">
                    <div class="diet-recommendations">
                        <h3>饮食建议 <span class="emoji">&#127822;</span></h3>
                        <ul id="diet-list">
                            <!-- 饮食建议将通过JavaScript动态添加 -->
                        </ul>
                    </div>
                     
                    <div class="exercise-recommendations">
                        <h3>运动建议 <span class="emoji">&#127939;&#8205;♂&#65039;</span></h3>
                        <ul id="exercise-list">
                            <!-- 运动建议将通过JavaScript动态添加 -->
                        </ul>
                    </div>
                </div>
            </div>
        </section>
         
        <!-- 注意事项区域 -->
        <section class="notes-section">
            <h2>注意事项 <span class="emoji">&#128204;</span></h2>
            <div class="notes-content">
                <p>BMI只是一个参考指标,不能完全反映一个人的健康状况。肌肉发达的人可能会有较高的BMI,但并不意味着不健康。</p>
                <p>如有特殊健康状况,请在医生指导下进行体重管理。孕妇、哺乳期妇女、老年人和儿童的BMI标准和体重管理方法有特殊要求。</p>
            </div>
        </section>
    </div>
 
    <footer class="footer">
        <p>&#169; 2025 科学BMI计算器 | 本工具仅供参考,不构成医疗建议</p>
    </footer>
 
    <script src="script.js"></script>
</body>
</html>

[JavaScript] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
// 引入Chart.js库的链接
document.addEventListener('DOMContentLoaded', function() {
    // 获取DOM元素
    const bmiForm = document.getElementById('bmi-form');
    const resultContent = document.getElementById('result-content');
    const resultPlaceholder = document.getElementById('result-placeholder');
    const bmiNumber = document.getElementById('bmi-number');
    const bmiCategory = document.getElementById('bmi-category');
    const categoryEmoji = document.getElementById('category-emoji');
    const scalePointer = document.getElementById('scale-pointer');
    const healthRiskText = document.getElementById('health-risk-text');
    const historyContent = document.getElementById('history-content');
    const historyPlaceholder = document.getElementById('history-placeholder');
    const historyTableBody = document.getElementById('history-table-body');
    const toggleHistory = document.getElementById('toggle-history');
    const historyTableWrapper = document.getElementById('history-table-wrapper');
    const recommendationsContent = document.getElementById('recommendations-content');
    const recommendationsPlaceholder = document.getElementById('recommendations-placeholder');
    const dietList = document.getElementById('diet-list');
    const exerciseList = document.getElementById('exercise-list');
     
    // 历史记录数组
    let bmiHistory = JSON.parse(localStorage.getItem('bmiHistory')) || [];
     
    // 初始化页面
    initializePage();
     
    // 表单提交事件处理
    bmiForm.addEventListener('submit', function(e) {
        e.preventDefault();
         
        // 获取表单数据
        const age = parseInt(document.getElementById('age').value);
        const gender = document.querySelector('input[name="gender"]:checked').value;
        const height = parseFloat(document.getElementById('height').value);
        const weight = parseFloat(document.getElementById('weight').value);
         
        // 计算BMI
        const bmi = calculateBMI(weight, height);
         
        // 获取BMI分类
        const category = getBMICategory(bmi, age, gender);
         
        // 显示结果
        displayResult(bmi, category);
         
        // 保存到历史记录
        saveToHistory(age, gender, height, weight, bmi, category);
         
        // 更新历史图表
        updateHistoryChart();
         
        // 显示健康建议
        displayRecommendations(category);
    });
     
    // 切换历史记录表格显示/隐藏
    toggleHistory.addEventListener('click', function() {
        historyTableWrapper.style.display = historyTableWrapper.style.display === 'none' ? 'block' : 'none';
    });
     
    // 初始化页面
    function initializePage() {
        // 如果有历史记录,显示历史图表
        if (bmiHistory.length > 0) {
            updateHistoryTable();
            updateHistoryChart();
            historyContent.style.display = 'block';
            historyPlaceholder.style.display = 'none';
        } else {
            historyContent.style.display = 'none';
            historyPlaceholder.style.display = 'flex';
        }
         
        // 初始隐藏历史记录表格
        historyTableWrapper.style.display = 'none';
    }
     
    // 计算BMI
    function calculateBMI(weight, height) {
        // 将身高从厘米转换为米
        const heightInMeters = height / 100;
        // BMI = 体重(kg) / 身高&#178;(m&#178;)
        const bmi = weight / (heightInMeters * heightInMeters);
        // 保留一位小数
        return Math.round(bmi * 10) / 10;
    }
     
    // 根据年龄和性别获取BMI分类
    function getBMICategory(bmi, age, gender) {
        // 成人BMI分类(中国标准)
        if (age >= 18 && age < 65) {
            if (bmi < 18.5) {
                return {
                    name: '体重过轻',
                    emoji: '&#128546;',
                    color: '#FFEB3B',
                    position: 12.5, // 指示器位置百分比
                    healthRisk: '体重过轻可能导致免疫力下降、营养不良、骨质疏松等健康问题。'
                };
            } else if (bmi >= 18.5 && bmi < 24) {
                return {
                    name: '正常范围',
                    emoji: '&#128522;',
                    color: '#4CAF50',
                    position: 37.5,
                    healthRisk: '您的BMI在正常范围内,继续保持健康的生活方式。'
                };
            } else if (bmi >= 24 && bmi < 28) {
                return {
                    name: '超重',
                    emoji: '&#128528;',
                    color: '#FF9800',
                    position: 62.5,
                    healthRisk: '超重可能增加心血管疾病、2型糖尿病等慢性疾病的风险。'
                };
            } else {
                return {
                    name: '肥胖',
                    emoji: '&#128552;',
                    color: '#F44336',
                    position: 87.5,
                    healthRisk: '肥胖会显著增加多种慢性疾病风险,包括心脏病、中风、糖尿病和某些癌症。'
                };
            }
        }
        // 老年人BMI分类(标准略有不同)
        else if (age >= 65) {
            if (bmi < 20) {
                return {
                    name: '体重过轻',
                    emoji: '&#128546;',
                    color: '#FFEB3B',
                    position: 12.5,
                    healthRisk: '老年人体重过轻可能导致免疫力下降、肌肉减少、骨质疏松等健康问题。'
                };
            } else if (bmi >= 20 && bmi < 27) {
                return {
                    name: '正常范围',
                    emoji: '&#128522;',
                    color: '#4CAF50',
                    position: 37.5,
                    healthRisk: '您的BMI在老年人正常范围内,继续保持健康的生活方式。'
                };
            } else if (bmi >= 27 && bmi < 30) {
                return {
                    name: '超重',
                    emoji: '&#128528;',
                    color: '#FF9800',
                    position: 62.5,
                    healthRisk: '老年人超重可能增加心血管疾病、关节问题等健康风险。'
                };
            } else {
                return {
                    name: '肥胖',
                    emoji: '&#128552;',
                    color: '#F44336',
                    position: 87.5,
                    healthRisk: '老年人肥胖会增加多种慢性疾病风险,影响生活质量和寿命。'
                };
            }
        }
        // 儿童和青少年(简化处理,实际应使用BMI百分位数)
        else {
            // 这里使用简化的儿童BMI判断,实际应根据性别和年龄查表
            if (bmi < 16) {
                return {
                    name: '体重过轻',
                    emoji: '&#128546;',
                    color: '#FFEB3B',
                    position: 12.5,
                    healthRisk: '儿童体重过轻可能影响正常发育和免疫功能。'
                };
            } else if (bmi >= 16 && bmi < 22) {
                return {
                    name: '正常范围',
                    emoji: '&#128522;',
                    color: '#4CAF50',
                    position: 37.5,
                    healthRisk: '您的BMI在儿童/青少年正常范围内,继续保持健康的生活方式。'
                };
            } else if (bmi >= 22 && bmi < 26) {
                return {
                    name: '超重',
                    emoji: '&#128528;',
                    color: '#FF9800',
                    position: 62.5,
                    healthRisk: '儿童/青少年超重可能增加未来发生慢性疾病的风险。'
                };
            } else {
                return {
                    name: '肥胖',
                    emoji: '&#128552;',
                    color: '#F44336',
                    position: 87.5,
                    healthRisk: '儿童/青少年肥胖可能导致多种健康问题,并可能持续到成年。'
                };
            }
        }
    }
     
    // 显示BMI计算结果
    function displayResult(bmi, category) {
        // 显示BMI数值
        bmiNumber.textContent = bmi;
         
        // 显示BMI分类
        bmiCategory.textContent = category.name;
        bmiCategory.style.color = category.color;
         
        // 显示表情
        categoryEmoji.textContent = category.emoji;
         
        // 设置指示器位置
        scalePointer.style.left = `${category.position}%`;
         
        // 显示健康风险
        healthRiskText.textContent = category.healthRisk;
         
        // 显示结果区域,隐藏占位符
        resultContent.style.display = 'block';
        resultPlaceholder.style.display = 'none';
    }
     
    // 保存到历史记录
    function saveToHistory(age, gender, height, weight, bmi, category) {
        // 创建新记录
        const newRecord = {
            date: new Date().toLocaleString(),
            age: age,
            gender: gender,
            height: height,
            weight: weight,
            bmi: bmi,
            category: category.name
        };
         
        // 添加到历史记录数组
        bmiHistory.push(newRecord);
         
        // 如果超过10条记录,删除最早的
        if (bmiHistory.length > 10) {
            bmiHistory.shift();
        }
         
        // 保存到本地存储
        localStorage.setItem('bmiHistory', JSON.stringify(bmiHistory));
         
        // 更新历史记录表格
        updateHistoryTable();
         
        // 显示历史记录区域,隐藏占位符
        historyContent.style.display = 'block';
        historyPlaceholder.style.display = 'none';
    }
     
    // 更新历史记录表格
    function updateHistoryTable() {
        // 清空表格
        historyTableBody.innerHTML = '';
         
        // 添加历史记录
        bmiHistory.slice().reverse().forEach(record => {
            const row = document.createElement('tr');
             
            // 添加单元格
            row.innerHTML = `
                <td>${record.date}</td>
                <td>${record.age}</td>
                <td>${record.gender === 'male' ? '男性' : '女性'}</td>
                <td>${record.height}</td>
                <td>${record.weight}</td>
                <td>${record.bmi}</td>
                <td>${record.category}</td>
            `;
             
            // 添加到表格
            historyTableBody.appendChild(row);
        });
    }
     
    // 更新历史图表
    function updateHistoryChart() {
        // 如果已有图表,销毁它
        if (window.bmiChart) {
            window.bmiChart.destroy();
        }
         
        // 准备图表数据
        const labels = bmiHistory.map(record => record.date);
        const data = bmiHistory.map(record => record.bmi);
         
        // 获取图表上下文
        const ctx = document.getElementById('history-chart').getContext('2d');
         
        // 创建图表
        window.bmiChart = new Chart(ctx, {
            type: 'line',
            data: {
                labels: labels,
                datasets: [{
                    label: 'BMI值',
                    data: data,
                    backgroundColor: 'rgba(76, 175, 80, 0.2)',
                    borderColor: 'rgba(76, 175, 80, 1)',
                    borderWidth: 2,
                    pointBackgroundColor: 'rgba(76, 175, 80, 1)',
                    pointRadius: 4,
                    tension: 0.1
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                scales: {
                    y: {
                        beginAtZero: false,
                        min: Math.max(0, Math.min(...data) - 2),
                        max: Math.max(...data) + 2,
                        ticks: {
                            precision: 1
                        }
                    }
                },
                plugins: {
                    tooltip: {
                        callbacks: {
                            afterLabel: function(context) {
                                const index = context.dataIndex;
                                const record = bmiHistory[index];
                                return [
                                    `分类: ${record.category}`,
                                    `身高: ${record.height}cm`,
                                    `体重: ${record.weight}kg`
                                ];
                            }
                        }
                    },
                    annotation: {
                        annotations: {
                            normalRangeLine1: {
                                type: 'line',
                                yMin: 18.5,
                                yMax: 18.5,
                                borderColor: 'rgba(255, 235, 59, 0.5)',
                                borderWidth: 2,
                                borderDash: [5, 5],
                                label: {
                                    content: '体重过轻 < 18.5',
                                    enabled: true,
                                    position: 'left'
                                }
                            },
                            normalRangeLine2: {
                                type: 'line',
                                yMin: 24,
                                yMax: 24,
                                borderColor: 'rgba(255, 152, 0, 0.5)',
                                borderWidth: 2,
                                borderDash: [5, 5],
                                label: {
                                    content: '超重 ≥ 24',
                                    enabled: true,
                                    position: 'left'
                                }
                            },
                            normalRangeLine3: {
                                type: 'line',
                                yMin: 28,
                                yMax: 28,
                                borderColor: 'rgba(244, 67, 54, 0.5)',
                                borderWidth: 2,
                                borderDash: [5, 5],
                                label: {
                                    content: '肥胖 ≥ 28',
                                    enabled: true,
                                    position: 'left'
                                }
                            }
                        }
                    }
                }
            }
        });
    }
     
    // 显示健康建议
    function displayRecommendations(category) {
        // 清空建议列表
        dietList.innerHTML = '';
        exerciseList.innerHTML = '';
         
        // 根据BMI分类提供建议
        let dietRecommendations = [];
        let exerciseRecommendations = [];
         
        if (category.name === '体重过轻') {
            dietRecommendations = [
                { text: '少吃多餐,每天5-6餐,每次份量适中', emoji: '&#127869;&#65039;' },
                { text: '选择富有营养和高热量的食物', emoji: '&#129361;' },
                { text: '增加健康脂肪的摄入(坚果、橄榄油、鳄梨等)', emoji: '&#129372;' },
                { text: '添加高蛋白食物(瘦肉、鱼、蛋、豆类、奶制品)', emoji: '&#129385;' },
                { text: '尝试营养丰富的果昔和奶昔', emoji: '&#129380;' }
            ];
             
            exerciseRecommendations = [
                { text: '进行力量训练,增加肌肉质量', emoji: '&#128170;' },
                { text: '避免过度的有氧运动', emoji: '&#127939;&#8205;♂&#65039;' },
                { text: '每周进行2-3次中等强度的力量训练', emoji: '&#127947;&#65039;&#8205;♂&#65039;' },
                { text: '确保充分休息和恢复', emoji: '&#128564;' }
            ];
        } else if (category.name === '正常范围') {
            dietRecommendations = [
                { text: '保持均衡饮食,包括各种食物类别', emoji: '&#129367;' },
                { text: '每天摄入足够的蔬菜和水果(至少5份)', emoji: '&#127822;' },
                { text: '选择全谷物食品', emoji: '&#127806;' },
                { text: '适量摄入优质蛋白质', emoji: '&#127831;' },
                { text: '控制油盐糖的摄入', emoji: '&#129474;' }
            ];
             
            exerciseRecommendations = [
                { text: '每周至少进行150分钟中等强度有氧运动', emoji: '&#128694;&#8205;♀&#65039;' },
                { text: '每周进行2次以上的肌肉强化活动', emoji: '&#127947;&#65039;&#8205;♀&#65039;' },
                { text: '减少久坐时间,每小时起来活动一下', emoji: '&#9200;' },
                { text: '保持日常活动,平均每天步行6000步以上', emoji: '&#128099;' }
            ];
        } else if (category.name === '超重') {
            dietRecommendations = [
                { text: '控制总能量摄入,每天减少300-500千卡', emoji: '&#128201;' },
                { text: '严格控制油和脂肪摄入', emoji: '&#127828;' },
                { text: '适量控制精白米面和肉类', emoji: '&#127834;' },
                { text: '保证蔬菜、水果和牛奶的摄入充足', emoji: '&#129382;' },
                { text: '每天食盐摄入量不超过5g', emoji: '&#129474;' }
            ];
             
            exerciseRecommendations = [
                { text: '每周进行至少150分钟中等强度有氧运动', emoji: '&#128692;&#8205;♀&#65039;' },
                { text: '逐渐增加运动时间至每周300分钟', emoji: '&#9201;&#65039;' },
                { text: '结合有氧运动和力量训练', emoji: '&#127946;&#8205;♂&#65039;' },
                { text: '选择适合自己的运动方式,如快走、游泳、骑自行车等', emoji: '&#128694;&#8205;♂&#65039;' }
            ];
        } else if (category.name === '肥胖') {
            dietRecommendations = [
                { text: '在医生或营养师指导下制定个性化饮食计划', emoji: '&#128104;&#8205;&#9877;&#65039;' },
                { text: '严格控制总能量摄入,每天减少500-750千卡', emoji: '&#128202;' },
                { text: '优先选择低能量密度食物', emoji: '&#129362;' },
                { text: '增加膳食纤维摄入', emoji: '&#127805;' },
                { text: '避免高糖、高脂、高盐食物', emoji: '&#127856;' }
            ];
             
            exerciseRecommendations = [
                { text: '在医生指导下开始运动计划', emoji: '&#128105;&#8205;&#9877;&#65039;' },
                { text: '从低强度运动开始,如步行', emoji: '&#128694;' },
                { text: '逐渐增加运动强度和时间', emoji: '&#128200;' },
                { text: '结合有氧运动、抗阻训练和高强度间歇训练', emoji: '&#127939;&#8205;♀&#65039;' },
                { text: '每周至少5天进行中等强度身体活动,累计150分钟以上', emoji: '&#128198;' }
            ];
        }
         
        // 添加饮食建议
        dietRecommendations.forEach(item => {
            const li = document.createElement('li');
            li.innerHTML = `<span class="recommendation-emoji">${item.emoji}</span> ${item.text}`;
            dietList.appendChild(li);
        });
         
        // 添加运动建议
        exerciseRecommendations.forEach(item => {
            const li = document.createElement('li');
            li.innerHTML = `<span class="recommendation-emoji">${item.emoji}</span> ${item.text}`;
            exerciseList.appendChild(li);
        });
         
        // 显示建议区域,隐藏占位符
        recommendationsContent.style.display = 'block';
        recommendationsPlaceholder.style.display = 'none';
    }
});

[CSS] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
/* 全局样式和变量 */
:root {
    /* 颜色变量 */
    --primary-color: #4CAF50;
    --secondary-color: #2196F3;
    --warning-color: #FF9800;
    --danger-color: #F44336;
    --alert-color: #FFEB3B;
    --background-color: #FFFFFF;
    --background-alt-color: #F5F5F5;
    --text-color: #333333;
    --text-secondary-color: #666666;
    --border-color: #E0E0E0;
     
    /* 尺寸变量 */
    --container-max-width: 1200px;
    --border-radius: 8px;
    --spacing-xs: 5px;
    --spacing-sm: 10px;
    --spacing-md: 15px;
    --spacing-lg: 20px;
    --spacing-xl: 30px;
     
    /* 字体变量 */
    --font-family: 'Helvetica Neue', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
    --font-size-sm: 14px;
    --font-size-md: 16px;
    --font-size-lg: 18px;
    --font-size-xl: 24px;
    --font-size-xxl: 32px;
     
    /* 阴影变量 */
    --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.1);
    --shadow-md: 0 4px 8px rgba(0, 0, 0, 0.1);
    --shadow-lg: 0 8px 16px rgba(0, 0, 0, 0.1);
}
 
/* 基础样式重置 */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
 
body {
    font-family: var(--font-family);
    font-size: var(--font-size-md);
    line-height: 1.6;
    color: var(--text-color);
    background-color: var(--background-alt-color);
    padding: var(--spacing-md);
}
 
h1, h2, h3, h4, h5, h6 {
    margin-bottom: var(--spacing-md);
    font-weight: 600;
    line-height: 1.3;
}
 
h1 {
    font-size: var(--font-size-xxl);
}
 
h2 {
    font-size: var(--font-size-xl);
    color: var(--primary-color);
}
 
h3 {
    font-size: var(--font-size-lg);
    margin-bottom: var(--spacing-sm);
}
 
p {
    margin-bottom: var(--spacing-md);
}
 
ul {
    list-style-position: inside;
    margin-bottom: var(--spacing-md);
}
 
button {
    cursor: pointer;
    font-family: var(--font-family);
}
 
input, button {
    font-size: var(--font-size-md);
}
 
/* 容器样式 */
.container {
    max-width: var(--container-max-width);
    margin: 0 auto;
    background-color: var(--background-color);
    border-radius: var(--border-radius);
    box-shadow: var(--shadow-md);
    overflow: hidden;
}
 
/* 头部样式 */
.header {
    background-color: var(--primary-color);
    color: white;
    padding: var(--spacing-xl) var(--spacing-lg);
    text-align: center;
}
 
.header h1 {
    margin-bottom: var(--spacing-sm);
}
 
.subtitle {
    font-size: var(--font-size-md);
    opacity: 0.9;
}
 
/* 主内容区域样式 */
.main-content {
    display: flex;
    flex-wrap: wrap;
    padding: var(--spacing-lg);
    gap: var(--spacing-xl);
}
 
/* 输入表单区域样式 */
.input-section {
    flex: 1;
    min-width: 300px;
    background-color: var(--background-color);
    border-radius: var(--border-radius);
    padding: var(--spacing-lg);
    box-shadow: var(--shadow-sm);
}
 
.form-group {
    margin-bottom: var(--spacing-lg);
}
 
.form-group label {
    display: block;
    margin-bottom: var(--spacing-xs);
    font-weight: 600;
}
 
.input-with-unit {
    display: flex;
    align-items: center;
}
 
.input-with-unit input {
    flex: 1;
    padding: var(--spacing-sm);
    border: 1px solid var(--border-color);
    border-radius: var(--border-radius);
    height: 44px;
}
 
.unit {
    padding: 0 var(--spacing-sm);
    color: var(--text-secondary-color);
}
 
.form-hint {
    display: block;
    font-size: var(--font-size-sm);
    color: var(--text-secondary-color);
    margin-top: var(--spacing-xs);
}
 
.gender-options {
    display: flex;
    gap: var(--spacing-md);
}
 
.gender-option {
    display: flex;
    align-items: center;
    gap: var(--spacing-xs);
    padding: var(--spacing-sm);
    border: 1px solid var(--border-color);
    border-radius: var(--border-radius);
    cursor: pointer;
    flex: 1;
    justify-content: center;
}
 
.gender-option input[type="radio"] {
    margin-right: var(--spacing-xs);
}
 
.gender-icon {
    font-size: var(--font-size-xl);
    margin-right: var(--spacing-xs);
}
 
.calculate-btn {
    width: 100%;
    padding: var(--spacing-md);
    background-color: var(--primary-color);
    color: white;
    border: none;
    border-radius: var(--border-radius);
    font-weight: 600;
    font-size: var(--font-size-lg);
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--spacing-sm);
    transition: background-color 0.3s, transform 0.2s;
}
 
.calculate-btn:hover {
    background-color: #3d8b40;
    transform: translateY(-2px);
}
 
.calculate-btn:active {
    transform: translateY(0);
}
 
/* 结果展示区域样式 */
.result-section {
    flex: 1;
    min-width: 300px;
    background-color: var(--background-color);
    border-radius: var(--border-radius);
    padding: var(--spacing-lg);
    box-shadow: var(--shadow-sm);
}
 
.result-placeholder, .history-placeholder, .recommendations-placeholder {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: var(--spacing-xl);
    text-align: center;
    color: var(--text-secondary-color);
}
 
.placeholder-icon {
    font-size: 48px;
    margin: var(--spacing-md) 0;
}
 
.bmi-value {
    font-size: var(--font-size-lg);
    margin-bottom: var(--spacing-md);
}
 
.bmi-value strong {
    font-size: var(--font-size-xxl);
    color: var(--primary-color);
}
 
.bmi-category {
    margin-bottom: var(--spacing-lg);
    font-size: var(--font-size-lg);
}
 
.category-emoji {
    font-size: var(--font-size-xl);
    margin-left: var(--spacing-sm);
}
 
.bmi-scale {
    margin-bottom: var(--spacing-xl);
    position: relative;
    padding-bottom: var(--spacing-xl);
}
 
.scale-container {
    display: flex;
    height: 30px;
    border-radius: var(--border-radius);
    overflow: hidden;
}
 
.scale-segment {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    font-size: var(--font-size-sm);
    font-weight: 600;
    position: relative;
}
 
.scale-segment.underweight {
    background-color: var(--alert-color);
    color: var(--text-color);
}
 
.scale-segment.normal {
    background-color: var(--primary-color);
}
 
.scale-segment.overweight {
    background-color: var(--warning-color);
}
 
.scale-segment.obese {
    background-color: var(--danger-color);
}
 
.segment-label {
    z-index: 1;
}
 
.scale-pointer {
    position: absolute;
    width: 0;
    height: 0;
    border-left: 10px solid transparent;
    border-right: 10px solid transparent;
    border-top: 10px solid var(--text-color);
    bottom: 15px;
    transform: translateX(-50%);
    transition: left 0.5s ease-in-out;
}
 
.health-risk {
    background-color: var(--background-alt-color);
    padding: var(--spacing-md);
    border-radius: var(--border-radius);
    margin-top: var(--spacing-lg);
}
 
.health-risk h3 {
    color: var(--text-color);
    display: flex;
    align-items: center;
    gap: var(--spacing-xs);
}
 
/* 历史记录图表区域样式 */
.history-section {
    padding: var(--spacing-lg);
    background-color: var(--background-color);
    border-radius: var(--border-radius);
    margin-top: var(--spacing-lg);
    box-shadow: var(--shadow-sm);
}
 
.chart-container {
    height: 300px;
    margin-bottom: var(--spacing-lg);
}
 
.history-table-container {
    margin-top: var(--spacing-lg);
}
 
.history-table-container h3 {
    display: flex;
    justify-content: space-between;
    align-items: center;
}
 
.toggle-btn {
    background-color: var(--secondary-color);
    color: white;
    border: none;
    border-radius: var(--border-radius);
    padding: var(--spacing-xs) var(--spacing-sm);
    font-size: var(--font-size-sm);
}
 
.history-table-wrapper {
    overflow-x: auto;
    margin-top: var(--spacing-md);
}
 
.history-table {
    width: 100%;
    border-collapse: collapse;
}
 
.history-table th, .history-table td {
    padding: var(--spacing-sm);
    text-align: left;
    border-bottom: 1px solid var(--border-color);
}
 
.history-table th {
    background-color: var(--background-alt-color);
    font-weight: 600;
}
 
.history-table tbody tr:hover {
    background-color: var(--background-alt-color);
}
 
/* 建议展示区域样式 */
.recommendations-section {
    padding: var(--spacing-lg);
    background-color: var(--background-color);
    border-radius: var(--border-radius);
    margin-top: var(--spacing-lg);
    box-shadow: var(--shadow-sm);
}
 
.recommendations-columns {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-lg);
}
 
.diet-recommendations, .exercise-recommendations {
    flex: 1;
    min-width: 300px;
    background-color: var(--background-alt-color);
    border-radius: var(--border-radius);
    padding: var(--spacing-md);
}
 
.diet-recommendations h3, .exercise-recommendations h3 {
    display: flex;
    align-items: center;
    gap: var(--spacing-xs);
    margin-bottom: var(--spacing-md);
}
 
.diet-recommendations ul, .exercise-recommendations ul {
    list-style-type: none;
}
 
.diet-recommendations li, .exercise-recommendations li {
    margin-bottom: var(--spacing-sm);
    padding-left: 30px;
    position: relative;
}
 
.diet-recommendations li::before, .exercise-recommendations li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 4px;
    width: 20px;
    height: 20px;
    background-size: contain;
    background-repeat: no-repeat;
}
 
/* 注意事项区域样式 */
.notes-section {
    padding: var(--spacing-lg);
    background-color: var(--background-color);
    border-radius: var(--border-radius);
    margin-top: var(--spacing-lg);
    box-shadow: var(--shadow-sm);
}
 
.notes-content {
    background-color: var(--background-alt-color);
    padding: var(--spacing-md);
    border-radius: var(--border-radius);
    font-size: var(--font-size-sm);
}
 
/* 页脚样式 */
.footer {
    text-align: center;
    padding: var(--spacing-lg);
    color: var(--text-secondary-color);
    font-size: var(--font-size-sm);
    margin-top: var(--spacing-lg);
}
 
/* 响应式设计 */
@media (max-width: 768px) {
    .main-content {
        flex-direction: column;
    }
     
    .input-section, .result-section {
        width: 100%;
    }
     
    .recommendations-columns {
        flex-direction: column;
    }
     
    .diet-recommendations, .exercise-recommendations {
        width: 100%;
    }
}
 
/* 动画效果 */
@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}
 
.result-content, .history-content, .recommendations-content {
    animation: fadeIn 0.5s ease-in-out;
}
 
/* 辅助功能样式 */
.visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    border: 0;
}
 
/* 表单验证样式 */
input:invalid {
    border-color: var(--danger-color);
}
 
.error-message {
    color: var(--danger-color);
    font-size: var(--font-size-sm);
    margin-top: var(--spacing-xs);
}
 
/* Emoji样式 */
.emoji {
    margin-left: var(--spacing-xs);
}
沙发
熊猫说了很多话 发表于 2025-3-11 22:11
3#
AG9000 发表于 2025-3-11 22:24
对生活很有帮助
4#
hwiori 发表于 2025-3-11 22:25
下了,好用,感谢分享
5#
elvisvv 发表于 2025-3-11 22:33
王菲:你礼貌吗
6#
aoao173 发表于 2025-3-11 23:52
感谢分享 很实用~~
7#
52PJ070 发表于 2025-3-12 00:13
工具实用,可以的,感谢分享!
8#
YukijudaiNsmy 发表于 2025-3-12 01:00
我去这个确实有用啊
9#
qdfcj 发表于 2025-3-12 02:35
好用,感谢分享!
10#
weifengzhizuo 发表于 2025-3-12 02:53
感谢分享,楼主辛苦........
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-3-18 13:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表