{"id":690,"date":"2025-11-26T21:03:47","date_gmt":"2025-11-26T13:03:47","guid":{"rendered":"https:\/\/isunnylife.space\/?p=690"},"modified":"2025-11-27T21:27:58","modified_gmt":"2025-11-27T13:27:58","slug":"%e7%84%93%e6%b9%bf%e9%87%8f%e8%ae%a1%e7%ae%97%e5%85%ac%e5%bc%8f2","status":"publish","type":"post","link":"https:\/\/isunnylife.space\/?p=690","title":{"rendered":"\u7113\u6e7f\u91cf\u5728\u7ebf\u8ba1\u7b97"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"690\" class=\"elementor elementor-690\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3ccf97b e-flex e-con-boxed e-con e-parent\" data-id=\"3ccf97b\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6a1de21 elementor-widget elementor-widget-html\" data-id=\"6a1de21\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n\n<div id=\"psy-calc-wrapper\">\n    <style>\n        \/* \u5f3a\u5236\u91cd\u7f6e\u76d2\u6a21\u578b\uff0c\u9632\u6b62\u4e3b\u9898\u5e72\u6270 *\/\n        #psy-calc-wrapper * { box-sizing: border-box; }\n\n        #psy-calc-wrapper {\n            font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Arial, sans-serif;\n            background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);\n            padding: 20px;\n            border-radius: 12px;\n            color: #1f2937;\n            margin: 20px 0; \/* \u907f\u514d\u7d27\u8d34\u6587\u7ae0\u5185\u5bb9 *\/\n        }\n\n        \/* \u5e03\u5c40\u7ed3\u6784 *\/\n        .psy-main-layout {\n            display: grid;\n            grid-template-columns: 360px 1fr;\n            gap: 20px;\n            align-items: start;\n        }\n\n        \/* \u5361\u7247\u6837\u5f0f *\/\n        .psy-card {\n            background: white;\n            border-radius: 16px;\n            box-shadow: 0 4px 15px rgba(0,0,0,0.05);\n            padding: 20px;\n            overflow: hidden;\n            \/* \u5173\u952e\uff1a\u9632\u6b62\u4e3b\u9898 overflow \u88c1\u526a *\/\n            position: relative; \n            z-index: 1;\n        }\n\n        \/* \u5934\u90e8 *\/\n        .psy-header {\n            grid-column: 1 \/ -1;\n            background: linear-gradient(135deg, #2563eb 0%, #0891b2 100%);\n            color: white;\n            padding: 20px 30px;\n            border-radius: 16px;\n            margin-bottom: 20px;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n        }\n        .psy-header h2 { \n            font-size: 24px; margin: 0; color: white; line-height: 1.2; \n            border: none; padding: 0; \/* \u91cd\u7f6e WP \u4e3b\u9898\u53ef\u80fd\u7684\u8fb9\u6846 *\/\n        }\n\n        \/* \u8f93\u5165\u63a7\u4ef6 *\/\n        .psy-input-group { margin-bottom: 20px; }\n        .psy-input-label { display: block; font-weight: 600; margin-bottom: 8px; font-size: 14px; color: #4b5563; }\n        .psy-input-row { display: flex; align-items: center; gap: 10px; position: relative; z-index: 10; }\n        \n        .psy-input-field {\n            width: 80px; padding: 8px; border: 1px solid #d1d5db; border-radius: 6px;\n            font-size: 16px; text-align: center; background: #fff;\n            color: #333;\n        }\n        \n        \/* \u6838\u5fc3\u4fee\u590d\uff1a\u6ed1\u5757\u6837\u5f0f *\/\n        .psy-slider { \n            flex: 1; \n            accent-color: #2563eb; \n            cursor: pointer; \n            \/* \u5173\u952e\uff1a\u89e3\u51b3\u79fb\u52a8\u7aef\u6ed1\u52a8\u51b2\u7a81 *\/\n            touch-action: pan-y; \n            \/* \u5173\u952e\uff1a\u63d0\u9ad8\u5c42\u7ea7\uff0c\u9632\u6b62\u88ab\u8986\u76d6 *\/\n            position: relative;\n            z-index: 10;\n            max-width: 100%;\n            height: 30px; \/* \u589e\u52a0\u70b9\u51fb\u533a\u57df\u9ad8\u5ea6 *\/\n        }\n\n        \/* \u7ed3\u679c\u5217\u8868 (\u53cc\u5217) *\/\n        .psy-result-grid {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 12px;\n            background: #f1f5f9;\n            padding: 15px;\n            border-radius: 12px;\n            margin-top: 20px;\n        }\n        \n        .psy-result-item {\n            display: flex; flex-direction: column;\n            background: white; padding: 10px;\n            border-radius: 8px; border: 1px solid #e2e8f0;\n        }\n\n        .psy-res-label { font-size: 12px; color: #64748b; margin-bottom: 4px; }\n        .psy-res-val { font-weight: 700; color: #0f172a; font-family: monospace; font-size: 16px; }\n        .psy-res-val small { font-size: 11px; color: #94a3b8; font-weight: normal; margin-left: 2px; }\n\n        \/* \u753b\u5e03\u533a\u57df *\/\n        .psy-chart-container {\n            position: relative;\n            height: 500px; \/* \u7a0d\u5fae\u51cf\u5c0f\u9ad8\u5ea6\u9002\u5e94\u6587\u7ae0 *\/\n            background: white;\n            border-radius: 16px;\n            border: 1px solid #e2e8f0;\n        }\n        .psy-chart-container canvas { width: 100%; height: 100%; display: block; }\n\n        .psy-chart-overlay {\n            position: absolute; top: 15px; right: 15px;\n            background: rgba(255,255,255,0.95);\n            padding: 10px; border-radius: 8px;\n            border: 1px solid #cbd5e1;\n            font-size: 12px; pointer-events: none;\n            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n            line-height: 1.5;\n        }\n\n        \/* \u54cd\u5e94\u5f0f\u9002\u914d WP \u4fa7\u8fb9\u680f *\/\n        @media (max-width: 900px) {\n            .psy-main-layout { grid-template-columns: 1fr; }\n            .psy-chart-container { height: 350px; }\n        }\n    <\/style>\n\n    <div class=\"psy-header\">\n        <div>\n            <h2>Web \u7113\u6e7f\u56fe\u53ef\u89c6\u5316<\/h2>\n        <\/div>\n        <div style=\"text-align: right; font-size: 12px; opacity: 0.8;\">101.3 kPa<\/div>\n    <\/div>\n\n    <div class=\"psy-main-layout\">\n        <div class=\"psy-card\">\n            <h3 style=\"margin-top:0; font-size:18px;\">\u53c2\u6570\u8bbe\u7f6e<\/h3>\n            <hr style=\"border: 0; border-top: 1px solid #eee; margin: 15px 0;\">\n\n            <div class=\"psy-input-group\">\n                <label class=\"psy-input-label\">\u5e72\u7403\u6e29\u5ea6 (\u00b0C)<\/label>\n                <div class=\"psy-input-row\">\n                    <input type=\"range\" id=\"psySliderT\" class=\"psy-slider\" min=\"-10\" max=\"50\" step=\"0.5\" value=\"25\">\n                    <input type=\"number\" id=\"psyInputT\" class=\"psy-input-field\" value=\"25\">\n                <\/div>\n            <\/div>\n\n            <div class=\"psy-input-group\">\n                <label class=\"psy-input-label\">\u76f8\u5bf9\u6e7f\u5ea6 (%)<\/label>\n                <div class=\"psy-input-row\">\n                    <input type=\"range\" id=\"psySliderRH\" class=\"psy-slider\" min=\"0\" max=\"100\" step=\"1\" value=\"50\">\n                    <input type=\"number\" id=\"psyInputRH\" class=\"psy-input-field\" value=\"50\">\n                <\/div>\n            <\/div>\n            \n            <div style=\"font-size:12px; color:#999; margin-top:5px;\">* \u62d6\u52a8\u6ed1\u5757\u8ba1\u7b97<\/div>\n\n            <div class=\"psy-result-grid\">\n                <div class=\"psy-result-item\"><span class=\"psy-res-label\">\u542b\u6e7f\u91cf (d)<\/span> <span class=\"psy-res-val\"><span id=\"pValD\">0<\/span><small>g\/kg<\/small><\/span><\/div>\n                <div class=\"psy-result-item\"><span class=\"psy-res-label\">\u7113\u503c (h)<\/span> <span class=\"psy-res-val\"><span id=\"pValH\">0<\/span><small>kJ\/kg<\/small><\/span><\/div>\n                <div class=\"psy-result-item\"><span class=\"psy-res-label\">\u9732\u70b9\u6e29\u5ea6<\/span> <span class=\"psy-res-val\"><span id=\"pValTd\">0<\/span><small>\u00b0C<\/small><\/span><\/div>\n                <div class=\"psy-result-item\"><span class=\"psy-res-label\">\u6e7f\u7403\u6e29\u5ea6<\/span> <span class=\"psy-res-val\"><span id=\"pValTw\">0<\/span><small>\u00b0C<\/small><\/span><\/div>\n                <div class=\"psy-result-item\"><span class=\"psy-res-label\">\u6c34\u84b8\u6c14\u5206\u538b<\/span> <span class=\"psy-res-val\"><span id=\"pValPw\">0<\/span><small>kPa<\/small><\/span><\/div>\n                <div class=\"psy-result-item\"><span class=\"psy-res-label\">\u7a7a\u6c14\u5bc6\u5ea6<\/span> <span class=\"psy-res-val\"><span id=\"pValRho\">0<\/span><small>kg\/m\u00b3<\/small><\/span><\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"psy-card psy-chart-container\">\n            <canvas id=\"psyCanvas\"><\/canvas>\n            <div class=\"psy-chart-overlay\">\n                <div><span style=\"color:#2563eb; font-weight:bold;\">\u2501<\/span> \u9971\u548c\u7ebf<\/div>\n                <div><span style=\"color:#93c5fd; font-weight:bold;\">\u2501<\/span> \u6e7f\u5ea6\u7ebf<\/div>\n                <div><span style=\"color:#ef4444; font-weight:bold;\">\u25cf<\/span> \u5f53\u524d\u70b9<\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n\/\/ \u4f7f\u7528 IIFE \u9632\u6b62\u53d8\u91cf\u6c61\u67d3\u5168\u5c40\n(function() {\n    \/\/ \u786e\u4fdd DOM \u52a0\u8f7d\u5b8c\u6bd5\n    document.addEventListener(\"DOMContentLoaded\", function() {\n        \n        const P_ATM = 101.325; \n\n        function getSatPressure(t) { return 0.61078 * Math.exp((17.27 * t) \/ (t + 237.3)); }\n\n        function calcState(t, rh) {\n            const Ps = getSatPressure(t);\n            const Pw = (rh \/ 100) * Ps;\n            let d = (P_ATM > Pw) ? 622 * Pw \/ (P_ATM - Pw) : 0;\n            let td = t;\n            if (Pw > 0) { const alpha = Math.log(Pw\/0.61078); td = (237.3 * alpha) \/ (17.27 - alpha); }\n            const h = 1.005 * t + (d\/1000) * (2501 + 1.86 * t);\n            const tw = t * Math.atan(0.151977 * Math.sqrt(rh + 8.313659)) + Math.atan(t + rh) - Math.atan(rh - 1.676331) + 0.00391838 * Math.pow(rh, 1.5) * Math.atan(0.023101 * rh) - 4.686035;\n            const v = (0.287 * (t + 273.15) * (1 + 1.6078 * (d\/1000))) \/ P_ATM;\n            return { d, h, td, tw, Pw, rho: 1\/v };\n        }\n\n        const canvas = document.getElementById('psyCanvas');\n        if(!canvas) return; \/\/ \u9632\u6b62\u672a\u627e\u5230 Canvas \u62a5\u9519\n        const ctx = canvas.getContext('2d');\n        \n        \/\/ \u8303\u56f4\u8bbe\u7f6e\n        const CFG = { minT: -10, maxT: 55, minD: 0, maxD: 35 };\n        let width, height, pad = { t: 30, r: 40, b: 40, l: 50 };\n\n        function mapX(t) { return pad.l + (t - CFG.minT) \/ (CFG.maxT - CFG.minT) * (width - pad.l - pad.r); }\n        function mapY(d) { return height - pad.b - (d - CFG.minD) \/ (CFG.maxD - CFG.minD) * (height - pad.t - pad.b); }\n\n        function drawChart() {\n            const container = canvas.parentElement;\n            const rect = container.getBoundingClientRect();\n            \/\/ \u9632\u6b62\u9664\u4ee50\n            if(rect.width === 0) return;\n\n            const dpr = window.devicePixelRatio || 1;\n            canvas.width = rect.width * dpr;\n            canvas.height = rect.height * dpr;\n            ctx.setTransform(1, 0, 0, 1, 0, 0); \/\/ \u91cd\u7f6e\u77e9\u9635\n            ctx.scale(dpr, dpr);\n            width = rect.width;\n            height = rect.height;\n\n            ctx.clearRect(0, 0, width, height);\n            ctx.font = \"12px sans-serif\";\n\n            \/\/ \u7ed8\u5236\u903b\u8f91\u7b80\u5316\n            ctx.lineWidth = 1;\n            \n            \/\/ \u7f51\u683c\n            ctx.strokeStyle = \"#e2e8f0\";\n            ctx.beginPath();\n            for (let t = CFG.minT; t <= CFG.maxT; t += 5) {\n                const x = mapX(t); ctx.moveTo(x, pad.t); ctx.lineTo(x, height - pad.b);\n                ctx.fillStyle = \"#64748b\"; ctx.fillText(t, x - 8, height - pad.b + 16);\n            }\n            for (let d = 0; d <= CFG.maxD; d += 5) {\n                const y = mapY(d); ctx.moveTo(pad.l, y); ctx.lineTo(width - pad.r, y);\n                ctx.fillStyle = \"#64748b\"; ctx.fillText(d, pad.l - 20, y + 4);\n            }\n            ctx.stroke();\n\n            \/\/ \u6e7f\u5ea6\u7ebf\n            [10, 20, 30, 40, 50, 60, 70, 80, 90, 100].forEach(rh => {\n                ctx.beginPath();\n                ctx.lineWidth = rh === 100 ? 2 : 1;\n                ctx.strokeStyle = rh === 100 ? \"#2563eb\" : \"rgba(37, 99, 235, 0.3)\";\n                let started = false;\n                for (let t = CFG.minT; t <= CFG.maxT; t += 1) {\n                    const res = calcState(t, rh);\n                    const x = mapX(t), y = mapY(res.d);\n                    if (res.d > CFG.maxD) continue;\n                    if (!started) { ctx.moveTo(x, y); started = true; } else { ctx.lineTo(x, y); }\n                }\n                ctx.stroke();\n            });\n\n            \/\/ \u5f53\u524d\u70b9\n            const currT = parseFloat(elInputT.value);\n            const currRH = parseFloat(elInputRH.value);\n            const s = calcState(currT, currRH);\n\n            \/\/ \u66f4\u65b0DOM\n            document.getElementById('pValD').innerText = s.d.toFixed(2);\n            document.getElementById('pValH').innerText = s.h.toFixed(2);\n            document.getElementById('pValTd').innerText = s.td.toFixed(2);\n            document.getElementById('pValTw').innerText = s.tw.toFixed(2);\n            document.getElementById('pValPw').innerText = s.Pw.toFixed(3);\n            document.getElementById('pValRho').innerText = s.rho.toFixed(3);\n\n            \/\/ \u7ed8\u5236\u7ea2\u70b9\n            const px = mapX(currT), py = mapY(s.d);\n            ctx.beginPath(); ctx.setLineDash([4, 4]); ctx.strokeStyle = \"#ef4444\";\n            ctx.moveTo(px, py); ctx.lineTo(px, height - pad.b);\n            ctx.moveTo(px, py); ctx.lineTo(width - pad.r, py);\n            ctx.stroke(); ctx.setLineDash([]);\n\n            ctx.beginPath(); ctx.arc(px, py, 6, 0, 6.28);\n            ctx.fillStyle = \"#ef4444\"; ctx.fill();\n            ctx.strokeStyle = \"#fff\"; ctx.lineWidth = 2; ctx.stroke();\n        }\n\n        const elSliderT = document.getElementById('psySliderT');\n        const elInputT = document.getElementById('psyInputT');\n        const elSliderRH = document.getElementById('psySliderRH');\n        const elInputRH = document.getElementById('psyInputRH');\n\n        function update() { elInputT.value = elSliderT.value; elInputRH.value = elSliderRH.value; drawChart(); }\n        function updateFromInput() { elSliderT.value = elInputT.value; elSliderRH.value = elInputRH.value; drawChart(); }\n\n        elSliderT.addEventListener('input', update);\n        elInputT.addEventListener('input', updateFromInput);\n        elSliderRH.addEventListener('input', update);\n        elInputRH.addEventListener('input', updateFromInput);\n        \n        \/\/ \u5ef6\u65f6\u6267\u884c\u4e00\u6b21\uff0c\u786e\u4fdd\u5e03\u5c40\u7a33\u5b9a\n        setTimeout(drawChart, 100);\n        window.addEventListener('resize', drawChart);\n    });\n})();\n<\/script>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Web \u7113\u6e7f\u56fe\u53ef\u89c6\u5316 101.3 kPa [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[7],"tags":[],"class_list":["post-690","post","type-post","status-publish","format-standard","hentry","category-7"],"spectra_custom_meta":{"surerank_seo_checks":["a:13:{s:14:\"h2_subheadings\";a:3:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:38:\"Page contains at least one subheading.\";s:4:\"type\";s:4:\"page\";}s:13:\"media_present\";a:3:{s:6:\"status\";s:7:\"warning\";s:7:\"message\";s:39:\"No images or videos found on this page.\";s:4:\"type\";s:4:\"page\";}s:13:\"links_present\";a:3:{s:6:\"status\";s:7:\"warning\";s:7:\"message\";s:27:\"No links found on the page.\";s:4:\"type\";s:4:\"page\";}s:10:\"url_length\";a:3:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:35:\"Page URL is short and SEO-friendly.\";s:4:\"type\";s:4:\"page\";}s:19:\"search_engine_title\";a:3:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:55:\"Search engine title is present and under 60 characters.\";s:4:\"type\";s:4:\"page\";}s:25:\"search_engine_description\";a:3:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:62:\"Search engine description is present and under 160 characters.\";s:4:\"type\";s:4:\"page\";}s:13:\"canonical_url\";a:3:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:37:\"Canonical tag is present on the page.\";s:4:\"type\";s:4:\"page\";}s:15:\"open_graph_tags\";a:3:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:40:\"Open Graph tags are present on the page.\";s:4:\"type\";s:4:\"page\";}s:16:\"keyword_in_title\";a:3:{s:6:\"status\";s:10:\"suggestion\";s:7:\"message\";s:38:\"No focus keyword set to analyze title.\";s:4:\"type\";s:7:\"keyword\";}s:22:\"keyword_in_description\";a:3:{s:6:\"status\";s:10:\"suggestion\";s:7:\"message\";s:49:\"No focus keyword set to analyze meta description.\";s:4:\"type\";s:7:\"keyword\";}s:14:\"keyword_in_url\";a:3:{s:6:\"status\";s:10:\"suggestion\";s:7:\"message\";s:36:\"No focus keyword set to analyze URL.\";s:4:\"type\";s:7:\"keyword\";}s:18:\"keyword_in_content\";a:3:{s:6:\"status\";s:10:\"suggestion\";s:7:\"message\";s:40:\"No focus keyword set to analyze content.\";s:4:\"type\";s:7:\"keyword\";}s:12:\"broken_links\";a:2:{s:6:\"status\";s:7:\"success\";s:7:\"message\";s:34:\"No broken links found on the page.\";}}"],"surerank_seo_checks_last_updated":["1764250078"],"_edit_lock":["1764250180:1"],"_oembed_83cf7c1e392d20bd4af89dba5f68c372":["{{unknown}}"],"_oembed_bb0cdc170abe99a1f9e46fcf356fcd25":["{{unknown}}"],"_elementor_edit_mode":["builder"],"_elementor_template_type":["wp-post"],"_wp_page_template":["default"],"_elementor_data":["[{\"id\":\"3ccf97b\",\"elType\":\"container\",\"settings\":{\"display_condition_list\":[{\"display_condition_login_status\":\"subscriber\",\"_id\":\"5b69db6\"}]},\"elements\":[{\"id\":\"6a1de21\",\"elType\":\"widget\",\"settings\":{\"html\":\"\\n\\n<div id=\\\"psy-calc-wrapper\\\">\\n    <style>\\n        \\\/* \\u5f3a\\u5236\\u91cd\\u7f6e\\u76d2\\u6a21\\u578b\\uff0c\\u9632\\u6b62\\u4e3b\\u9898\\u5e72\\u6270 *\\\/\\n        #psy-calc-wrapper * { box-sizing: border-box; }\\n\\n        #psy-calc-wrapper {\\n            font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Arial, sans-serif;\\n            background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);\\n            padding: 20px;\\n            border-radius: 12px;\\n            color: #1f2937;\\n            margin: 20px 0; \\\/* \\u907f\\u514d\\u7d27\\u8d34\\u6587\\u7ae0\\u5185\\u5bb9 *\\\/\\n        }\\n\\n        \\\/* \\u5e03\\u5c40\\u7ed3\\u6784 *\\\/\\n        .psy-main-layout {\\n            display: grid;\\n            grid-template-columns: 360px 1fr;\\n            gap: 20px;\\n            align-items: start;\\n        }\\n\\n        \\\/* \\u5361\\u7247\\u6837\\u5f0f *\\\/\\n        .psy-card {\\n            background: white;\\n            border-radius: 16px;\\n            box-shadow: 0 4px 15px rgba(0,0,0,0.05);\\n            padding: 20px;\\n            overflow: hidden;\\n            \\\/* \\u5173\\u952e\\uff1a\\u9632\\u6b62\\u4e3b\\u9898 overflow \\u88c1\\u526a *\\\/\\n            position: relative; \\n            z-index: 1;\\n        }\\n\\n        \\\/* \\u5934\\u90e8 *\\\/\\n        .psy-header {\\n            grid-column: 1 \\\/ -1;\\n            background: linear-gradient(135deg, #2563eb 0%, #0891b2 100%);\\n            color: white;\\n            padding: 20px 30px;\\n            border-radius: 16px;\\n            margin-bottom: 20px;\\n            display: flex;\\n            justify-content: space-between;\\n            align-items: center;\\n        }\\n        .psy-header h2 { \\n            font-size: 24px; margin: 0; color: white; line-height: 1.2; \\n            border: none; padding: 0; \\\/* \\u91cd\\u7f6e WP \\u4e3b\\u9898\\u53ef\\u80fd\\u7684\\u8fb9\\u6846 *\\\/\\n        }\\n\\n        \\\/* \\u8f93\\u5165\\u63a7\\u4ef6 *\\\/\\n        .psy-input-group { margin-bottom: 20px; }\\n        .psy-input-label { display: block; font-weight: 600; margin-bottom: 8px; font-size: 14px; color: #4b5563; }\\n        .psy-input-row { display: flex; align-items: center; gap: 10px; position: relative; z-index: 10; }\\n        \\n        .psy-input-field {\\n            width: 80px; padding: 8px; border: 1px solid #d1d5db; border-radius: 6px;\\n            font-size: 16px; text-align: center; background: #fff;\\n            color: #333;\\n        }\\n        \\n        \\\/* \\u6838\\u5fc3\\u4fee\\u590d\\uff1a\\u6ed1\\u5757\\u6837\\u5f0f *\\\/\\n        .psy-slider { \\n            flex: 1; \\n            accent-color: #2563eb; \\n            cursor: pointer; \\n            \\\/* \\u5173\\u952e\\uff1a\\u89e3\\u51b3\\u79fb\\u52a8\\u7aef\\u6ed1\\u52a8\\u51b2\\u7a81 *\\\/\\n            touch-action: pan-y; \\n            \\\/* \\u5173\\u952e\\uff1a\\u63d0\\u9ad8\\u5c42\\u7ea7\\uff0c\\u9632\\u6b62\\u88ab\\u8986\\u76d6 *\\\/\\n            position: relative;\\n            z-index: 10;\\n            max-width: 100%;\\n            height: 30px; \\\/* \\u589e\\u52a0\\u70b9\\u51fb\\u533a\\u57df\\u9ad8\\u5ea6 *\\\/\\n        }\\n\\n        \\\/* \\u7ed3\\u679c\\u5217\\u8868 (\\u53cc\\u5217) *\\\/\\n        .psy-result-grid {\\n            display: grid;\\n            grid-template-columns: 1fr 1fr;\\n            gap: 12px;\\n            background: #f1f5f9;\\n            padding: 15px;\\n            border-radius: 12px;\\n            margin-top: 20px;\\n        }\\n        \\n        .psy-result-item {\\n            display: flex; flex-direction: column;\\n            background: white; padding: 10px;\\n            border-radius: 8px; border: 1px solid #e2e8f0;\\n        }\\n\\n        .psy-res-label { font-size: 12px; color: #64748b; margin-bottom: 4px; }\\n        .psy-res-val { font-weight: 700; color: #0f172a; font-family: monospace; font-size: 16px; }\\n        .psy-res-val small { font-size: 11px; color: #94a3b8; font-weight: normal; margin-left: 2px; }\\n\\n        \\\/* \\u753b\\u5e03\\u533a\\u57df *\\\/\\n        .psy-chart-container {\\n            position: relative;\\n            height: 500px; \\\/* \\u7a0d\\u5fae\\u51cf\\u5c0f\\u9ad8\\u5ea6\\u9002\\u5e94\\u6587\\u7ae0 *\\\/\\n            background: white;\\n            border-radius: 16px;\\n            border: 1px solid #e2e8f0;\\n        }\\n        .psy-chart-container canvas { width: 100%; height: 100%; display: block; }\\n\\n        .psy-chart-overlay {\\n            position: absolute; top: 15px; right: 15px;\\n            background: rgba(255,255,255,0.95);\\n            padding: 10px; border-radius: 8px;\\n            border: 1px solid #cbd5e1;\\n            font-size: 12px; pointer-events: none;\\n            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\\n            line-height: 1.5;\\n        }\\n\\n        \\\/* \\u54cd\\u5e94\\u5f0f\\u9002\\u914d WP \\u4fa7\\u8fb9\\u680f *\\\/\\n        @media (max-width: 900px) {\\n            .psy-main-layout { grid-template-columns: 1fr; }\\n            .psy-chart-container { height: 350px; }\\n        }\\n    <\\\/style>\\n\\n    <div class=\\\"psy-header\\\">\\n        <div>\\n            <h2>Web \\u7113\\u6e7f\\u56fe\\u53ef\\u89c6\\u5316<\\\/h2>\\n        <\\\/div>\\n        <div style=\\\"text-align: right; font-size: 12px; opacity: 0.8;\\\">101.3 kPa<\\\/div>\\n    <\\\/div>\\n\\n    <div class=\\\"psy-main-layout\\\">\\n        <div class=\\\"psy-card\\\">\\n            <h3 style=\\\"margin-top:0; font-size:18px;\\\">\\u53c2\\u6570\\u8bbe\\u7f6e<\\\/h3>\\n            <hr style=\\\"border: 0; border-top: 1px solid #eee; margin: 15px 0;\\\">\\n\\n            <div class=\\\"psy-input-group\\\">\\n                <label class=\\\"psy-input-label\\\">\\u5e72\\u7403\\u6e29\\u5ea6 (\\u00b0C)<\\\/label>\\n                <div class=\\\"psy-input-row\\\">\\n                    <input type=\\\"range\\\" id=\\\"psySliderT\\\" class=\\\"psy-slider\\\" min=\\\"-10\\\" max=\\\"50\\\" step=\\\"0.5\\\" value=\\\"25\\\">\\n                    <input type=\\\"number\\\" id=\\\"psyInputT\\\" class=\\\"psy-input-field\\\" value=\\\"25\\\">\\n                <\\\/div>\\n            <\\\/div>\\n\\n            <div class=\\\"psy-input-group\\\">\\n                <label class=\\\"psy-input-label\\\">\\u76f8\\u5bf9\\u6e7f\\u5ea6 (%)<\\\/label>\\n                <div class=\\\"psy-input-row\\\">\\n                    <input type=\\\"range\\\" id=\\\"psySliderRH\\\" class=\\\"psy-slider\\\" min=\\\"0\\\" max=\\\"100\\\" step=\\\"1\\\" value=\\\"50\\\">\\n                    <input type=\\\"number\\\" id=\\\"psyInputRH\\\" class=\\\"psy-input-field\\\" value=\\\"50\\\">\\n                <\\\/div>\\n            <\\\/div>\\n            \\n            <div style=\\\"font-size:12px; color:#999; margin-top:5px;\\\">* \\u62d6\\u52a8\\u6ed1\\u5757\\u8ba1\\u7b97<\\\/div>\\n\\n            <div class=\\\"psy-result-grid\\\">\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u542b\\u6e7f\\u91cf (d)<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValD\\\">0<\\\/span><small>g\\\/kg<\\\/small><\\\/span><\\\/div>\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u7113\\u503c (h)<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValH\\\">0<\\\/span><small>kJ\\\/kg<\\\/small><\\\/span><\\\/div>\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u9732\\u70b9\\u6e29\\u5ea6<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValTd\\\">0<\\\/span><small>\\u00b0C<\\\/small><\\\/span><\\\/div>\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u6e7f\\u7403\\u6e29\\u5ea6<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValTw\\\">0<\\\/span><small>\\u00b0C<\\\/small><\\\/span><\\\/div>\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u6c34\\u84b8\\u6c14\\u5206\\u538b<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValPw\\\">0<\\\/span><small>kPa<\\\/small><\\\/span><\\\/div>\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u7a7a\\u6c14\\u5bc6\\u5ea6<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValRho\\\">0<\\\/span><small>kg\\\/m\\u00b3<\\\/small><\\\/span><\\\/div>\\n            <\\\/div>\\n        <\\\/div>\\n\\n        <div class=\\\"psy-card psy-chart-container\\\">\\n            <canvas id=\\\"psyCanvas\\\"><\\\/canvas>\\n            <div class=\\\"psy-chart-overlay\\\">\\n                <div><span style=\\\"color:#2563eb; font-weight:bold;\\\">\\u2501<\\\/span> \\u9971\\u548c\\u7ebf<\\\/div>\\n                <div><span style=\\\"color:#93c5fd; font-weight:bold;\\\">\\u2501<\\\/span> \\u6e7f\\u5ea6\\u7ebf<\\\/div>\\n                <div><span style=\\\"color:#ef4444; font-weight:bold;\\\">\\u25cf<\\\/span> \\u5f53\\u524d\\u70b9<\\\/div>\\n            <\\\/div>\\n        <\\\/div>\\n    <\\\/div>\\n<\\\/div>\\n\\n<script>\\n\\\/\\\/ \\u4f7f\\u7528 IIFE \\u9632\\u6b62\\u53d8\\u91cf\\u6c61\\u67d3\\u5168\\u5c40\\n(function() {\\n    \\\/\\\/ \\u786e\\u4fdd DOM \\u52a0\\u8f7d\\u5b8c\\u6bd5\\n    document.addEventListener(\\\"DOMContentLoaded\\\", function() {\\n        \\n        const P_ATM = 101.325; \\n\\n        function getSatPressure(t) { return 0.61078 * Math.exp((17.27 * t) \\\/ (t + 237.3)); }\\n\\n        function calcState(t, rh) {\\n            const Ps = getSatPressure(t);\\n            const Pw = (rh \\\/ 100) * Ps;\\n            let d = (P_ATM > Pw) ? 622 * Pw \\\/ (P_ATM - Pw) : 0;\\n            let td = t;\\n            if (Pw > 0) { const alpha = Math.log(Pw\\\/0.61078); td = (237.3 * alpha) \\\/ (17.27 - alpha); }\\n            const h = 1.005 * t + (d\\\/1000) * (2501 + 1.86 * t);\\n            const tw = t * Math.atan(0.151977 * Math.sqrt(rh + 8.313659)) + Math.atan(t + rh) - Math.atan(rh - 1.676331) + 0.00391838 * Math.pow(rh, 1.5) * Math.atan(0.023101 * rh) - 4.686035;\\n            const v = (0.287 * (t + 273.15) * (1 + 1.6078 * (d\\\/1000))) \\\/ P_ATM;\\n            return { d, h, td, tw, Pw, rho: 1\\\/v };\\n        }\\n\\n        const canvas = document.getElementById('psyCanvas');\\n        if(!canvas) return; \\\/\\\/ \\u9632\\u6b62\\u672a\\u627e\\u5230 Canvas \\u62a5\\u9519\\n        const ctx = canvas.getContext('2d');\\n        \\n        \\\/\\\/ \\u8303\\u56f4\\u8bbe\\u7f6e\\n        const CFG = { minT: -10, maxT: 55, minD: 0, maxD: 35 };\\n        let width, height, pad = { t: 30, r: 40, b: 40, l: 50 };\\n\\n        function mapX(t) { return pad.l + (t - CFG.minT) \\\/ (CFG.maxT - CFG.minT) * (width - pad.l - pad.r); }\\n        function mapY(d) { return height - pad.b - (d - CFG.minD) \\\/ (CFG.maxD - CFG.minD) * (height - pad.t - pad.b); }\\n\\n        function drawChart() {\\n            const container = canvas.parentElement;\\n            const rect = container.getBoundingClientRect();\\n            \\\/\\\/ \\u9632\\u6b62\\u9664\\u4ee50\\n            if(rect.width === 0) return;\\n\\n            const dpr = window.devicePixelRatio || 1;\\n            canvas.width = rect.width * dpr;\\n            canvas.height = rect.height * dpr;\\n            ctx.setTransform(1, 0, 0, 1, 0, 0); \\\/\\\/ \\u91cd\\u7f6e\\u77e9\\u9635\\n            ctx.scale(dpr, dpr);\\n            width = rect.width;\\n            height = rect.height;\\n\\n            ctx.clearRect(0, 0, width, height);\\n            ctx.font = \\\"12px sans-serif\\\";\\n\\n            \\\/\\\/ \\u7ed8\\u5236\\u903b\\u8f91\\u7b80\\u5316\\n            ctx.lineWidth = 1;\\n            \\n            \\\/\\\/ \\u7f51\\u683c\\n            ctx.strokeStyle = \\\"#e2e8f0\\\";\\n            ctx.beginPath();\\n            for (let t = CFG.minT; t <= CFG.maxT; t += 5) {\\n                const x = mapX(t); ctx.moveTo(x, pad.t); ctx.lineTo(x, height - pad.b);\\n                ctx.fillStyle = \\\"#64748b\\\"; ctx.fillText(t, x - 8, height - pad.b + 16);\\n            }\\n            for (let d = 0; d <= CFG.maxD; d += 5) {\\n                const y = mapY(d); ctx.moveTo(pad.l, y); ctx.lineTo(width - pad.r, y);\\n                ctx.fillStyle = \\\"#64748b\\\"; ctx.fillText(d, pad.l - 20, y + 4);\\n            }\\n            ctx.stroke();\\n\\n            \\\/\\\/ \\u6e7f\\u5ea6\\u7ebf\\n            [10, 20, 30, 40, 50, 60, 70, 80, 90, 100].forEach(rh => {\\n                ctx.beginPath();\\n                ctx.lineWidth = rh === 100 ? 2 : 1;\\n                ctx.strokeStyle = rh === 100 ? \\\"#2563eb\\\" : \\\"rgba(37, 99, 235, 0.3)\\\";\\n                let started = false;\\n                for (let t = CFG.minT; t <= CFG.maxT; t += 1) {\\n                    const res = calcState(t, rh);\\n                    const x = mapX(t), y = mapY(res.d);\\n                    if (res.d > CFG.maxD) continue;\\n                    if (!started) { ctx.moveTo(x, y); started = true; } else { ctx.lineTo(x, y); }\\n                }\\n                ctx.stroke();\\n            });\\n\\n            \\\/\\\/ \\u5f53\\u524d\\u70b9\\n            const currT = parseFloat(elInputT.value);\\n            const currRH = parseFloat(elInputRH.value);\\n            const s = calcState(currT, currRH);\\n\\n            \\\/\\\/ \\u66f4\\u65b0DOM\\n            document.getElementById('pValD').innerText = s.d.toFixed(2);\\n            document.getElementById('pValH').innerText = s.h.toFixed(2);\\n            document.getElementById('pValTd').innerText = s.td.toFixed(2);\\n            document.getElementById('pValTw').innerText = s.tw.toFixed(2);\\n            document.getElementById('pValPw').innerText = s.Pw.toFixed(3);\\n            document.getElementById('pValRho').innerText = s.rho.toFixed(3);\\n\\n            \\\/\\\/ \\u7ed8\\u5236\\u7ea2\\u70b9\\n            const px = mapX(currT), py = mapY(s.d);\\n            ctx.beginPath(); ctx.setLineDash([4, 4]); ctx.strokeStyle = \\\"#ef4444\\\";\\n            ctx.moveTo(px, py); ctx.lineTo(px, height - pad.b);\\n            ctx.moveTo(px, py); ctx.lineTo(width - pad.r, py);\\n            ctx.stroke(); ctx.setLineDash([]);\\n\\n            ctx.beginPath(); ctx.arc(px, py, 6, 0, 6.28);\\n            ctx.fillStyle = \\\"#ef4444\\\"; ctx.fill();\\n            ctx.strokeStyle = \\\"#fff\\\"; ctx.lineWidth = 2; ctx.stroke();\\n        }\\n\\n        const elSliderT = document.getElementById('psySliderT');\\n        const elInputT = document.getElementById('psyInputT');\\n        const elSliderRH = document.getElementById('psySliderRH');\\n        const elInputRH = document.getElementById('psyInputRH');\\n\\n        function update() { elInputT.value = elSliderT.value; elInputRH.value = elSliderRH.value; drawChart(); }\\n        function updateFromInput() { elSliderT.value = elInputT.value; elSliderRH.value = elInputRH.value; drawChart(); }\\n\\n        elSliderT.addEventListener('input', update);\\n        elInputT.addEventListener('input', updateFromInput);\\n        elSliderRH.addEventListener('input', update);\\n        elInputRH.addEventListener('input', updateFromInput);\\n        \\n        \\\/\\\/ \\u5ef6\\u65f6\\u6267\\u884c\\u4e00\\u6b21\\uff0c\\u786e\\u4fdd\\u5e03\\u5c40\\u7a33\\u5b9a\\n        setTimeout(drawChart, 100);\\n        window.addEventListener('resize', drawChart);\\n    });\\n})();\\n<\\\/script>\\n<\\\/div>\\n\",\"display_condition_list\":[{\"display_condition_login_status\":\"subscriber\",\"_id\":\"268f382\"}]},\"elements\":[],\"widgetType\":\"html\"}],\"isInner\":false}]"],"_elementor_version":["3.33.1"],"_edit_last":["1"],"_elementor_page_settings":["a:0:{}"],"_uag_page_assets":["a:9:{s:3:\"css\";s:263:\".uag-blocks-common-selector{z-index:var(--z-index-desktop) !important}@media (max-width: 976px){.uag-blocks-common-selector{z-index:var(--z-index-tablet) !important}}@media (max-width: 767px){.uag-blocks-common-selector{z-index:var(--z-index-mobile) !important}}\n\";s:2:\"js\";s:0:\"\";s:18:\"current_block_list\";a:7:{i:0;s:11:\"core\/search\";i:1;s:10:\"core\/group\";i:2;s:12:\"core\/heading\";i:3;s:17:\"core\/latest-posts\";i:4;s:20:\"core\/latest-comments\";i:5;s:13:\"core\/archives\";i:6;s:15:\"core\/categories\";}s:8:\"uag_flag\";b:0;s:11:\"uag_version\";s:10:\"1766657798\";s:6:\"gfonts\";a:0:{}s:10:\"gfonts_url\";s:0:\"\";s:12:\"gfonts_files\";a:0:{}s:14:\"uag_faq_layout\";b:0;}"],"views":["0"],"_elementor_page_assets":["a:1:{s:7:\"scripts\";a:1:{i:0;s:18:\"elementor-frontend\";}}"],"_elementor_css":["a:6:{s:4:\"time\";i:1766056889;s:5:\"fonts\";a:0:{}s:5:\"icons\";a:0:{}s:20:\"dynamic_elements_ids\";a:0:{}s:6:\"status\";s:4:\"file\";i:0;s:0:\"\";}"],"_elementor_element_cache":["{\"timeout\":1776631854,\"value\":{\"content\":\"<div class=\\\"elementor-element elementor-element-3ccf97b e-flex e-con-boxed e-con e-parent\\\" data-id=\\\"3ccf97b\\\" data-element_type=\\\"container\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"e-con-inner\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-element elementor-element-6a1de21 elementor-widget elementor-widget-html\\\" data-id=\\\"6a1de21\\\" data-element_type=\\\"widget\\\" data-widget_type=\\\"html.default\\\">\\n\\t\\t\\t\\t\\t\\n\\n<div id=\\\"psy-calc-wrapper\\\">\\n    <style>\\n        \\\/* \\u5f3a\\u5236\\u91cd\\u7f6e\\u76d2\\u6a21\\u578b\\uff0c\\u9632\\u6b62\\u4e3b\\u9898\\u5e72\\u6270 *\\\/\\n        #psy-calc-wrapper * { box-sizing: border-box; }\\n\\n        #psy-calc-wrapper {\\n            font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Arial, sans-serif;\\n            background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);\\n            padding: 20px;\\n            border-radius: 12px;\\n            color: #1f2937;\\n            margin: 20px 0; \\\/* \\u907f\\u514d\\u7d27\\u8d34\\u6587\\u7ae0\\u5185\\u5bb9 *\\\/\\n        }\\n\\n        \\\/* \\u5e03\\u5c40\\u7ed3\\u6784 *\\\/\\n        .psy-main-layout {\\n            display: grid;\\n            grid-template-columns: 360px 1fr;\\n            gap: 20px;\\n            align-items: start;\\n        }\\n\\n        \\\/* \\u5361\\u7247\\u6837\\u5f0f *\\\/\\n        .psy-card {\\n            background: white;\\n            border-radius: 16px;\\n            box-shadow: 0 4px 15px rgba(0,0,0,0.05);\\n            padding: 20px;\\n            overflow: hidden;\\n            \\\/* \\u5173\\u952e\\uff1a\\u9632\\u6b62\\u4e3b\\u9898 overflow \\u88c1\\u526a *\\\/\\n            position: relative; \\n            z-index: 1;\\n        }\\n\\n        \\\/* \\u5934\\u90e8 *\\\/\\n        .psy-header {\\n            grid-column: 1 \\\/ -1;\\n            background: linear-gradient(135deg, #2563eb 0%, #0891b2 100%);\\n            color: white;\\n            padding: 20px 30px;\\n            border-radius: 16px;\\n            margin-bottom: 20px;\\n            display: flex;\\n            justify-content: space-between;\\n            align-items: center;\\n        }\\n        .psy-header h2 { \\n            font-size: 24px; margin: 0; color: white; line-height: 1.2; \\n            border: none; padding: 0; \\\/* \\u91cd\\u7f6e WP \\u4e3b\\u9898\\u53ef\\u80fd\\u7684\\u8fb9\\u6846 *\\\/\\n        }\\n\\n        \\\/* \\u8f93\\u5165\\u63a7\\u4ef6 *\\\/\\n        .psy-input-group { margin-bottom: 20px; }\\n        .psy-input-label { display: block; font-weight: 600; margin-bottom: 8px; font-size: 14px; color: #4b5563; }\\n        .psy-input-row { display: flex; align-items: center; gap: 10px; position: relative; z-index: 10; }\\n        \\n        .psy-input-field {\\n            width: 80px; padding: 8px; border: 1px solid #d1d5db; border-radius: 6px;\\n            font-size: 16px; text-align: center; background: #fff;\\n            color: #333;\\n        }\\n        \\n        \\\/* \\u6838\\u5fc3\\u4fee\\u590d\\uff1a\\u6ed1\\u5757\\u6837\\u5f0f *\\\/\\n        .psy-slider { \\n            flex: 1; \\n            accent-color: #2563eb; \\n            cursor: pointer; \\n            \\\/* \\u5173\\u952e\\uff1a\\u89e3\\u51b3\\u79fb\\u52a8\\u7aef\\u6ed1\\u52a8\\u51b2\\u7a81 *\\\/\\n            touch-action: pan-y; \\n            \\\/* \\u5173\\u952e\\uff1a\\u63d0\\u9ad8\\u5c42\\u7ea7\\uff0c\\u9632\\u6b62\\u88ab\\u8986\\u76d6 *\\\/\\n            position: relative;\\n            z-index: 10;\\n            max-width: 100%;\\n            height: 30px; \\\/* \\u589e\\u52a0\\u70b9\\u51fb\\u533a\\u57df\\u9ad8\\u5ea6 *\\\/\\n        }\\n\\n        \\\/* \\u7ed3\\u679c\\u5217\\u8868 (\\u53cc\\u5217) *\\\/\\n        .psy-result-grid {\\n            display: grid;\\n            grid-template-columns: 1fr 1fr;\\n            gap: 12px;\\n            background: #f1f5f9;\\n            padding: 15px;\\n            border-radius: 12px;\\n            margin-top: 20px;\\n        }\\n        \\n        .psy-result-item {\\n            display: flex; flex-direction: column;\\n            background: white; padding: 10px;\\n            border-radius: 8px; border: 1px solid #e2e8f0;\\n        }\\n\\n        .psy-res-label { font-size: 12px; color: #64748b; margin-bottom: 4px; }\\n        .psy-res-val { font-weight: 700; color: #0f172a; font-family: monospace; font-size: 16px; }\\n        .psy-res-val small { font-size: 11px; color: #94a3b8; font-weight: normal; margin-left: 2px; }\\n\\n        \\\/* \\u753b\\u5e03\\u533a\\u57df *\\\/\\n        .psy-chart-container {\\n            position: relative;\\n            height: 500px; \\\/* \\u7a0d\\u5fae\\u51cf\\u5c0f\\u9ad8\\u5ea6\\u9002\\u5e94\\u6587\\u7ae0 *\\\/\\n            background: white;\\n            border-radius: 16px;\\n            border: 1px solid #e2e8f0;\\n        }\\n        .psy-chart-container canvas { width: 100%; height: 100%; display: block; }\\n\\n        .psy-chart-overlay {\\n            position: absolute; top: 15px; right: 15px;\\n            background: rgba(255,255,255,0.95);\\n            padding: 10px; border-radius: 8px;\\n            border: 1px solid #cbd5e1;\\n            font-size: 12px; pointer-events: none;\\n            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\\n            line-height: 1.5;\\n        }\\n\\n        \\\/* \\u54cd\\u5e94\\u5f0f\\u9002\\u914d WP \\u4fa7\\u8fb9\\u680f *\\\/\\n        @media (max-width: 900px) {\\n            .psy-main-layout { grid-template-columns: 1fr; }\\n            .psy-chart-container { height: 350px; }\\n        }\\n    <\\\/style>\\n\\n    <div class=\\\"psy-header\\\">\\n        <div>\\n            <h2>Web \\u7113\\u6e7f\\u56fe\\u53ef\\u89c6\\u5316<\\\/h2>\\n        <\\\/div>\\n        <div style=\\\"text-align: right; font-size: 12px; opacity: 0.8;\\\">101.3 kPa<\\\/div>\\n    <\\\/div>\\n\\n    <div class=\\\"psy-main-layout\\\">\\n        <div class=\\\"psy-card\\\">\\n            <h3 style=\\\"margin-top:0; font-size:18px;\\\">\\u53c2\\u6570\\u8bbe\\u7f6e<\\\/h3>\\n            <hr style=\\\"border: 0; border-top: 1px solid #eee; margin: 15px 0;\\\">\\n\\n            <div class=\\\"psy-input-group\\\">\\n                <label class=\\\"psy-input-label\\\">\\u5e72\\u7403\\u6e29\\u5ea6 (\\u00b0C)<\\\/label>\\n                <div class=\\\"psy-input-row\\\">\\n                    <input type=\\\"range\\\" id=\\\"psySliderT\\\" class=\\\"psy-slider\\\" min=\\\"-10\\\" max=\\\"50\\\" step=\\\"0.5\\\" value=\\\"25\\\">\\n                    <input type=\\\"number\\\" id=\\\"psyInputT\\\" class=\\\"psy-input-field\\\" value=\\\"25\\\">\\n                <\\\/div>\\n            <\\\/div>\\n\\n            <div class=\\\"psy-input-group\\\">\\n                <label class=\\\"psy-input-label\\\">\\u76f8\\u5bf9\\u6e7f\\u5ea6 (%)<\\\/label>\\n                <div class=\\\"psy-input-row\\\">\\n                    <input type=\\\"range\\\" id=\\\"psySliderRH\\\" class=\\\"psy-slider\\\" min=\\\"0\\\" max=\\\"100\\\" step=\\\"1\\\" value=\\\"50\\\">\\n                    <input type=\\\"number\\\" id=\\\"psyInputRH\\\" class=\\\"psy-input-field\\\" value=\\\"50\\\">\\n                <\\\/div>\\n            <\\\/div>\\n            \\n            <div style=\\\"font-size:12px; color:#999; margin-top:5px;\\\">* \\u62d6\\u52a8\\u6ed1\\u5757\\u8ba1\\u7b97<\\\/div>\\n\\n            <div class=\\\"psy-result-grid\\\">\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u542b\\u6e7f\\u91cf (d)<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValD\\\">0<\\\/span><small>g\\\/kg<\\\/small><\\\/span><\\\/div>\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u7113\\u503c (h)<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValH\\\">0<\\\/span><small>kJ\\\/kg<\\\/small><\\\/span><\\\/div>\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u9732\\u70b9\\u6e29\\u5ea6<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValTd\\\">0<\\\/span><small>\\u00b0C<\\\/small><\\\/span><\\\/div>\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u6e7f\\u7403\\u6e29\\u5ea6<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValTw\\\">0<\\\/span><small>\\u00b0C<\\\/small><\\\/span><\\\/div>\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u6c34\\u84b8\\u6c14\\u5206\\u538b<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValPw\\\">0<\\\/span><small>kPa<\\\/small><\\\/span><\\\/div>\\n                <div class=\\\"psy-result-item\\\"><span class=\\\"psy-res-label\\\">\\u7a7a\\u6c14\\u5bc6\\u5ea6<\\\/span> <span class=\\\"psy-res-val\\\"><span id=\\\"pValRho\\\">0<\\\/span><small>kg\\\/m\\u00b3<\\\/small><\\\/span><\\\/div>\\n            <\\\/div>\\n        <\\\/div>\\n\\n        <div class=\\\"psy-card psy-chart-container\\\">\\n            <canvas id=\\\"psyCanvas\\\"><\\\/canvas>\\n            <div class=\\\"psy-chart-overlay\\\">\\n                <div><span style=\\\"color:#2563eb; font-weight:bold;\\\">\\u2501<\\\/span> \\u9971\\u548c\\u7ebf<\\\/div>\\n                <div><span style=\\\"color:#93c5fd; font-weight:bold;\\\">\\u2501<\\\/span> \\u6e7f\\u5ea6\\u7ebf<\\\/div>\\n                <div><span style=\\\"color:#ef4444; font-weight:bold;\\\">\\u25cf<\\\/span> \\u5f53\\u524d\\u70b9<\\\/div>\\n            <\\\/div>\\n        <\\\/div>\\n    <\\\/div>\\n<\\\/div>\\n\\n<script>\\n\\\/\\\/ \\u4f7f\\u7528 IIFE \\u9632\\u6b62\\u53d8\\u91cf\\u6c61\\u67d3\\u5168\\u5c40\\n(function() {\\n    \\\/\\\/ \\u786e\\u4fdd DOM \\u52a0\\u8f7d\\u5b8c\\u6bd5\\n    document.addEventListener(\\\"DOMContentLoaded\\\", function() {\\n        \\n        const P_ATM = 101.325; \\n\\n        function getSatPressure(t) { return 0.61078 * Math.exp((17.27 * t) \\\/ (t + 237.3)); }\\n\\n        function calcState(t, rh) {\\n            const Ps = getSatPressure(t);\\n            const Pw = (rh \\\/ 100) * Ps;\\n            let d = (P_ATM > Pw) ? 622 * Pw \\\/ (P_ATM - Pw) : 0;\\n            let td = t;\\n            if (Pw > 0) { const alpha = Math.log(Pw\\\/0.61078); td = (237.3 * alpha) \\\/ (17.27 - alpha); }\\n            const h = 1.005 * t + (d\\\/1000) * (2501 + 1.86 * t);\\n            const tw = t * Math.atan(0.151977 * Math.sqrt(rh + 8.313659)) + Math.atan(t + rh) - Math.atan(rh - 1.676331) + 0.00391838 * Math.pow(rh, 1.5) * Math.atan(0.023101 * rh) - 4.686035;\\n            const v = (0.287 * (t + 273.15) * (1 + 1.6078 * (d\\\/1000))) \\\/ P_ATM;\\n            return { d, h, td, tw, Pw, rho: 1\\\/v };\\n        }\\n\\n        const canvas = document.getElementById('psyCanvas');\\n        if(!canvas) return; \\\/\\\/ \\u9632\\u6b62\\u672a\\u627e\\u5230 Canvas \\u62a5\\u9519\\n        const ctx = canvas.getContext('2d');\\n        \\n        \\\/\\\/ \\u8303\\u56f4\\u8bbe\\u7f6e\\n        const CFG = { minT: -10, maxT: 55, minD: 0, maxD: 35 };\\n        let width, height, pad = { t: 30, r: 40, b: 40, l: 50 };\\n\\n        function mapX(t) { return pad.l + (t - CFG.minT) \\\/ (CFG.maxT - CFG.minT) * (width - pad.l - pad.r); }\\n        function mapY(d) { return height - pad.b - (d - CFG.minD) \\\/ (CFG.maxD - CFG.minD) * (height - pad.t - pad.b); }\\n\\n        function drawChart() {\\n            const container = canvas.parentElement;\\n            const rect = container.getBoundingClientRect();\\n            \\\/\\\/ \\u9632\\u6b62\\u9664\\u4ee50\\n            if(rect.width === 0) return;\\n\\n            const dpr = window.devicePixelRatio || 1;\\n            canvas.width = rect.width * dpr;\\n            canvas.height = rect.height * dpr;\\n            ctx.setTransform(1, 0, 0, 1, 0, 0); \\\/\\\/ \\u91cd\\u7f6e\\u77e9\\u9635\\n            ctx.scale(dpr, dpr);\\n            width = rect.width;\\n            height = rect.height;\\n\\n            ctx.clearRect(0, 0, width, height);\\n            ctx.font = \\\"12px sans-serif\\\";\\n\\n            \\\/\\\/ \\u7ed8\\u5236\\u903b\\u8f91\\u7b80\\u5316\\n            ctx.lineWidth = 1;\\n            \\n            \\\/\\\/ \\u7f51\\u683c\\n            ctx.strokeStyle = \\\"#e2e8f0\\\";\\n            ctx.beginPath();\\n            for (let t = CFG.minT; t <= CFG.maxT; t += 5) {\\n                const x = mapX(t); ctx.moveTo(x, pad.t); ctx.lineTo(x, height - pad.b);\\n                ctx.fillStyle = \\\"#64748b\\\"; ctx.fillText(t, x - 8, height - pad.b + 16);\\n            }\\n            for (let d = 0; d <= CFG.maxD; d += 5) {\\n                const y = mapY(d); ctx.moveTo(pad.l, y); ctx.lineTo(width - pad.r, y);\\n                ctx.fillStyle = \\\"#64748b\\\"; ctx.fillText(d, pad.l - 20, y + 4);\\n            }\\n            ctx.stroke();\\n\\n            \\\/\\\/ \\u6e7f\\u5ea6\\u7ebf\\n            [10, 20, 30, 40, 50, 60, 70, 80, 90, 100].forEach(rh => {\\n                ctx.beginPath();\\n                ctx.lineWidth = rh === 100 ? 2 : 1;\\n                ctx.strokeStyle = rh === 100 ? \\\"#2563eb\\\" : \\\"rgba(37, 99, 235, 0.3)\\\";\\n                let started = false;\\n                for (let t = CFG.minT; t <= CFG.maxT; t += 1) {\\n                    const res = calcState(t, rh);\\n                    const x = mapX(t), y = mapY(res.d);\\n                    if (res.d > CFG.maxD) continue;\\n                    if (!started) { ctx.moveTo(x, y); started = true; } else { ctx.lineTo(x, y); }\\n                }\\n                ctx.stroke();\\n            });\\n\\n            \\\/\\\/ \\u5f53\\u524d\\u70b9\\n            const currT = parseFloat(elInputT.value);\\n            const currRH = parseFloat(elInputRH.value);\\n            const s = calcState(currT, currRH);\\n\\n            \\\/\\\/ \\u66f4\\u65b0DOM\\n            document.getElementById('pValD').innerText = s.d.toFixed(2);\\n            document.getElementById('pValH').innerText = s.h.toFixed(2);\\n            document.getElementById('pValTd').innerText = s.td.toFixed(2);\\n            document.getElementById('pValTw').innerText = s.tw.toFixed(2);\\n            document.getElementById('pValPw').innerText = s.Pw.toFixed(3);\\n            document.getElementById('pValRho').innerText = s.rho.toFixed(3);\\n\\n            \\\/\\\/ \\u7ed8\\u5236\\u7ea2\\u70b9\\n            const px = mapX(currT), py = mapY(s.d);\\n            ctx.beginPath(); ctx.setLineDash([4, 4]); ctx.strokeStyle = \\\"#ef4444\\\";\\n            ctx.moveTo(px, py); ctx.lineTo(px, height - pad.b);\\n            ctx.moveTo(px, py); ctx.lineTo(width - pad.r, py);\\n            ctx.stroke(); ctx.setLineDash([]);\\n\\n            ctx.beginPath(); ctx.arc(px, py, 6, 0, 6.28);\\n            ctx.fillStyle = \\\"#ef4444\\\"; ctx.fill();\\n            ctx.strokeStyle = \\\"#fff\\\"; ctx.lineWidth = 2; ctx.stroke();\\n        }\\n\\n        const elSliderT = document.getElementById('psySliderT');\\n        const elInputT = document.getElementById('psyInputT');\\n        const elSliderRH = document.getElementById('psySliderRH');\\n        const elInputRH = document.getElementById('psyInputRH');\\n\\n        function update() { elInputT.value = elSliderT.value; elInputRH.value = elSliderRH.value; drawChart(); }\\n        function updateFromInput() { elSliderT.value = elInputT.value; elSliderRH.value = elInputRH.value; drawChart(); }\\n\\n        elSliderT.addEventListener('input', update);\\n        elInputT.addEventListener('input', updateFromInput);\\n        elSliderRH.addEventListener('input', update);\\n        elInputRH.addEventListener('input', updateFromInput);\\n        \\n        \\\/\\\/ \\u5ef6\\u65f6\\u6267\\u884c\\u4e00\\u6b21\\uff0c\\u786e\\u4fdd\\u5e03\\u5c40\\u7a33\\u5b9a\\n        setTimeout(drawChart, 100);\\n        window.addEventListener('resize', drawChart);\\n    });\\n})();\\n<\\\/script>\\n<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\",\"scripts\":[],\"styles\":[]}}"],"_uag_css_file_name":["uag-css-690.css"]},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"xianjie.me@icloud.com","author_link":"https:\/\/isunnylife.space\/?author=1"},"uagb_comment_info":0,"uagb_excerpt":"Web \u7113\u6e7f\u56fe\u53ef\u89c6\u5316 101.3 kPa [&hellip;]","_links":{"self":[{"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/posts\/690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/isunnylife.space\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=690"}],"version-history":[{"count":20,"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/posts\/690\/revisions"}],"predecessor-version":[{"id":761,"href":"https:\/\/isunnylife.space\/index.php?rest_route=\/wp\/v2\/posts\/690\/revisions\/761"}],"wp:attachment":[{"href":"https:\/\/isunnylife.space\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=690"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/isunnylife.space\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=690"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/isunnylife.space\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}