From 53f2c6076cbd5ea6295b9bc42b53a7d69b4190c8 Mon Sep 17 00:00:00 2001 From: Vaica <94612053+zqlit@users.noreply.github.com> Date: Sat, 31 Jan 2026 17:24:31 +0800 Subject: [PATCH] =?UTF-8?q?fixed=20=E6=87=92=E5=8A=A0=E8=BD=BD=E6=95=88?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- themes/Ying/assets/js/EasyLazyload.min.js | 98 ++++++++++++++++- themes/Ying/assets/js/main.js | 28 ++++- themes/Ying/assets/js/mypjax.js | 128 +--------------------- 3 files changed, 126 insertions(+), 128 deletions(-) diff --git a/themes/Ying/assets/js/EasyLazyload.min.js b/themes/Ying/assets/js/EasyLazyload.min.js index 2d946485..0e08a546 100644 --- a/themes/Ying/assets/js/EasyLazyload.min.js +++ b/themes/Ying/assets/js/EasyLazyload.min.js @@ -1 +1,97 @@ -!function(t){function o(o,a,i){var n,c,e=new Image;return e.src=o,e.onload=function(){a(e.width,e.height),r.onLoadBackStart(i,t("img[data-lazy-src]:eq("+i+")"))},[n,c]}function a(a,n){var c=l.eq(a).attr("data-lazy-src");o(c,function(){try{i(t("img[data-lazy-src]:eq("+a+")"),a,n)}catch(t){}},a)}function i(o,a,i){if(!o.attr("data-comp")){o.css("visibility","hidden"),o.attr("src",o.attr("data-lazy-src"));var c=o.width(),e=o.height(),d=o.offset().top,f=o.offset().left;o.css("visibility","visible"),t("body").append("
"+r.coverDiv+"
"),n(a,i,o),o.attr("data-comp","true")}}function n(o,a,i){t(".meng-lazy-div"+o).animate({opacity:"0"},r.showTime,function(){t(this).remove(),r.onLoadBackEnd(o,i),a()})}function c(){var o=t(document).scrollTop(),i=[];l.each(function(a){var n=t(this);n.attr("data-comp")||n.offset().top-o+r.offsetTopm>=0&&n.offset().top-o= 0 && + offsetTop - scrollTop < (windowHeight + defaults.offsetBottom)) { + + showImg($dom, index); + } + }); + } + + function showImg($dom, index) { + $dom.attr("data-comp", "true"); + var src = $dom.attr("data-lazy-src"); + + defaults.onLoadBackStart(index, $dom); + + // Create a temporary image to preload + var temp = new Image(); + temp.onload = function() { + // Prepare for transition + $dom.css({ + "opacity": 0, + "transition": "opacity " + (defaults.showTime / 1000) + "s ease-in-out" + }); + + // Swap source + $dom.attr("src", src); + + // Force reflow to ensure transition triggers + void $dom[0].offsetWidth; + + // Fade in + $dom.css("opacity", 1); + + defaults.onLoadBackEnd(index, $dom); + }; + temp.onerror = function() { + // On error, show anyway (maybe broken image icon) but ensure visible + $dom.attr("src", src); + $dom.css("opacity", 1); + }; + temp.src = src; + } + + function init(setting) { + defaults = $.extend(defaults, setting); + + // Auto-convert standard images to lazy load format + // Exclude .blog-img (Header Avatar) to prevent visibility issues + $("img").not(".blog-img").each(function() { + var $this = $(this); + // Only convert if not already converted and has a src + if (!$this.attr("data-lazy-src") && $this.attr("src")) { + $this.attr("data-lazy-src", $this.attr("src")); + // Set placeholder + $this.attr("src", "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="); + } + }); + + $lazyImgList = $("img[data-lazy-src]"); + + checkOffset(); + + // Debounced scroll handler could be better, but sticking to simple binding for now + $(window).off("scroll.lazy").on("scroll.lazy resize.lazy", function() { + checkOffset(); + }); + } + + function tryAgain() { + // Re-initialize for new content + init(defaults); + } + + window.lazyLoadInit = init; + window.lazyLoadAgain = tryAgain; + +})(jQuery); \ No newline at end of file diff --git a/themes/Ying/assets/js/main.js b/themes/Ying/assets/js/main.js index f0d2b875..40bd93f1 100644 --- a/themes/Ying/assets/js/main.js +++ b/themes/Ying/assets/js/main.js @@ -112,8 +112,34 @@ window.initArtalk = function() { emoticons: window.artalkConfig.emoticons }); - // Inject AI Comment + // Inject AI Comment & Lazy Load & Animation window.artalk.on('list-loaded', function() { + // 1. Lazy Load Logic + var artalkImages = document.querySelectorAll('.atk-list-body img'); + artalkImages.forEach(function (img) { + var src = img.getAttribute('src'); + // Check if it's already lazy loaded or placeholder + if (src && !img.getAttribute('data-lazy-src') && src.indexOf('data:image') !== 0) { + img.setAttribute('data-lazy-src', src); + img.setAttribute('src', 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='); + } + }); + + // 2. Animation Logic + var comments = document.querySelectorAll('.atk-list-body .atk-comment'); + if (comments) { + comments.forEach(function (comment, index) { + comment.classList.add('atk-comment-animate'); + comment.style.animationDelay = (index * 0.04) + 's'; + }); + } + + // 3. Trigger global lazy load update + if (window.lazyLoadAgain) { + window.lazyLoadAgain(); + } + + // 4. AI Comment Logic if (window.artalkConfig.aiComment) { // Force hide "No comments" message via CSS class var list = document.querySelector('.atk-list'); diff --git a/themes/Ying/assets/js/mypjax.js b/themes/Ying/assets/js/mypjax.js index ad8e12ea..d744b0c8 100644 --- a/themes/Ying/assets/js/mypjax.js +++ b/themes/Ying/assets/js/mypjax.js @@ -7,131 +7,8 @@ var pjax = new Pjax({ // 移除 sideBySide,改用默认替换以配合骨架屏逻辑 }); // 设置图片灯箱回调函数 -function lazyimg_pjax() { - ; (function ($) { - - var defaults = { - coverColor: "#dfdfdf", - coverDiv: "", - showTime: 300, - offsetBottom: 0, - offsetTopm: 50, - onLoadBackEnd: function (index, dom) { }, - onLoadBackStart: function (index, dom) { } - } - - //所有待load src - var srcList = [] - var lazyLoadCoutn = 0; - var windowHeight = $(window).height(); - var windowWidth = $(window).width(); - var lazyImgList = $("img[data-lazy-src]"); - var default_base64_src = "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="; - - //获取img - function getImgNaturalDimensions(src, callback, lazyLoadCoutn) { - var nWidth, nHeight - var image = new Image() - image.src = src; - image.onload = function () { - callback(image.width, image.height); - defaults.onLoadBackStart(lazyLoadCoutn, $("img[data-lazy-src]:eq(" + lazyLoadCoutn + ")")); - } - return [nWidth, nHeight]; - } - - function showImg(lazyLoadCoutn, callback) { - - var src = lazyImgList.eq(lazyLoadCoutn).attr("data-lazy-src") - getImgNaturalDimensions(src, function () { - try { - - meng($("img[data-lazy-src]:eq(" + lazyLoadCoutn + ")"), lazyLoadCoutn, callback) - } catch (error) { - - } - }, lazyLoadCoutn) - } - - function meng(jDom, lazyLoadCoutn, callback) { - if (jDom.attr("data-comp")) { - return; - } - jDom.css("visibility", "hidden"); - jDom.attr("src", jDom.attr("data-lazy-src")) - var w = jDom.width(); - var h = jDom.height(); - var offsetTop = jDom.offset().top; - var offsetLeft = jDom.offset().left; - - jDom.css("visibility", "visible"); - $("body").append("
" + defaults.coverDiv + "
"); - noneM(lazyLoadCoutn, callback, jDom); - jDom.attr("data-comp", "true"); - } - - function noneM(lazyLoadCoutn, callback, jDom) { - if (true) { - $(".meng-lazy-div" + lazyLoadCoutn).animate({ opacity: "0" }, defaults.showTime, function () { - $(this).remove(); - defaults.onLoadBackEnd(lazyLoadCoutn, jDom) - callback(); - }); - } - } - - function checkOffset() { - var scrollTop = $(document).scrollTop(); - var onlazyList = []; - lazyImgList.each(function (index) { - var dom = $(this); - if (!dom.attr("data-comp")) { - if (dom.offset().top - scrollTop + defaults.offsetTopm >= 0 && dom.offset().top - scrollTop < (windowHeight + defaults.offsetBottom)) { - onlazyList.push(index); - } - } - }) - - if (onlazyList.length != 0) { - showImg(onlazyList[0], function () { - checkOffset(); - }); - } - } - - function range() { - checkOffset(); - - } - - function init(setting) { - lazyImgList = $("img[data-lazy-src]"); - defaults = $.extend(defaults, setting); - - lazyImgList.each(function () { - var sr = $(this).attr("data-lazy-src"); - srcList.push(sr); - - $(this).attr("src", default_base64_src); - }); - range(); - window.onscroll = function () { - range() - } - } - function tryAgain() { - $("img[data-lazy-src]").removeAttr("data-comp") - init(defaults) - } - - window.lazyLoadInit = init; - - window.lazyLoadAgain = tryAgain; - - - })($) -} -// 设置pjax预先加载代码 +// Removed redundant lazyimg_pjax definition as EasyLazyload.min.js handles it globally now +// pjax预先加载代码 function pjax_reload() { // 给pjax容器加入css过渡动画 // $("#pjax-container").addClass("uk-animation-slide-bottom-small"); @@ -156,7 +33,6 @@ document.addEventListener("pjax:send", function () { // Pjax 成功后,重新加载下面的函数 document.addEventListener("pjax:success", function () { // 重载图片懒加载插件的js - lazyimg_pjax() lazyLoadInit({ // coverColor: "white", // coverDiv: "
优世界·一个记录生活点滴的小站
",