From e76f24eb38e8141ac19aaf93cc30d3ae17ed99fd Mon Sep 17 00:00:00 2001 From: nanhaoluo <3075912108@qq.com> Date: Tue, 20 Jan 2026 16:13:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=81=A2=E5=A4=8D=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E5=BA=93=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/vendor/external/resource-loader.js | 73 +++++++++---------- assets/vendor/smoothscroll/smoothscroll1.js | 14 +++- .../smoothscroll/smoothscroll1_pulse.js | 14 +++- 3 files changed, 61 insertions(+), 40 deletions(-) diff --git a/assets/vendor/external/resource-loader.js b/assets/vendor/external/resource-loader.js index 86672b1..fe3262d 100644 --- a/assets/vendor/external/resource-loader.js +++ b/assets/vendor/external/resource-loader.js @@ -34,14 +34,17 @@ // 加载备用系统 loadFallbackSystems: function() { + var self = this; + if (this.config.enableFallbackCSS) { - this.loadCSS('/wp-content/themes/argon/assets/vendor/external/css-fallback.css'); - this.loadCSS('/wp-content/themes/argon/assets/vendor/external/fonts/font-fallback.css'); + // 使用 silent 模式加载,失败时不抛出错误 + this.loadCSS('/wp-content/themes/argon/assets/vendor/external/css-fallback.css', null, true); + this.loadCSS('/wp-content/themes/argon/assets/vendor/external/fonts/font-fallback.css', null, true); } if (this.config.enableFallbackJS) { - this.loadJS('/wp-content/themes/argon/assets/vendor/external/js-fallback.js'); - this.loadJS('/wp-content/themes/argon/assets/vendor/external/resource-monitor.js'); + this.loadJS('/wp-content/themes/argon/assets/vendor/external/js-fallback.js', null, true); + this.loadJS('/wp-content/themes/argon/assets/vendor/external/resource-monitor.js', null, true); } }, @@ -94,25 +97,32 @@ }, // 加载CSS资源 - loadCSS: function(url, fallbackUrl) { + loadCSS: function(url, fallbackUrl, silent) { var self = this; return new Promise(function(resolve, reject) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.href = url; - var timeout = setTimeout(function() { - self.log('CSS资源加载超时: ' + url); + var handleFailure = function(reason) { + self.log('CSS资源加载' + reason + ': ' + url); if (fallbackUrl) { - self.loadCSS(fallbackUrl).then(resolve).catch(reject); + self.loadCSS(fallbackUrl, null, silent).then(resolve).catch(reject); } else { var autoFallback = self.getFallbackUrl(url); if (autoFallback) { - self.loadCSS(autoFallback).then(resolve).catch(reject); + self.loadCSS(autoFallback, null, silent).then(resolve).catch(reject); + } else if (silent) { + // 静默模式下不抛出错误 + resolve(); } else { - reject(new Error('CSS加载失败且无备用资源')); + reject(new Error('CSS加载失败且无备用资源: ' + url)); } } + }; + + var timeout = setTimeout(function() { + handleFailure('超时'); }, self.config.timeout); link.onload = function() { @@ -123,17 +133,7 @@ link.onerror = function() { clearTimeout(timeout); - self.log('CSS资源加载失败: ' + url); - if (fallbackUrl) { - self.loadCSS(fallbackUrl).then(resolve).catch(reject); - } else { - var autoFallback = self.getFallbackUrl(url); - if (autoFallback) { - self.loadCSS(autoFallback).then(resolve).catch(reject); - } else { - reject(new Error('CSS加载失败且无备用资源')); - } - } + handleFailure('失败'); }; document.head.appendChild(link); @@ -141,25 +141,32 @@ }, // 加载JS资源 - loadJS: function(url, fallbackUrl) { + loadJS: function(url, fallbackUrl, silent) { var self = this; return new Promise(function(resolve, reject) { var script = document.createElement('script'); script.src = url; script.async = true; - var timeout = setTimeout(function() { - self.log('JS资源加载超时: ' + url); + var handleFailure = function(reason) { + self.log('JS资源加载' + reason + ': ' + url); if (fallbackUrl) { - self.loadJS(fallbackUrl).then(resolve).catch(reject); + self.loadJS(fallbackUrl, null, silent).then(resolve).catch(reject); } else { var autoFallback = self.getFallbackUrl(url); if (autoFallback) { - self.loadJS(autoFallback).then(resolve).catch(reject); + self.loadJS(autoFallback, null, silent).then(resolve).catch(reject); + } else if (silent) { + // 静默模式下不抛出错误 + resolve(); } else { - reject(new Error('JS加载失败且无备用资源')); + reject(new Error('JS加载失败且无备用资源: ' + url)); } } + }; + + var timeout = setTimeout(function() { + handleFailure('超时'); }, self.config.timeout); script.onload = function() { @@ -170,17 +177,7 @@ script.onerror = function() { clearTimeout(timeout); - self.log('JS资源加载失败: ' + url); - if (fallbackUrl) { - self.loadJS(fallbackUrl).then(resolve).catch(reject); - } else { - var autoFallback = self.getFallbackUrl(url); - if (autoFallback) { - self.loadJS(autoFallback).then(resolve).catch(reject); - } else { - reject(new Error('JS加载失败且无备用资源')); - } - } + handleFailure('失败'); }; document.head.appendChild(script); diff --git a/assets/vendor/smoothscroll/smoothscroll1.js b/assets/vendor/smoothscroll/smoothscroll1.js index 8bcf8ed..f1f84ca 100644 --- a/assets/vendor/smoothscroll/smoothscroll1.js +++ b/assets/vendor/smoothscroll/smoothscroll1.js @@ -123,8 +123,20 @@ function init() { if (pendingRefresh) return; // could also be: clearTimeout(pendingRefresh); pendingRefresh = setTimeout(function () { if (isExcluded) return; // could be running after cleanup + // 先重置高度,强制重新计算 fullPageElem.style.height = '0'; - fullPageElem.style.height = root.scrollHeight + 'px'; + // 使用 requestAnimationFrame 确保在下一帧更新,避免高度计算错误 + requestAnimationFrame(function() { + // 获取实际内容高度,取 body 和 html 的最大值 + var actualHeight = Math.max( + body.scrollHeight, + body.offsetHeight, + html.clientHeight, + html.scrollHeight, + html.offsetHeight + ); + fullPageElem.style.height = actualHeight + 'px'; + }); pendingRefresh = null; }, 500); // act rarely to stay fast }; diff --git a/assets/vendor/smoothscroll/smoothscroll1_pulse.js b/assets/vendor/smoothscroll/smoothscroll1_pulse.js index 3d40231..8f9cfde 100644 --- a/assets/vendor/smoothscroll/smoothscroll1_pulse.js +++ b/assets/vendor/smoothscroll/smoothscroll1_pulse.js @@ -123,8 +123,20 @@ function init() { if (pendingRefresh) return; // could also be: clearTimeout(pendingRefresh); pendingRefresh = setTimeout(function () { if (isExcluded) return; // could be running after cleanup + // 先重置高度,强制重新计算 fullPageElem.style.height = '0'; - fullPageElem.style.height = root.scrollHeight + 'px'; + // 使用 requestAnimationFrame 确保在下一帧更新,避免高度计算错误 + requestAnimationFrame(function() { + // 获取实际内容高度,取 body 和 html 的最大值 + var actualHeight = Math.max( + body.scrollHeight, + body.offsetHeight, + html.clientHeight, + html.scrollHeight, + html.offsetHeight + ); + fullPageElem.style.height = actualHeight + 'px'; + }); pendingRefresh = null; }, 500); // act rarely to stay fast };