{"id":96,"date":"2026-05-16T12:48:18","date_gmt":"2026-05-16T04:48:18","guid":{"rendered":"http:\/\/47.109.106.217:21080\/?p=96"},"modified":"2026-05-16T12:48:18","modified_gmt":"2026-05-16T04:48:18","slug":"%e5%ae%8c%e5%96%84%e5%91%a8%e8%be%b9%e7%bd%91%e7%ab%99%e7%be%8e%e5%8c%96%e6%95%88%e6%9e%9c","status":"publish","type":"post","link":"https:\/\/alffarmtale.top\/?p=96","title":{"rendered":"\u5b8c\u5584\u5468\u8fb9\u7f51\u7ad9\u7f8e\u5316\u6548\u679c"},"content":{"rendered":"\n<div  class='collapse-block shadow-sm collapse-block-primary collapsed hide-border-left'><div class='collapse-block-title'><span class='collapse-block-title-inner'>\u65b0\u589e\u9875\u811aDev\u6837\u5f0f \u9875\u811a\u5f00\u53d1\u5386\u65f6<\/span><i class='collapse-icon fa fa-angle-down'><\/i><\/div><div class='collapse-block-body' style='display:none;'><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!-- \u9875\u811a\u8fd0\u884c\u65f6\u95f4 -->\n&lt;div class=\"github-badge-big\">\n    &lt;span class=\"badge-subject\">&lt;i class=\"fa fa-clock-o\">&lt;\/i> \u9879\u76ee\u5386\u65f6\uff1a&lt;\/span>\n    &lt;span class=\"badge-value bg-apricots\">\n        &lt;span id=\"footer_running_days\" class=\"odometer\">&lt;\/span> \u5929\n        &lt;span id=\"footer_running_hours\">&lt;\/span> \u5c0f\u65f6\n        &lt;span id=\"footer_running_mins\">&lt;\/span> \u5206\u949f\n        &lt;span id=\"footer_running_secs\">&lt;\/span> \u79d2\n    &lt;\/span>\n    &lt;i class=\"footer-love-icon2\">\u2665&lt;\/i>\n&lt;\/div>\n\n&lt;!-- \u5907\u6848\u53f7 \u653e\u5728\u9879\u76ee\u5386\u65f6\u4e0b\u65b9 -->\n&lt;div class=\"github-badge-big\">\n    &lt;span class=\"badge-subject\">&lt;i class=\"fa fa-id-card\">&lt;\/i> \u5907\u6848\u53f7 &lt;\/span>\n    &lt;a href=\"https:\/\/beian.miit.gov.cn\/\" target=\"_blank\" one-link-mark=\"yes\">\u82cfICP\u59071234567890\u53f7&lt;\/a>\n&lt;\/div>\n\n&lt;script no-pjax=\"\">\n\/\/ \u9875\u811a\u9879\u76ee\u5386\u65f6\uff08\u5b8c\u5168\u540c\u6b65\u516c\u544a\u5199\u6cd5\uff09\n(function() {\n  const dEl = document.getElementById(\"footer_running_days\");\n  const hEl = document.getElementById(\"footer_running_hours\");\n  const mEl = document.getElementById(\"footer_running_mins\");\n  const sEl = document.getElementById(\"footer_running_secs\");\n  if (!dEl) return;\n  \n  \/\/ \u8fd9\u91cc\u548c\u4f60\u516c\u544a\u7684 PROJECT_START_TIME \u4fdd\u6301\u4e00\u81f4\n  const start = new Date(2026, 3, 20);\n\n  function update() {\n    const diff = Date.now() - start;\n    const d = Math.floor(diff \/ 86400000);\n    const h = Math.floor((diff % 86400000) \/ 3600000);\n    const m = Math.floor((diff % 3600000) \/ 60000);\n    const s = Math.floor((diff % 60000) \/ 1000);\n\n    dEl.textContent = d;\n    hEl.textContent = h &lt; 10 ? '0' + h : h;\n    mEl.textContent = m &lt; 10 ? '0' + m : m;\n    sEl.textContent = s &lt; 10 ? '0' + s : s;\n  }\n\n  update();\n  if (!window.footerRunTimeInterval) window.footerRunTimeInterval = setInterval(update, 1000);\n})();\n\n\/\/ \u9875\u811a\u7231\u5fc3\u52a8\u753b + \u70b9\u51fb\u98d8\u5b57\nfunction initFooterLove() {\n    const loveIcon = document.querySelector(\".footer-love-icon2\");\n    const footer = document.getElementById(\"footer\");\n    if (!loveIcon || !footer) return;\n\n    loveIcon.replaceWith(loveIcon.cloneNode(true));\n    const newLove = document.querySelector(\".footer-love-icon2\");\n\n    Object.assign(newLove.style, {\n        display: \"inline-block\",\n        color: \"#ffffff\",\n        fontSize: \"18px\",\n        transition: \"color 0.3s ease\",\n        cursor: \"pointer\",\n        marginLeft: \"6px\"\n    });\n\n    if (!document.querySelector('#heartBeatStyle')) {\n        const style = document.createElement(\"style\");\n        style.id = \"heartBeatStyle\";\n        style.textContent = `\n            @keyframes heartBeatReal2 {\n                0% { transform: scale(1); }\n                15% { transform: scale(1.2); }\n                30% { transform: scale(1); }\n                45% { transform: scale(1.2); }\n                60% { transform: scale(1); }\n                100% { transform: scale(1); }\n            }\n        `;\n        document.head.appendChild(style);\n    }\n\n    footer.addEventListener(\"mouseenter\", () => {\n        newLove.style.color = \"#e62445\";\n        newLove.style.animation = \"heartBeatReal2 1.2s ease infinite\";\n    });\n    footer.addEventListener(\"mouseleave\", () => {\n        newLove.style.color = \"#ffffff\";\n        newLove.style.animation = \"none\";\n    });\n\n    const random = (min, max) => Math.random() * (max - min) + min;\n    newLove.addEventListener(\"click\", e => {\n        e.preventDefault();\n        window.getSelection?.removeAllRanges?.();\n        let cur = parseInt(localStorage.getItem(\"loveClickCount\") || 0);\n        cur++;\n        localStorage.setItem(\"loveClickCount\", cur);\n        if (window.updateLoveCount) window.updateLoveCount();\n\n        const rect = newLove.getBoundingClientRect();\n        const pop = document.createElement(\"span\");\n        pop.innerText = \"+1\";\n        Object.assign(pop.style, {\n            position: \"fixed\",\n            left: `${rect.left + rect.width \/ 2 - 8}px`,\n            top: `${rect.top - 6}px`,\n            zIndex: \"99999999\",\n            color: \"#e62445\",\n            fontWeight: \"bold\",\n            fontSize: \"16px\",\n            pointerEvents: \"none\",\n            opacity: \"1\"\n        });\n        document.body.appendChild(pop);\n\n        const moveX = random(-6, 6);\n        const rotate = random(-25, 25);\n        const duration = 1200;\n        const start = performance.now();\n        function animate() {\n            const t = performance.now() - start;\n            const p = Math.min(t \/ duration, 1);\n            const k = 1 - Math.pow(1 - p, 3);\n            pop.style.transform = `translate(${moveX * k}px, ${-35 * k}px) rotate(${rotate * k}deg)`;\n            pop.style.opacity = 1 - k;\n            p &lt; 1 ? requestAnimationFrame(animate) : pop.remove();\n        }\n        requestAnimationFrame(animate);\n    });\n    newLove.addEventListener(\"mousedown\", e => e.preventDefault());\n    newLove.ondragstart = () => false;\n}\ndocument.addEventListener('DOMContentLoaded', initFooterLove);\nwindow.addEventListener('load', initFooterLove);\ndocument.addEventListener('pjax:success', initFooterLove);\ndocument.addEventListener('pjax:end', initFooterLove);\n&lt;\/script>\n&#091;\/collapse]<\/code><\/pre>\n\n\n\n<p><div  class='collapse-block shadow-sm collapse-block-primary collapsed hide-border-left'><div class='collapse-block-title'><span class='collapse-block-title-inner'>\u65b0\u589e\u516c\u544a\u8fdb\u5ea6\u6761 \u516c\u544a\u7231\u5fc3\u70b9\u8d5e\u7279\u6548<\/span><i class='collapse-icon fa fa-angle-down'><\/i><\/div><div class='collapse-block-body' style='display:none;'><\/div><\/div><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!-- ======================================\n     \ud83d\udd25 \u3010\u9876\u90e8\u53ef\u914d\u7f6e\u533a\u57df - \u6539\u8fd9\u91cc\u5c31\u591f\u4e86\u3011\n     \ud83e\uddca \u8fdb\u5ea6\u6761\u989c\u8272\uff1a\n        bg-orange \u6a59\u8272 | bg-blue \u84dd\u8272 | bg-red \u7ea2\u8272 | bg-green \u7eff\u8272\n     \ud83e\uddca \u7231\u5fc3\u6e05\u96f6\uff1a\u63a7\u5236\u53f0\u8f93\u5165 resetlove()\n====================================== -->\n&lt;script no-pjax=\"\">\n\/\/ DDL \u6b7b\u7ebf\nconst TEXT_TITLE1 = \"\u65a9\u6740\u7ebf 6\u670822\u65e5\";\nconst PROGRESS_START = &#091;2026, 3, 20];\nconst PROGRESS_END   = &#091;2026, 5, 22];\n\/\/ DDL\u8fdb\u5ea6\u6761\u989c\u8272\nconst PROGRESS_BAR_COLOR = \"bg-orange\";\n\n\/\/ \u5f00\u53d1\u8fdb\u5ea6\nconst TEXT_TITLE2 = \"Demo\u5f00\u53d1\u8fdb\u5ea6\";\nconst DEV_PROGRESS = 30;\nconst DEV_HOVER_TEXT = \"\u6025\u6025\u6025\uff0c\u4f60\u522b\u6025\"; \n\/\/ \u5f00\u53d1\u8fdb\u5ea6\u6761\u989c\u8272 \u76f4\u767d\u547d\u540d\nconst DEV_BAR_COLOR = \"bg-blue\";\n\n\/\/ \u9879\u76ee\u5386\u65f6\nconst PROJECT_START_TIME = &#091;2026, 3, 20];\n\n\/\/ \u5168\u5c40\u7231\u5fc3\u66f4\u65b0\u51fd\u6570\uff08\u4e24\u8fb9\u5171\u7528\uff09\nwindow.updateLoveCount = function() {\n  const count = localStorage.getItem('loveClickCount') || 0;\n  window.loveCountState = parseInt(count);\n  \n  const el = document.getElementById('loveCount');\n  if (el) el.textContent = count;\n};\n\n\/\/ \u7231\u5fc3\u6e05\u96f6\nwindow.resetlove = function() {\n  if (confirm('\u786e\u5b9a\u6e05\u96f6\u7231\u5fc3\u8ba1\u6570\uff1f')) {\n    localStorage.removeItem('loveClickCount');\n    window.updateLoveCount();\n    alert('\u2705 \u5df2\u6e05\u96f6');\n  }\n};\n&lt;\/script>\n\n&lt;!-- \u8fdb\u5ea6\u6761 + \u9879\u76ee\u5386\u65f6 -->\n&lt;div class=\"progress-wrapper\" style=\"padding:0\">\n  &lt;div class=\"progress-info\" style=\"display:flex;justify-content:space-between;align-items:center\">\n    &lt;div class=\"progress-label\" style=\"white-space:nowrap;\">&lt;script>document.write(TEXT_TITLE1)&lt;\/script>&lt;\/div>\n    &lt;div id=\"yearprogress_text_container\">\n      &lt;span id=\"yearprogress_progresstext\">&lt;\/span>\n      &lt;span id=\"yearprogress_progresstext_full\">&lt;\/span>\n    &lt;\/div>\n  &lt;\/div>\n  &lt;div class=\"progress\">\n    &lt;div id=\"yearprogress_progressbar\" class=\"progress-bar\">\n      &lt;div class=\"bubble-container\">\n        &lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>\n        &lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>\n        &lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>\n        &lt;div class=\"bubble\">&lt;\/div>\n      &lt;\/div>\n    &lt;\/div>\n  &lt;\/div>\n&lt;\/div>\n\n&lt;div class=\"progress-wrapper\" style=\"padding:0;margin-top:8px;\">\n  &lt;div class=\"progress-info\" style=\"display:flex;justify-content:space-between;align-items:center\">\n    &lt;div class=\"progress-label\" style=\"white-space:nowrap;\">&lt;script>document.write(TEXT_TITLE2)&lt;\/script>&lt;\/div>\n    &lt;!-- \u5f00\u53d1\u8fdb\u5ea6 \u60ac\u6d6e\u5bb9\u5668 -->\n    &lt;div id=\"devprogress_text_container\">\n      &lt;span id=\"devprogress_progresstext\">&lt;\/span>\n      &lt;span id=\"devprogress_progresstext_full\">&lt;\/span>\n    &lt;\/div>\n  &lt;\/div>\n  &lt;div class=\"progress\">\n    &lt;div id=\"devprogress_progressbar\" class=\"progress-bar\">\n      &lt;div class=\"bubble-container\">\n        &lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>\n        &lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>\n        &lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>&lt;div class=\"bubble\">&lt;\/div>\n        &lt;div class=\"bubble\">&lt;\/div>\n      &lt;\/div>\n    &lt;\/div>\n  &lt;\/div>\n&lt;\/div>\n\n&lt;!-- \u9879\u76ee\u5386\u65f6 + \u7231\u5fc3\uff08\u4e24\u884c\u5168\u90e8\u5c45\u4e2d\uff09 -->\n&lt;div class=\"github-badge-big\" style=\"margin-top:12px;position:relative;text-align:center;\">\n  &lt;span class=\"badge-subject\">\u9879\u76ee\u5386\u65f6\uff1a&lt;\/span>\n  &lt;i class=\"footer-love-icon\">\u2665&lt;\/i>\n  &lt;span id=\"loveCount\" class=\"love-count\">0&lt;\/span>\n\n  &lt;!-- \u65f6\u95f4\u5355\u72ec\u4e00\u884c\u5e76\u5c45\u4e2d -->\n  &lt;span class=\"badge-value bg-apricots\" style=\"display:block;text-align:center;margin-top:4px;\">\n    &lt;span id=\"blog_running_days\" class=\"odometer\">&lt;\/span> \u5929\n    &lt;span id=\"blog_running_hours\">&lt;\/span> \u5c0f\u65f6\n    &lt;span id=\"blog_running_mins\">&lt;\/span> \u5206\u949f\n    &lt;span id=\"blog_running_secs\">&lt;\/span> \u79d2\n  &lt;\/span>\n&lt;\/div>\n\n&lt;script no-pjax=\"\">\n\/\/ \u63d0\u4ea4\u8fdb\u5ea6\uff08DDL\uff09\n(function() {\n  function refresh() {\n    const start = new Date(...PROGRESS_START);\n    const end = new Date(...PROGRESS_END);\n    const now = new Date();\n    const total = end - start;\n    const past = now - start;\n    let progress = 0;\n    if (past > 0 &amp;&amp; past &lt; total) progress = (past \/ total * 100).toFixed(5);\n    else if (past >= total) progress = 100;\n    const short = parseFloat(progress).toFixed(2);\n    $(\"#yearprogress_progresstext\").text(short + \"%\");\n    $(\"#yearprogress_progresstext_full\").text(progress + \"%\");\n    $(\"#yearprogress_progressbar\").css(\"width\", progress + \"%\");\n    \/\/ \u5e94\u7528\u76f4\u767d\u989c\u8272\u7c7b\u540d\n    $(\"#yearprogress_progressbar\").addClass(PROGRESS_BAR_COLOR);\n  }\n  refresh();\n  if (!window.yearProgressInterval) {\n    window.yearProgressInterval = setInterval(refresh, 500);\n  }\n})();\n\n\/\/ \u5f00\u53d1\u8fdb\u5ea6\n(function() {\n  $(\"#devprogress_progresstext\").text(DEV_PROGRESS + \".00%\");\n  $(\"#devprogress_progresstext_full\").text(DEV_HOVER_TEXT);\n  $(\"#devprogress_progressbar\").css(\"width\", DEV_PROGRESS + \"%\");\n  \/\/ \u5e94\u7528\u76f4\u767d\u989c\u8272\u7c7b\u540d\n  $(\"#devprogress_progressbar\").addClass(DEV_BAR_COLOR);\n})();\n\n\/\/ \u7231\u5fc3\u70b9\u51fb\n(function() {\n  const icon = document.querySelector(\".footer-love-icon\");\n  const count = document.getElementById(\"loveCount\");\n  const box = document.querySelector(\".github-badge-big\");\n  if (!icon || !count) return;\n\n  \/\/ \u521d\u59cb\u5316\n  window.updateLoveCount();\n\n  function rand(a, b) { return Math.random() * (b - a) + a }\n  function pop() {\n    const el = document.createElement(\"span\");\n    el.textContent = \"+1\";\n    el.style.cssText = \"position:absolute;color:#e62445;font-weight:bold;font-size:16px;pointer-events:none;left:\" + (icon.offsetLeft - 5) + \"px;top:\" + (icon.offsetTop - 5) + \"px;opacity:1\";\n    box.appendChild(el);\n    const x = rand(-8, 8);\n    const r = rand(-30, 30);\n    const start = performance.now();\n    function run() {\n      const t = performance.now() - start;\n      const p = Math.min(t \/ 1200, 1);\n      const k = 1 - Math.pow(1 - p, 3);\n      el.style.transform = `translate(${x*k}px,${-35*k}px)rotate(${r*k}deg)`;\n      el.style.opacity = 1 - k;\n      if (p &lt; 1) requestAnimationFrame(run);\n      else el.remove();\n    }\n    requestAnimationFrame(run);\n  }\n\n  icon.addEventListener(\"click\", e => {\n    e.preventDefault();\n    window.getSelection?.removeAllRanges?.();\n    \n    \/\/ \u7edf\u4e00\u8ba1\u6570\u903b\u8f91\n    let cur = parseInt(localStorage.getItem(\"loveClickCount\") || 0);\n    cur++;\n    localStorage.setItem(\"loveClickCount\", cur);\n    \n    \/\/ \u5168\u5c40\u66f4\u65b0\n    window.updateLoveCount();\n    pop();\n  });\n  icon.addEventListener(\"mousedown\", e => e.preventDefault());\n  icon.ondragstart = () => false;\n})();\n\n\/\/ \u7231\u5fc3\u5fc3\u8df3\n(function() {\n  const card = document.getElementById(\"leftbar_announcement\");\n  const icon = document.querySelector(\".footer-love-icon\");\n  if (!card || !icon) return;\n  Object.assign(icon.style, {\n    display: \"inline-block\", color: \"#fff\", fontSize: \"18px\",\n    transition: \"color 0.3s\", cursor: \"pointer\", marginRight: \"4px\"\n  });\n  const style = document.createElement(\"style\");\n  style.textContent = \"@keyframes heartBeatReal{0%{transform:scale(1)}15%{transform:scale(1.2)}30%{transform:scale(1)}45%{transform:scale(1.2)}60%{transform:scale(1)}100%{transform:scale(1)}}\";\n  document.head.appendChild(style);\n  card.addEventListener(\"mouseenter\", () => { icon.style.color = \"#e62445\"; icon.style.animation = \"heartBeatReal 1.2s infinite\" });\n  card.addEventListener(\"mouseleave\", () => { icon.style.color = \"#fff\"; icon.style.animation = \"none\" });\n})();\n\n\/\/ \u9879\u76ee\u5386\u65f6\n(function() {\n  const dEl = document.getElementById(\"blog_running_days\");\n  const hEl = document.getElementById(\"blog_running_hours\");\n  const mEl = document.getElementById(\"blog_running_mins\");\n  const sEl = document.getElementById(\"blog_running_secs\");\n  if (!dEl) return;\n  const start = new Date(...PROJECT_START_TIME);\n\n  function update() {\n    const diff = Date.now() - start;\n    const d = Math.floor(diff \/ 86400000);\n    const h = Math.floor((diff % 86400000) \/ 3600000);\n    const m = Math.floor((diff % 3600000) \/ 60000);\n    const s = Math.floor((diff % 60000) \/ 1000);\n\n    dEl.textContent = d;\n    hEl.textContent = h &lt; 10 ? '0' + h : h;\n    mEl.textContent = m &lt; 10 ? '0' + m : m;\n    sEl.textContent = s &lt; 10 ? '0' + s : s;\n  }\n\n  update();\n  if (!window.runTimeInterval) window.runTimeInterval = setInterval(update, 1000);\n})();\n&lt;\/script>\n\n&lt;style>\n\/* \u81ea\u5b9a\u4e49\u76f4\u767d\u989c\u8272\u7c7b - bg-xxx \u4e00\u770b\u5c31\u61c2 *\/\n.bg-orange { background-color: #fd7e14 !important; }\n.bg-blue   { background-color: #0d6efd !important; }\n.bg-red    { background-color: #dc3545 !important; }\n.bg-green  { background-color: #198754 !important; }\n.bg-yellow { background-color: #ffc107 !important; }\n\n\/* \u4e24\u4e2a\u8fdb\u5ea6\u6761\u5171\u7528\u60ac\u6d6e\u6548\u679c *\/\n#yearprogress_text_container,\n#devprogress_text_container{\n  font-size:14px;color:#333;line-height:22px;text-align:right;width:110px;\n  height:22px;overflow:hidden;user-select:none\n}\n#yearprogress_text_container>span,\n#devprogress_text_container>span{\n  transition:transform .3s ease;display:block\n}\n#yearprogress_text_container:hover>span,\n#devprogress_text_container:hover>span{\n  transform:translateY(-22px)\n}\n.love-count{font-size:14px;color:#e62445;font-weight:500;margin-right:6px}\n.progress{height:12px;border-radius:6px;background:#e9ecef;overflow:hidden}\n.progress-bar{position:relative;height:100%;border-radius:6px}\n.bubble-container{position:absolute;inset:0;pointer-events:none}\n.bubble{position:absolute;bottom:-20px;background:rgba(255,255,255,.35);opacity:.8;animation:bubbleUp linear infinite}\n.bubble:nth-child(1){width:3px;height:3px;left:5%;animation-duration:2.2s}\n.bubble:nth-child(2){width:5px;height:5px;left:15%;animation-duration:3.8s}\n.bubble:nth-child(3){width:4px;height:4px;left:25%;animation-duration:2.6s}\n.bubble:nth-child(4){width:6px;height:6px;left:38%;animation-duration:4.2s}\n.bubble:nth-child(5){width:3px;height:3px;left:48%;animation-duration:2.9s}\n.bubble:nth-child(6){width:5px;height:5px;left:60%;animation-duration:3.5s}\n.bubble:nth-child(7){width:4px;height:4px;left:70%;animation-duration:2.4s}\n.bubble:nth-child(8){width:6px;height:6px;left:80%;animation-duration:4.5s}\n.bubble:nth-child(9){width:3px;height:3px;left:88%;animation-duration:3.1s}\n.bubble:nth-child(10){width:4px;height:4px;left:95%;animation-duration:2.7s}\n@keyframes bubbleUp{0%{transform:translateY(0)scale(1);opacity:.7}50%{opacity:.9}100%{transform:translateY(-120px)scale(1.1);opacity:0}}\n&lt;\/style><\/code><\/pre>\n\n\n\n<p><\/div><\/div>\n\n\n\n<div  class='collapse-block shadow-sm collapse-block-primary collapsed hide-border-left'><div class='collapse-block-title'><span class='collapse-block-title-inner'>\u65b0\u589e\u4e3b\u9875\u5361\u72473D\u6548\u679c<\/span><i class='collapse-icon fa fa-angle-down'><\/i><\/div><div class='collapse-block-body' style='display:none;'><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n&lt;!--\u9f20\u6807\u60ac\u505c3D\u6548\u679cstart-->\n&lt;style>\n\/* \u5f00\u542f3D\u7a7a\u95f4 *\/\narticle.post:not(.post-full),\n.shuoshuo-preview-container {\n  transform-style: preserve-3d !important;\n  transition: all 0.3s ease;\n}\n\n\/* \u5e38\u6001\uff1a\u6587\u5b57\u4e0d\u505a\u4efb\u4f553D\u504f\u79fb *\/\narticle.post:not(.post-full) header.post-header,\narticle.post:not(.post-full) a.post-title,\narticle.post:not(.post-full) div.post-meta,\n.shuoshuo-preview-container .shuoshuo-title,\n.shuoshuo-preview-container .shuoshuo-content {\n  position: relative !important;\n  transition: all 0.3s cubic-bezier(.03,.98,.52,.99);\n  will-change: transform, text-shadow;\n  \/* \u521d\u59cb\u65e03D\u3001\u65e0\u9634\u5f71 *\/\n  transform: translateZ(0px);\n  text-shadow: none;\n}\n\n\/* \ud83d\udd25 \u9f20\u6807\u60ac\u6d6e\u5361\u7247\u65f6\uff1a\u6587\u5b57\u624d\u5f00\u542f3D\u4e0a\u6d6e + \u7acb\u4f53\u9634\u5f71 *\/\narticle.post:not(.post-full):hover header.post-header,\narticle.post:not(.post-full):hover a.post-title,\narticle.post:not(.post-full):hover div.post-meta,\n.shuoshuo-preview-container:hover .shuoshuo-title,\n.shuoshuo-preview-container:hover .shuoshuo-content {\n  transform: translateZ(30px) !important;\n  \/* 3D\u7acb\u4f53\u6587\u5b57\u9634\u5f71\uff0c\u67d4\u548c\u6709\u5c42\u6b21 *\/\n  text-shadow: 0 8px 16px rgba(0,0,0,0.15), \n               0 4px 8px rgba(0,0,0,0.1);\n}\n&lt;\/style>\n\n&lt;script src=\"https:\/\/cdn.jsdelivr.net\/gh\/huangwb8\/bloghelper@latest\/js\/mobile-detect.js\">&lt;\/script>\n&lt;script type=\"text\/javascript\" src=\"https:\/\/cdn.jsdelivr.net\/gh\/huangwb8\/bloghelper@latest\/vanilla3D\/vanilla-tilt.js\">&lt;\/script>\n\n&lt;script type=\"text\/javascript\">\nvar md = new MobileDetect(window.navigator.userAgent);\n\nif(!md.phone() &amp;&amp; !md.tablet()){\n    window.pjaxLoaded = function(){\n        \/\/ \u9500\u6bc1\u65e7\u5b9e\u4f8b\u9632\u51b2\u7a81\n        document.querySelectorAll(\"article.post:not(.post-full), .shuoshuo-preview-container\").forEach(el => {\n            if (el.vanillaTilt) el.vanillaTilt.destroy();\n        });\n\n        \/\/ \u6587\u7ae0\u5361\u72473D\u503e\u659c\n        VanillaTilt.init(document.querySelectorAll(\"article.post:not(.post-full)\"),{\n            reverse:false,\n            max:4,\n            startX:0,\n            startY:0,\n            perspective:1000,\n            scale:1.02,\n            speed:300,\n            transition:true,\n            axis:null,\n            reset:true,\n            easing:\"cubic-bezier(.03,.98,.52,.99)\",\n            glare:true,\n            \"max-glare\":0.7,\n            \"glare-prerender\":false,\n            gyroscope:false\n        });\n\n        \/\/ \u8bf4\u8bf4\u5361\u72473D\u503e\u659c\n        VanillaTilt.init(document.querySelectorAll(\".shuoshuo-preview-container\"),{\n            reverse:false,  \/\/ \u662f\u5426\u53cd\u8f6c\u503e\u659c\u65b9\u5411\n            max:4,     \/\/ \u6700\u5927\u7684\u503e\u659c\u89d2\u5ea6(\u5ea6)\n            startX:0,      \/\/ X\u8f74\u4e0a\u7684\u8d77\u59cb\u503e\u659c\uff0c\u5355\u4f4d\u4e3a\u5ea6\u3002\n            startY:0,      \/\/ Y\u8f74\u4e0a\u7684\u8d77\u59cb\u503e\u659c\uff0c\u5355\u4f4d\u4e3a\u5ea6\u3002\n            perspective:1000,   \/\/ \u8f6c\u6362\u89d2\u5ea6\uff0c\u8d8a\u4f4e\u503e\u659c\u8d8a\u6781\u7aef\n            scale:1.02,      \/\/ \u7f29\u653e\u6bd4\u4f8b,2 = 200%, 1.5 = 150%, \u7b49\u7b49..\n            speed:300,    \/\/ \u8fdb\u5165\/\u9000\u51fa \u8fc7\u6e21\u7684\u901f\u5ea6\n            transition:true,   \/\/ \u662f\u5426\u5728\u8fdb\u5165\/\u9000\u51fa\u7684\u65f6\u5019\u8bbe\u7f6e\u8fc7\u6e21\u6548\u679c\n            xis:null,   \/\/ \u8bbe\u7f6e\u7981\u7528\u54ea\u4e2a\u8f74\u7684\u53cd\u8f6c,\u503c\u4e3a\"x\"\u6216\u8005\"y\"\u6216\u8005null\n            reset:true,   \/\/ \u8bbe\u7f6e\u5728\u9000\u51fa\u65f6\u6e05\u9664\u503e\u659c\u6548\u679c\n            easing:\"cubic-bezier(.03,.98,.52,.99)\",    \/\/ \u8bbe\u7f6e\u8fdb\u5165\u9000\u51fa\u65f6\u8fc7\u6e21\u7684\u8d1d\u585e\u5c14\u66f2\u7ebf\n            glare:true,\/\/ \u8bbe\u7f6e\u662f\u5426\u62e5\u6709\u70ab\u5149\u6548\u679c,\u5373\u900f\u660e\u5ea6\u6e10\u53d8\u6548\u679c\n            \"max-glare\":0.7,      \/\/ \u8bbe\u7f6e\u6700\u5927\u7684\u900f\u660e\u6548\u679c,1=100%,0.5=50%\n            \"glare-prerender\":false,  \/\/ false, VanillaTilt\u4e3a\u4f60\u521b\u5efa\u900f\u660e\u70ab\u5149\u5143\u7d20,\u5426\u5219\u4f60\u9700\u8981\u81ea\u5df1\u5728.jstilt-glare>.js-tilt-glare-inner\u4e2d\u81ea\u5df1\u6dfb\u52a0render\u51fd\u6570\n            \"mouse-event-element\":null,   \/\/ css\u9009\u62e9\u5668\u6216\u8005\u94fe\u63a5\u5230HTML\u7684\u5143\u7d20,\u4ed6\u5c06\u76d1\u542c\u8be5\u5143\u7d20\u4e0a\u7684\u9f20\u6807\u4e8b\u4ef6\n            \"full-page-listening\":false,  \/\/ \u662f\u5426\u76d1\u542c\u6574\u4e2a\u9875\u9762\u7684\u9f20\u6807\u79fb\u52a8\u4e8b\u4ef6,\u82e5\u4e3atrue,\u4ed6\u5c06\u76d1\u542c\u8fd9\u4e2a\u9875\u9762,\u800c\u975e\u9009\u4e2d\u5143\u7d20\n            gyroscope:false,   \/\/ \u662f\u5426\u5f00\u542f\u9640\u87ba\u4eea\u7684\u65b9\u5411\u68c0\u6d4b\n            gyroscopeMinAngleX: 0,  \/\/\u9640\u87ba\u4eea\u6700\u5c0f\u89d2\u5ea6X\n            gyroscopeMaxAngleX: 0,  \/\/\u9640\u87ba\u4eea\u6700\u5927\u89d2\u5ea6X\n            gyroscopeMinAngleY: 0,  \/\/\u9640\u87ba\u4eea\u6700\u5c0f\u89d2\u5ea6\n            gyroscopeMaxAngleY: 0,  \/\/\u9640\u87ba\u4eea\u6700\u5927\u89d2\u5ea6\n            gyroscopeSamples: 10  \/\/\u9640\u87ba\u4eea\u6837\u54c1\n        });\n    }\n\n    $(window.pjaxLoaded);\n    $(document)?.on('pjax:end', window.pjaxLoaded);\n}\n&lt;\/script>\n&lt;!--\u9f20\u6807\u60ac\u505c3D\u6548\u679cend--><\/code><\/pre>\n\n\n\n<p><\/div><\/div>\n\n\n\n<div  class='collapse-block shadow-sm collapse-block-primary collapsed hide-border-left'><div class='collapse-block-title'><span class='collapse-block-title-inner'>\u65b0\u589e\u9f20\u6807\u7279\u6548<\/span><i class='collapse-icon fa fa-angle-down'><\/i><\/div><div class='collapse-block-body' style='display:none;'><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!--\u9f20\u6807\u6837\u5f0f\uff1a\u4e24\u4e2a\u540c\u5fc3\u5706\uff0c\u5927\u5706\u8ffd\u5c0f\u5706--&gt;\n&lt;style type=\"text\/css\"&gt;\n#cursor{position:fixed;width:16px;height:16px;background:#009688;border-radius:8px;opacity:0.25;z-index:10086;pointer-events:none;transition:0.2s ease-in-out;transition-property:background,opacity,transform}\n#cursor.hidden{opacity:0}\n#cursor.hover{opacity:0.1;transform:scale(2.5)}\n#cursor.active{opacity:0.5;transform:scale(0.5)}\n#clickME{cursor:pointer;display:inline-block;border:1px solid #009688}\n&lt;\/style&gt;\n&lt;script src=\"https:\/\/cdn.jsdelivr.net\/gh\/huangwb8\/bloghelper@latest\/js\/cursor_01.js\"&gt;&lt;\/script&gt;\n&lt;!--\u9f20\u6807\u6837\u5f0f\u7ed3\u675f--&gt;<\/code><\/pre>\n\n\n\n<p><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-96","post","type-post","status-publish","format-standard","hentry","category-developmentlog"],"_links":{"self":[{"href":"https:\/\/alffarmtale.top\/index.php?rest_route=\/wp\/v2\/posts\/96","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alffarmtale.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alffarmtale.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alffarmtale.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alffarmtale.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=96"}],"version-history":[{"count":0,"href":"https:\/\/alffarmtale.top\/index.php?rest_route=\/wp\/v2\/posts\/96\/revisions"}],"wp:attachment":[{"href":"https:\/\/alffarmtale.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=96"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alffarmtale.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=96"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alffarmtale.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=96"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}