feat(lightbox): 接入全站图片预览
This commit is contained in:
1 parent
0985d0cb0a
commit
ddf7c37556
29 files changed
+1212
-1805
No files matched your search
+358
-259
@@ -64,9 +64,9 @@ tbquire.config({
|
||||
'spark-md5' : 'libs/spark-md5.min',
|
||||
'translate' : 'libs/translate.min',
|
||||
'waterfall' : 'waterfall.min',
|
||||
'enlighterjs' : 'enlighter/enlighterjs.min',
|
||||
'imgbox' : 'imgbox.min',
|
||||
'section-navs' : 'section-navs.min',
|
||||
'enlighterjs' : 'enlighter/enlighterjs.min',
|
||||
'section-navs' : 'section-navs.min',
|
||||
|
||||
'poster-share' : 'poster-share.min',
|
||||
'comment' : 'comment.min',
|
||||
'page-template' : 'page-template.min',
|
||||
@@ -4561,10 +4561,6 @@ tbquire.config({
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
/* ============================================================
|
||||
* 1. 图片灯箱 — zoom / thumbnails / slideshow / fullscreen /
|
||||
* mousewheel / origin animation / smart download
|
||||
* ============================================================ */
|
||||
var lightboxEl = null;
|
||||
var lightboxImg = null;
|
||||
var lightboxCaption = null;
|
||||
@@ -4575,63 +4571,111 @@ tbquire.config({
|
||||
var currentZoom = 1;
|
||||
var autoplayTimer = null;
|
||||
var isAutoplay = false;
|
||||
var EXCLUDE_SEL = '.no-imgbox,.no-lightbox,.avatar,.img-icon,.avatar-badge,.aksrt-avatar';
|
||||
var TRIGGER_SEL = '.entry-content img, .wp-posts-content img, .aksrt-lightbox-trigger img, [data-aksrt-lightbox] img, .imgbox-container img, .comment-content .box-img img, a[data-imgbox] img';
|
||||
var CONTAINER_SEL = '.entry-content, .wp-posts-content, .aksrt-lightbox-trigger, [data-aksrt-lightbox], .imgbox-container, .comment-content';
|
||||
var lastTrigger = null;
|
||||
var previousBodyOverflow = '';
|
||||
var EXCLUDE_SEL = '.no-imgbox,.no-lightbox,.avatar,.img-icon,.avatar-badge,.aksrt-avatar,[data-no-lightbox],[data-aksrt-lightbox="0"]';
|
||||
var TRIGGER_SEL = '[data-aksrt-lightbox="1"] img,.aksrt-lightbox-trigger img,.imgbox-container img,.comment-content .box-img';
|
||||
var ANCHOR_TRIGGER_SEL = 'a[data-aksrt-lightbox-trigger]';
|
||||
var GROUP_SEL = '[data-aksrt-lightbox-group],.content-gallery[data-aksrt-lightbox="1"],.aksrt-carousel-block[data-aksrt-lightbox="1"],.imgbox-container,.comment-content,.post_front_content[data-aksrt-lightbox="1"],.wp-posts-content[data-aksrt-lightbox="1"],.entry-thumb[data-aksrt-lightbox="1"],.entry-content[data-aksrt-lightbox="1"],.aksrt-lightbox-trigger,[data-aksrt-lightbox="1"]';
|
||||
var IMAGE_URL_RE = /\.(?:avif|bmp|gif|ico|jpe?g|png|svg|tiff?|webp)(?:[?#].*)?$/i;
|
||||
var MAX_ZOOM_DESKTOP = 2;
|
||||
var MAX_ZOOM_MOBILE = 3;
|
||||
|
||||
function lightboxFlag(key, fallback) {
|
||||
var w = window._win || (window.aksrtData && window.aksrtData.imgbox) || {};
|
||||
if (w[key] === undefined || w[key] === null || w[key] === '') return fallback;
|
||||
return w[key] === true || w[key] === 1 || w[key] === '1';
|
||||
}
|
||||
function lightboxEnabled() {
|
||||
return lightboxFlag('imgbox', true);
|
||||
var config = window._win || {};
|
||||
if (config[key] === undefined || config[key] === null || config[key] === '') return fallback;
|
||||
return config[key] === true || config[key] === 1 || config[key] === '1';
|
||||
}
|
||||
|
||||
function lightboxEnabled() {
|
||||
return lightboxFlag('imgbox', false);
|
||||
}
|
||||
|
||||
function normalizeFullUrl(url) {
|
||||
if (!url || url.indexOf('data:') === 0) return url || '';
|
||||
return url
|
||||
.replace(/-\d+x\d+(\.[a-z0-9]+)(?=([?#]|$))/i, '$1')
|
||||
.replace(/([?&])x-oss-process=[^#&]*&?/i, '$1')
|
||||
.replace(/[?&]$/, '');
|
||||
}
|
||||
|
||||
function resolveFullUrl(img) {
|
||||
var full = img.getAttribute('data-full-url') || img.getAttribute('data-src') || '';
|
||||
if (full) return full;
|
||||
var src = img.src || '';
|
||||
// thumbnail → original: strip -NNNxNNN suffix
|
||||
return src.replace(/-\d+x\d+(\.[a-z]+)$/i, '$1');
|
||||
var explicitFull = img.getAttribute('data-full-url') || '';
|
||||
if (explicitFull) return normalizeFullUrl(explicitFull);
|
||||
|
||||
var anchor = img.closest('a[href]');
|
||||
var href = anchor ? anchor.getAttribute('href') || '' : '';
|
||||
if (IMAGE_URL_RE.test(href)) return normalizeFullUrl(href);
|
||||
|
||||
return normalizeFullUrl(
|
||||
img.getAttribute('data-src')
|
||||
|| img.getAttribute('data-lazy-src')
|
||||
|| img.currentSrc
|
||||
|| img.getAttribute('src')
|
||||
|| ''
|
||||
);
|
||||
}
|
||||
|
||||
function resolveThumbUrl(img) {
|
||||
return img.currentSrc
|
||||
|| img.getAttribute('src')
|
||||
|| img.getAttribute('data-src')
|
||||
|| img.getAttribute('data-lazy-src')
|
||||
|| img.getAttribute('data-full-url')
|
||||
|| '';
|
||||
}
|
||||
|
||||
function resolveCaption(img) {
|
||||
var anchor = img.closest('a');
|
||||
var explicit = anchor ? anchor.getAttribute('data-caption') || '' : '';
|
||||
if (explicit.trim()) return explicit.trim();
|
||||
|
||||
var figure = img.closest('figure');
|
||||
var figcaption = figure ? figure.querySelector('figcaption') : null;
|
||||
if (figcaption && figcaption.textContent.trim()) return figcaption.textContent.trim();
|
||||
|
||||
return (img.getAttribute('alt') || '').trim();
|
||||
}
|
||||
|
||||
function isNoLightbox(img) {
|
||||
if (img.closest(EXCLUDE_SEL)) return true;
|
||||
// parent anchor that does NOT point to an image
|
||||
var parentA = img.closest('a');
|
||||
if (!img || img.closest(EXCLUDE_SEL)) return true;
|
||||
|
||||
var parentA = img.closest('a[href]');
|
||||
if (parentA) {
|
||||
var href = parentA.getAttribute('href') || '';
|
||||
if (href && !/\.(jpe?g|png|gif|webp|avif|svg|bmp)(\?|$)/i.test(href) && !parentA.hasAttribute('data-imgbox')) {
|
||||
if (href && !IMAGE_URL_RE.test(href) && !parentA.hasAttribute('data-aksrt-lightbox-trigger')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
return resolveFullUrl(img) === '';
|
||||
}
|
||||
|
||||
function createLightbox() {
|
||||
if (!lightboxEnabled()) return;
|
||||
if (lightboxEl) return;
|
||||
if (!lightboxEnabled()) return null;
|
||||
if (lightboxEl) return lightboxEl;
|
||||
|
||||
lightboxEl = document.createElement('div');
|
||||
lightboxEl.className = 'aksrt-lightbox';
|
||||
lightboxEl.setAttribute('role', 'dialog');
|
||||
lightboxEl.setAttribute('aria-modal', 'true');
|
||||
lightboxEl.setAttribute('aria-hidden', 'true');
|
||||
lightboxEl.setAttribute('aria-label', '图片预览');
|
||||
lightboxEl.setAttribute('tabindex', '-1');
|
||||
lightboxEl.innerHTML =
|
||||
'<div class="aksrt-lightbox__toolbar">' +
|
||||
'<span class="aksrt-lightbox__counter"></span>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-zoom" title="缩放"><i class="fa fas fa-search-plus"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-thumbs" title="缩略图"><i class="fa fas fa-th"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-play" title="幻灯片"><i class="fa fas fa-play"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-full" title="全屏"><i class="fa fas fa-expand"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool aksrt-lightbox__download" title="下载"><i class="fa fas fa-download"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool aksrt-lightbox__close" title="关闭"><i class="fa fas fa-times"></i></button>' +
|
||||
'<span class="aksrt-lightbox__counter" aria-live="polite"></span>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-zoom" title="缩放" aria-label="缩放"><i class="fa fas fa-search-plus" aria-hidden="true"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-thumbs" title="缩略图" aria-label="显示或隐藏缩略图"><i class="fa fas fa-th" aria-hidden="true"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-play" title="幻灯片" aria-label="播放幻灯片"><i class="fa fas fa-play" aria-hidden="true"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-full" title="全屏" aria-label="切换全屏"><i class="fa fas fa-expand" aria-hidden="true"></i></button>' +
|
||||
'<a class="aksrt-lightbox__tool aksrt-lightbox__download" title="下载" aria-label="下载图片" download><i class="fa fas fa-download" aria-hidden="true"></i></a>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool aksrt-lightbox__close" title="关闭" aria-label="关闭"><i class="fa fas fa-times" aria-hidden="true"></i></button>' +
|
||||
'</div>' +
|
||||
'<button type="button" class="aksrt-lightbox__nav aksrt-lightbox__nav--prev" aria-label="上一张"><i class="fa fas fa-chevron-left"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__nav aksrt-lightbox__nav--prev" aria-label="上一张"><i class="fa fas fa-chevron-left" aria-hidden="true"></i></button>' +
|
||||
'<div class="aksrt-lightbox__stage"><img class="aksrt-lightbox__img" src="" alt=""></div>' +
|
||||
'<button type="button" class="aksrt-lightbox__nav aksrt-lightbox__nav--next" aria-label="下一张"><i class="fa fas fa-chevron-right"></i></button>' +
|
||||
'<div class="aksrt-lightbox__caption"></div>' +
|
||||
'<button type="button" class="aksrt-lightbox__nav aksrt-lightbox__nav--next" aria-label="下一张"><i class="fa fas fa-chevron-right" aria-hidden="true"></i></button>' +
|
||||
'<div class="aksrt-lightbox__caption" aria-live="polite"></div>' +
|
||||
'<div class="aksrt-lightbox__thumbs" hidden></div>';
|
||||
|
||||
document.body.appendChild(lightboxEl);
|
||||
@@ -4641,223 +4685,260 @@ tbquire.config({
|
||||
lightboxCounter = lightboxEl.querySelector('.aksrt-lightbox__counter');
|
||||
lightboxThumbsWrap = lightboxEl.querySelector('.aksrt-lightbox__thumbs');
|
||||
|
||||
// Apply window._win imgbox feature flags
|
||||
var zoomBtn = lightboxEl.querySelector('.toggle-zoom');
|
||||
var thumbsBtn = lightboxEl.querySelector('.toggle-thumbs');
|
||||
var playBtn = lightboxEl.querySelector('.toggle-play');
|
||||
var fullBtn = lightboxEl.querySelector('.toggle-full');
|
||||
var downBtn = lightboxEl.querySelector('.aksrt-lightbox__download');
|
||||
if (zoomBtn) zoomBtn.hidden = !lightboxFlag('imgbox_zoom', true);
|
||||
if (thumbsBtn) thumbsBtn.hidden = !lightboxFlag('imgbox_thumbs', true);
|
||||
if (playBtn) playBtn.hidden = !lightboxFlag('imgbox_play', false);
|
||||
if (fullBtn) fullBtn.hidden = !lightboxFlag('imgbox_full', true);
|
||||
if (downBtn) downBtn.hidden = !lightboxFlag('imgbox_down', false);
|
||||
|
||||
// Close
|
||||
lightboxEl.querySelector('.aksrt-lightbox__close').addEventListener('click', function (e) { e.stopPropagation(); closeLightbox(); });
|
||||
lightboxEl.addEventListener('click', function (e) { if (e.target === lightboxEl || e.target.classList.contains('aksrt-lightbox__stage')) closeLightbox(); });
|
||||
|
||||
// Nav
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--prev').addEventListener('click', function (e) { e.stopPropagation(); navigateLightbox(-1); });
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--next').addEventListener('click', function (e) { e.stopPropagation(); navigateLightbox(1); });
|
||||
|
||||
// Keyboard
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (!lightboxEl.classList.contains('is-open')) return;
|
||||
if (e.key === 'Escape') closeLightbox();
|
||||
if (e.key === 'ArrowLeft') navigateLightbox(-1);
|
||||
if (e.key === 'ArrowRight') navigateLightbox(1);
|
||||
lightboxEl.querySelector('.aksrt-lightbox__close').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
closeLightbox();
|
||||
});
|
||||
lightboxEl.addEventListener('click', function (event) {
|
||||
if (event.target === lightboxEl || event.target.classList.contains('aksrt-lightbox__stage')) closeLightbox();
|
||||
});
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--prev').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
navigateLightbox(-1);
|
||||
});
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--next').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
navigateLightbox(1);
|
||||
});
|
||||
|
||||
// Mousewheel nav
|
||||
lightboxEl.addEventListener('wheel', function (e) {
|
||||
if (!lightboxEl.classList.contains('is-open')) return;
|
||||
if (currentZoom > 1) return; // don't nav when zoomed
|
||||
e.preventDefault();
|
||||
if (e.deltaY > 0) navigateLightbox(1);
|
||||
else navigateLightbox(-1);
|
||||
document.addEventListener('keydown', function (event) {
|
||||
if (!lightboxEl || !lightboxEl.classList.contains('is-open')) return;
|
||||
if (event.key === 'Escape') closeLightbox();
|
||||
if (event.key === 'ArrowLeft') navigateLightbox(-1);
|
||||
if (event.key === 'ArrowRight') navigateLightbox(1);
|
||||
if (event.key === 'Tab') trapFocus(event);
|
||||
});
|
||||
|
||||
lightboxEl.addEventListener('wheel', function (event) {
|
||||
if (!lightboxEl.classList.contains('is-open') || currentZoom > 1 || currentGallery.length < 2) return;
|
||||
event.preventDefault();
|
||||
navigateLightbox(event.deltaY > 0 ? 1 : -1);
|
||||
}, { passive: false });
|
||||
|
||||
// Image click → toggle zoom
|
||||
lightboxImg.addEventListener('click', function (e) { e.stopPropagation(); toggleZoom(); });
|
||||
|
||||
// Double-click → zoom in
|
||||
lightboxImg.addEventListener('dblclick', function (e) {
|
||||
e.stopPropagation();
|
||||
lightboxImg.addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
if (lightboxFlag('imgbox_zoom', true)) toggleZoom();
|
||||
});
|
||||
lightboxImg.addEventListener('dblclick', function (event) {
|
||||
if (!lightboxFlag('imgbox_zoom', true)) return;
|
||||
event.stopPropagation();
|
||||
var maxZoom = window.innerWidth < 768 ? MAX_ZOOM_MOBILE : MAX_ZOOM_DESKTOP;
|
||||
if (currentZoom < maxZoom) setZoom(maxZoom);
|
||||
else setZoom(1);
|
||||
setZoom(currentZoom < maxZoom ? maxZoom : 1);
|
||||
});
|
||||
|
||||
// Pinch zoom (mobile)
|
||||
bindTouchGestures();
|
||||
|
||||
lightboxEl.querySelector('.toggle-zoom').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
toggleZoom();
|
||||
});
|
||||
lightboxEl.querySelector('.toggle-thumbs').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
lightboxThumbsWrap.hidden = !lightboxThumbsWrap.hidden;
|
||||
});
|
||||
lightboxEl.querySelector('.toggle-play').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
toggleAutoplay();
|
||||
});
|
||||
lightboxEl.querySelector('.toggle-full').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
toggleFullscreen();
|
||||
});
|
||||
|
||||
document.addEventListener('fullscreenchange', syncFullscreenState);
|
||||
document.addEventListener('webkitfullscreenchange', syncFullscreenState);
|
||||
|
||||
return lightboxEl;
|
||||
}
|
||||
|
||||
function bindTouchGestures() {
|
||||
var pinchStart = 0;
|
||||
lightboxEl.addEventListener('touchstart', function (e) {
|
||||
if (e.touches.length === 2) {
|
||||
var touchStartY = 0;
|
||||
var touchStartX = 0;
|
||||
var pullDistance = 0;
|
||||
|
||||
lightboxEl.addEventListener('touchstart', function (event) {
|
||||
if (event.touches.length === 2 && lightboxFlag('imgbox_zoom', true)) {
|
||||
pinchStart = Math.hypot(
|
||||
e.touches[1].clientX - e.touches[0].clientX,
|
||||
e.touches[1].clientY - e.touches[0].clientY
|
||||
event.touches[1].clientX - event.touches[0].clientX,
|
||||
event.touches[1].clientY - event.touches[0].clientY
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (event.touches.length === 1 && currentZoom <= 1.05) {
|
||||
touchStartY = event.touches[0].clientY;
|
||||
touchStartX = event.touches[0].clientX;
|
||||
pullDistance = 0;
|
||||
}
|
||||
}, { passive: true });
|
||||
|
||||
lightboxEl.addEventListener('touchmove', function (e) {
|
||||
if (e.touches.length === 2 && pinchStart > 0) {
|
||||
var dist = Math.hypot(
|
||||
e.touches[1].clientX - e.touches[0].clientX,
|
||||
e.touches[1].clientY - e.touches[0].clientY
|
||||
lightboxEl.addEventListener('touchmove', function (event) {
|
||||
if (event.touches.length === 2 && pinchStart > 0 && lightboxFlag('imgbox_zoom', true)) {
|
||||
var distance = Math.hypot(
|
||||
event.touches[1].clientX - event.touches[0].clientX,
|
||||
event.touches[1].clientY - event.touches[0].clientY
|
||||
);
|
||||
var maxZoom = window.innerWidth < 768 ? MAX_ZOOM_MOBILE : MAX_ZOOM_DESKTOP;
|
||||
var newZoom = Math.min(maxZoom, Math.max(1, currentZoom * (dist / pinchStart)));
|
||||
setZoom(newZoom);
|
||||
pinchStart = dist;
|
||||
setZoom(Math.min(maxZoom, Math.max(1, currentZoom * (distance / pinchStart))));
|
||||
pinchStart = distance;
|
||||
return;
|
||||
}
|
||||
}, { passive: true });
|
||||
if (event.touches.length !== 1 || currentZoom > 1.05) return;
|
||||
|
||||
lightboxEl.addEventListener('touchend', function () { pinchStart = 0; }, { passive: true });
|
||||
|
||||
// Touch swipe/pull-dismiss (skip when zoomed)
|
||||
var touchStartY = 0, touchStartX = 0, isSwiping = false;
|
||||
lightboxEl.addEventListener('touchstart', function (e) {
|
||||
if (e.touches.length !== 1 || currentZoom > 1.05) return;
|
||||
touchStartY = e.touches[0].clientY;
|
||||
touchStartX = e.touches[0].clientX;
|
||||
isSwiping = false;
|
||||
}, { passive: true });
|
||||
|
||||
lightboxEl.addEventListener('touchmove', function (e) {
|
||||
if (e.touches.length !== 1 || currentZoom > 1.05) return;
|
||||
var dy = e.touches[0].clientY - touchStartY;
|
||||
var dx = e.touches[0].clientX - touchStartX;
|
||||
var dy = event.touches[0].clientY - touchStartY;
|
||||
var dx = event.touches[0].clientX - touchStartX;
|
||||
if (Math.abs(dy) > Math.abs(dx) && dy > 30) {
|
||||
isSwiping = true;
|
||||
var opacity = Math.max(0.2, (150 - dy) / 80);
|
||||
pullDistance = dy;
|
||||
lightboxImg.style.transform = 'translate3d(0, ' + dy + 'px, 0) scale(' + currentZoom + ')';
|
||||
lightboxImg.style.opacity = String(Math.min(1, opacity));
|
||||
lightboxImg.style.opacity = String(Math.max(0.2, Math.min(1, (150 - dy) / 80)));
|
||||
}
|
||||
}, { passive: true });
|
||||
|
||||
lightboxEl.addEventListener('touchend', function () {
|
||||
if (isSwiping) {
|
||||
pinchStart = 0;
|
||||
if (pullDistance > 100) {
|
||||
closeLightbox();
|
||||
lightboxImg.style.transform = '';
|
||||
lightboxImg.style.opacity = '';
|
||||
} else if (pullDistance > 0) {
|
||||
setZoom(1);
|
||||
}
|
||||
isSwiping = false;
|
||||
lightboxImg.style.opacity = '';
|
||||
pullDistance = 0;
|
||||
}, { passive: true });
|
||||
|
||||
// Download
|
||||
lightboxEl.querySelector('.aksrt-lightbox__download').addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
var item = currentGallery[currentIndex];
|
||||
if (!item || !item.src) return;
|
||||
var a = document.createElement('a');
|
||||
var fullSrc = item.fullSrc || item.src;
|
||||
a.href = fullSrc;
|
||||
a.download = fullSrc.substring(fullSrc.lastIndexOf('/') + 1) || 'image';
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
});
|
||||
|
||||
// Zoom button
|
||||
lightboxEl.querySelector('.toggle-zoom').addEventListener('click', function (e) { e.stopPropagation(); toggleZoom(); });
|
||||
|
||||
// Thumbnails toggle
|
||||
lightboxEl.querySelector('.toggle-thumbs').addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
lightboxThumbsWrap.hidden = !lightboxThumbsWrap.hidden;
|
||||
});
|
||||
|
||||
// Slideshow toggle
|
||||
lightboxEl.querySelector('.toggle-play').addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
toggleAutoplay();
|
||||
});
|
||||
|
||||
// Fullscreen
|
||||
lightboxEl.querySelector('.toggle-full').addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
toggleFullscreen();
|
||||
});
|
||||
|
||||
document.addEventListener('fullscreenchange', function () {
|
||||
var icon = lightboxEl.querySelector('.toggle-full i');
|
||||
if (document.fullscreenElement) {
|
||||
lightboxEl.classList.add('full-screen');
|
||||
icon.className = 'fa fas fa-compress';
|
||||
} else {
|
||||
lightboxEl.classList.remove('full-screen');
|
||||
icon.className = 'fa fas fa-expand';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setZoom(z) {
|
||||
currentZoom = z;
|
||||
lightboxImg.style.transform = 'scale(' + z + ')';
|
||||
lightboxEl.classList.toggle('is-zoomed', z > 1);
|
||||
function trapFocus(event) {
|
||||
var focusable = Array.prototype.filter.call(
|
||||
lightboxEl.querySelectorAll('a[href],button:not([hidden]):not([disabled]),[tabindex]:not([tabindex="-1"])'),
|
||||
function (element) { return element.offsetParent !== null; }
|
||||
);
|
||||
if (!focusable.length) {
|
||||
event.preventDefault();
|
||||
lightboxEl.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
var first = focusable[0];
|
||||
var last = focusable[focusable.length - 1];
|
||||
if (event.shiftKey && document.activeElement === first) {
|
||||
event.preventDefault();
|
||||
last.focus();
|
||||
} else if (!event.shiftKey && document.activeElement === last) {
|
||||
event.preventDefault();
|
||||
first.focus();
|
||||
}
|
||||
}
|
||||
|
||||
function setZoom(zoom) {
|
||||
if (!lightboxImg || !lightboxEl) return;
|
||||
currentZoom = zoom;
|
||||
lightboxImg.style.transform = 'scale(' + zoom + ')';
|
||||
lightboxEl.classList.toggle('is-zoomed', zoom > 1);
|
||||
}
|
||||
|
||||
function toggleZoom() {
|
||||
if (!lightboxFlag('imgbox_zoom', true)) return;
|
||||
var maxZoom = window.innerWidth < 768 ? MAX_ZOOM_MOBILE : MAX_ZOOM_DESKTOP;
|
||||
setZoom(currentZoom > 1 ? 1 : maxZoom);
|
||||
}
|
||||
|
||||
function toggleAutoplay() {
|
||||
if (!lightboxEl) return;
|
||||
var icon = lightboxEl.querySelector('.toggle-play i');
|
||||
if (isAutoplay) {
|
||||
clearInterval(autoplayTimer);
|
||||
autoplayTimer = null;
|
||||
isAutoplay = false;
|
||||
icon.className = 'fa fas fa-play';
|
||||
} else {
|
||||
if (currentGallery.length < 2) return;
|
||||
isAutoplay = true;
|
||||
icon.className = 'fa fas fa-pause';
|
||||
autoplayTimer = setInterval(function () { navigateLightbox(1); }, 3000);
|
||||
return;
|
||||
}
|
||||
if (currentGallery.length < 2) return;
|
||||
|
||||
isAutoplay = true;
|
||||
icon.className = 'fa fas fa-pause';
|
||||
autoplayTimer = setInterval(function () { navigateLightbox(1); }, 3000);
|
||||
}
|
||||
|
||||
function toggleFullscreen() {
|
||||
var rfs = lightboxEl.requestFullscreen || lightboxEl.webkitRequestFullscreen || lightboxEl.msRequestFullscreen;
|
||||
if (document.fullscreenElement || document.webkitFullscreenElement) {
|
||||
(document.exitFullscreen || document.webkitExitFullscreen || document.msExitFullscreen).call(document);
|
||||
} else if (rfs) {
|
||||
rfs.call(lightboxEl);
|
||||
if (!lightboxEl || !lightboxFlag('imgbox_full', true)) return;
|
||||
var fullscreenElement = document.fullscreenElement || document.webkitFullscreenElement;
|
||||
if (fullscreenElement) {
|
||||
var exit = document.exitFullscreen || document.webkitExitFullscreen;
|
||||
if (exit) exit.call(document);
|
||||
return;
|
||||
}
|
||||
|
||||
var request = lightboxEl.requestFullscreen || lightboxEl.webkitRequestFullscreen;
|
||||
if (request) request.call(lightboxEl);
|
||||
}
|
||||
|
||||
function syncFullscreenState() {
|
||||
if (!lightboxEl) return;
|
||||
var active = Boolean(document.fullscreenElement || document.webkitFullscreenElement);
|
||||
var icon = lightboxEl.querySelector('.toggle-full i');
|
||||
lightboxEl.classList.toggle('full-screen', active);
|
||||
icon.className = active ? 'fa fas fa-compress' : 'fa fas fa-expand';
|
||||
}
|
||||
|
||||
function buildThumbnails() {
|
||||
if (!lightboxThumbsWrap) return;
|
||||
lightboxThumbsWrap.innerHTML = '';
|
||||
currentGallery.forEach(function (item, i) {
|
||||
currentGallery.forEach(function (item, index) {
|
||||
var button = document.createElement('button');
|
||||
var thumb = document.createElement('img');
|
||||
thumb.src = item.src;
|
||||
thumb.className = 'aksrt-lightbox__thumb' + (i === currentIndex ? ' is-active' : '');
|
||||
thumb.addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
showLightboxImage(i);
|
||||
button.type = 'button';
|
||||
button.className = 'aksrt-lightbox__thumb' + (index === currentIndex ? ' is-active' : '');
|
||||
button.setAttribute('aria-label', '查看第 ' + (index + 1) + ' 张图片');
|
||||
thumb.src = item.thumbSrc || item.src;
|
||||
thumb.alt = '';
|
||||
button.appendChild(thumb);
|
||||
button.addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
showLightboxImage(index);
|
||||
});
|
||||
lightboxThumbsWrap.appendChild(thumb);
|
||||
lightboxThumbsWrap.appendChild(button);
|
||||
});
|
||||
}
|
||||
|
||||
function syncThumbActive() {
|
||||
if (!lightboxThumbsWrap) return;
|
||||
var thumbs = lightboxThumbsWrap.querySelectorAll('.aksrt-lightbox__thumb');
|
||||
thumbs.forEach(function (t, i) { t.classList.toggle('is-active', i === currentIndex); });
|
||||
thumbs.forEach(function (thumb, index) {
|
||||
thumb.classList.toggle('is-active', index === currentIndex);
|
||||
});
|
||||
var active = thumbs[currentIndex];
|
||||
if (active) active.scrollIntoView({ inline: 'center', block: 'nearest', behavior: 'smooth' });
|
||||
if (active) active.scrollIntoView({ inline: 'center', block: 'nearest' });
|
||||
}
|
||||
|
||||
function syncControls() {
|
||||
if (!lightboxEl) return;
|
||||
var multiple = currentGallery.length > 1;
|
||||
var fullscreenAvailable = Boolean(
|
||||
lightboxEl.requestFullscreen
|
||||
|| lightboxEl.webkitRequestFullscreen
|
||||
|| document.fullscreenEnabled
|
||||
|| document.webkitFullscreenEnabled
|
||||
);
|
||||
var thumbsEnabled = multiple && lightboxFlag('imgbox_thumbs', true);
|
||||
|
||||
lightboxEl.querySelector('.toggle-zoom').hidden = !lightboxFlag('imgbox_zoom', true);
|
||||
lightboxEl.querySelector('.toggle-thumbs').hidden = !thumbsEnabled;
|
||||
lightboxEl.querySelector('.toggle-play').hidden = !multiple || !lightboxFlag('imgbox_play', false);
|
||||
lightboxEl.querySelector('.toggle-full').hidden = !lightboxFlag('imgbox_full', true) || !fullscreenAvailable;
|
||||
lightboxEl.querySelector('.aksrt-lightbox__download').hidden = !lightboxFlag('imgbox_down', false);
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--prev').hidden = !multiple;
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--next').hidden = !multiple;
|
||||
lightboxThumbsWrap.hidden = !thumbsEnabled;
|
||||
}
|
||||
|
||||
function openLightbox(src, caption, gallery, index, originEl) {
|
||||
createLightbox();
|
||||
if (!lightboxEnabled() || !createLightbox()) return false;
|
||||
|
||||
currentGallery = gallery || [{ src: src, caption: caption || '' }];
|
||||
currentIndex = index || 0;
|
||||
currentGallery = gallery && gallery.length ? gallery : [{ src: src, fullSrc: src, thumbSrc: src, caption: caption || '' }];
|
||||
currentIndex = Number.isInteger(index) ? index : 0;
|
||||
currentZoom = 1;
|
||||
lastTrigger = originEl || document.activeElement;
|
||||
|
||||
// Origin animation
|
||||
if (originEl) {
|
||||
if (originEl && typeof originEl.getBoundingClientRect === 'function') {
|
||||
var rect = originEl.getBoundingClientRect();
|
||||
lightboxEl.style.setProperty('--imgbox-origin-top', (rect.top + rect.height / 2) + 'px');
|
||||
lightboxEl.style.setProperty('--imgbox-origin-left', (rect.left + rect.width / 2) + 'px');
|
||||
@@ -4866,16 +4947,22 @@ tbquire.config({
|
||||
lightboxEl.classList.remove('from-origin');
|
||||
}
|
||||
|
||||
showLightboxImage(currentIndex);
|
||||
buildThumbnails();
|
||||
syncControls();
|
||||
showLightboxImage(currentIndex);
|
||||
|
||||
lightboxEl.classList.add('is-open');
|
||||
lightboxEl.setAttribute('aria-hidden', 'false');
|
||||
previousBodyOverflow = document.body.style.overflow;
|
||||
document.body.style.overflow = 'hidden';
|
||||
|
||||
document.body.classList.add('aksrt-lightbox-open');
|
||||
lightboxEl.querySelector('.aksrt-lightbox__close').focus();
|
||||
lightboxEl.dispatchEvent(new CustomEvent('aksrt:lightbox-open', { bubbles: true }));
|
||||
return true;
|
||||
}
|
||||
|
||||
function showLightboxImage(index) {
|
||||
if (!currentGallery.length || !lightboxImg) return;
|
||||
if (index < 0) index = currentGallery.length - 1;
|
||||
if (index >= currentGallery.length) index = 0;
|
||||
currentIndex = index;
|
||||
@@ -4885,88 +4972,113 @@ tbquire.config({
|
||||
lightboxImg.src = item.fullSrc || item.src;
|
||||
lightboxImg.alt = item.caption || '';
|
||||
lightboxCaption.textContent = item.caption || '';
|
||||
lightboxCaption.style.display = item.caption ? '' : 'none';
|
||||
lightboxCaption.hidden = !item.caption;
|
||||
|
||||
if (currentGallery.length > 1) {
|
||||
lightboxCounter.textContent = (currentIndex + 1) + ' / ' + currentGallery.length;
|
||||
lightboxCounter.style.display = '';
|
||||
lightboxCounter.hidden = false;
|
||||
} else {
|
||||
lightboxCounter.style.display = 'none';
|
||||
lightboxCounter.textContent = '';
|
||||
lightboxCounter.hidden = true;
|
||||
}
|
||||
|
||||
var download = lightboxEl.querySelector('.aksrt-lightbox__download');
|
||||
var fullSrc = item.fullSrc || item.src;
|
||||
download.href = fullSrc;
|
||||
download.download = fullSrc.substring(fullSrc.lastIndexOf('/') + 1).split(/[?#]/)[0] || 'image';
|
||||
syncThumbActive();
|
||||
}
|
||||
|
||||
function navigateLightbox(dir) {
|
||||
showLightboxImage(currentIndex + dir);
|
||||
function navigateLightbox(direction) {
|
||||
if (currentGallery.length < 2) return;
|
||||
showLightboxImage(currentIndex + direction);
|
||||
}
|
||||
|
||||
function closeLightbox() {
|
||||
if (!lightboxEl) return;
|
||||
if (!lightboxEl || !lightboxEl.classList.contains('is-open')) return;
|
||||
if (isAutoplay) toggleAutoplay();
|
||||
lightboxEl.classList.remove('is-open', 'is-zoomed', 'from-origin');
|
||||
document.body.style.overflow = '';
|
||||
lightboxEl.setAttribute('aria-hidden', 'true');
|
||||
document.body.style.overflow = previousBodyOverflow;
|
||||
document.body.classList.remove('aksrt-lightbox-open');
|
||||
lightboxThumbsWrap.hidden = true;
|
||||
if (document.fullscreenElement) {
|
||||
(document.exitFullscreen || document.webkitExitFullscreen || document.msExitFullscreen).call(document);
|
||||
lightboxImg.src = '';
|
||||
lightboxImg.alt = '';
|
||||
|
||||
var fullscreenElement = document.fullscreenElement || document.webkitFullscreenElement;
|
||||
var exit = document.exitFullscreen || document.webkitExitFullscreen;
|
||||
if (fullscreenElement && exit) exit.call(document);
|
||||
|
||||
if (lastTrigger && typeof lastTrigger.focus === 'function' && document.contains(lastTrigger)) {
|
||||
lastTrigger.focus({ preventScroll: true });
|
||||
}
|
||||
lastTrigger = null;
|
||||
}
|
||||
|
||||
function buildGallery(img) {
|
||||
var container = img.closest(GROUP_SEL);
|
||||
if (!container || container.closest('[data-no-lightbox],[data-aksrt-lightbox="0"]')) return null;
|
||||
|
||||
var gallery = [];
|
||||
var foundIndex = -1;
|
||||
container.querySelectorAll('img').forEach(function (candidate) {
|
||||
if (!candidate.matches(TRIGGER_SEL) || isNoLightbox(candidate)) return;
|
||||
var fullSrc = resolveFullUrl(candidate);
|
||||
var thumbSrc = resolveThumbUrl(candidate) || fullSrc;
|
||||
if (!fullSrc) return;
|
||||
|
||||
if (candidate === img) foundIndex = gallery.length;
|
||||
gallery.push({
|
||||
src: thumbSrc,
|
||||
thumbSrc: thumbSrc,
|
||||
fullSrc: fullSrc,
|
||||
caption: resolveCaption(candidate),
|
||||
});
|
||||
});
|
||||
|
||||
if (foundIndex < 0 || !gallery.length) return null;
|
||||
return { items: gallery, index: foundIndex };
|
||||
}
|
||||
|
||||
function openImage(img) {
|
||||
if (isNoLightbox(img)) return false;
|
||||
var gallery = buildGallery(img);
|
||||
if (!gallery) return false;
|
||||
var item = gallery.items[gallery.index];
|
||||
return openLightbox(item.fullSrc, item.caption, gallery.items, gallery.index, img);
|
||||
}
|
||||
|
||||
// Auto-bind: expanded trigger scope + exclusion rules
|
||||
function initLightbox() {
|
||||
document.addEventListener('click', function (e) {
|
||||
// Also support a[data-imgbox]
|
||||
var anchor = e.target.closest('a[data-imgbox]');
|
||||
if (anchor) {
|
||||
e.preventDefault();
|
||||
var href = anchor.getAttribute('href') || anchor.getAttribute('data-imgbox');
|
||||
openLightbox(href, '', [{ src: href, fullSrc: href, caption: '' }], 0, anchor);
|
||||
document.addEventListener('click', function (event) {
|
||||
if (!lightboxEnabled() || !(event.target instanceof Element)) return;
|
||||
|
||||
var anchor = event.target.closest(ANCHOR_TRIGGER_SEL);
|
||||
if (anchor && !anchor.closest(EXCLUDE_SEL)) {
|
||||
var anchorImage = anchor.querySelector('img');
|
||||
if (anchorImage && openImage(anchorImage)) {
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
var href = anchor.getAttribute('href') || '';
|
||||
if (IMAGE_URL_RE.test(href) && openLightbox(href, anchor.getAttribute('data-caption') || '', null, 0, anchor)) {
|
||||
event.preventDefault();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
var img = e.target.closest(TRIGGER_SEL);
|
||||
if (!img) return;
|
||||
if (img.width < 100 || img.height < 100) return;
|
||||
if (!lightboxEnabled() || isNoLightbox(img)) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
var container = img.closest(CONTAINER_SEL);
|
||||
if (!container) return;
|
||||
|
||||
var allImages = container.querySelectorAll('img');
|
||||
var gallery = [];
|
||||
var foundIndex = 0;
|
||||
|
||||
allImages.forEach(function (el) {
|
||||
if (el.width < 100 || el.height < 100) return;
|
||||
if (isNoLightbox(el)) return;
|
||||
var full = resolveFullUrl(el);
|
||||
var caption = el.alt || '';
|
||||
var figcaption = el.closest('figure') ? el.closest('figure').querySelector('figcaption') : null;
|
||||
if (figcaption) caption = figcaption.textContent;
|
||||
gallery.push({ src: el.dataset.src || el.src, fullSrc: full, caption: caption });
|
||||
if (el === img) foundIndex = gallery.length - 1;
|
||||
});
|
||||
|
||||
if (gallery.length > 0) {
|
||||
openLightbox(img.dataset.src || img.src, img.alt, gallery, foundIndex, img);
|
||||
}
|
||||
var img = event.target.closest(TRIGGER_SEL);
|
||||
if (img && openImage(img)) event.preventDefault();
|
||||
});
|
||||
}
|
||||
|
||||
// 暴露到全局
|
||||
window.AksrtLightbox = {
|
||||
open: openLightbox,
|
||||
close: closeLightbox,
|
||||
};
|
||||
|
||||
/* ============================================================
|
||||
* 2. 滚动方向感知
|
||||
* ============================================================ */
|
||||
// Scroll direction is now handled by aksrt-runtime.js body scroll bus
|
||||
// (body.scroll-down / body.scroll-up / body.body-scroll).
|
||||
// This stub syncs the legacy aksrt-* prefixed classes for backward compat.
|
||||
// Scroll direction is handled by aksrt-runtime.js. Keep the prefixed
|
||||
// classes in sync for the remaining CSS consumers.
|
||||
function initScrollDirection() {
|
||||
var body = document.body;
|
||||
|
||||
@@ -4982,28 +5094,15 @@ tbquire.config({
|
||||
}, 300);
|
||||
}
|
||||
|
||||
function onScroll() {
|
||||
window.addEventListener('scroll', function () {
|
||||
requestAnimationFrame(sync);
|
||||
}
|
||||
|
||||
window.addEventListener('scroll', onScroll, { passive: true });
|
||||
}, { passive: true });
|
||||
}
|
||||
|
||||
/* ============================================================
|
||||
* 3. 导航溢出折叠
|
||||
* 由 legacy main.js 的 navFolding 负责。
|
||||
* 此处不再重复实现,避免两套逻辑争抢 .aksrt-nav-more 节点
|
||||
* 触发 NotFoundError: insertBefore (moreLi 已被对方 remove)。
|
||||
* ============================================================ */
|
||||
|
||||
/* ============================================================
|
||||
* 初始化入口
|
||||
* ============================================================ */
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
initLightbox();
|
||||
initScrollDirection();
|
||||
});
|
||||
|
||||
})();
|
||||
;
|
||||
|
||||
@@ -5629,7 +5728,7 @@ tbquire.config({
|
||||
;
|
||||
|
||||
/* source: assets/js/runtime/main.min.js */
|
||||
jQuery.cookie=function(e,o,t){if(o===void 0){var i=null;if(document.cookie&&document.cookie!="")for(var r=document.cookie.split(";"),n=0;n<r.length;n++){var c=jQuery.trim(r[n]);if(c.substring(0,e.length+1)==e+"="){i=decodeURIComponent(c.substring(e.length+1));break}}return i}t=t||{},o===null&&(o="",t.expires=-1);var a="";if(t.expires&&(typeof t.expires=="number"||t.expires.toUTCString)){var l2;typeof t.expires=="number"?(l2=new Date,l2.setTime(l2.getTime()+24*t.expires*60*60*1e3)):l2=t.expires,a="; expires="+l2.toUTCString()}var u=t.path?"; path="+t.path:"",s=t.domain?"; domain="+t.domain:"",m=t.secure?"; secure":"";document.cookie=[e,"=",encodeURIComponent(o),a,u,s,m].join("")};var lcs={get:function(e){return window.localStorage?localStorage.getItem(e):jQuery.cookie(e)},set:function(e,o){window.localStorage?localStorage[e]=o:jQuery.cookie(e,o)},remove:function(e){window.localStorage?localStorage.removeItem(e):jQuery.cookie(e,"")}};function aksrt__(key){var map=window._win&&window._win.i18n;return map&&Object.prototype.hasOwnProperty.call(map,key)?map[key]:key}function aksrt_is_fatal_error_response(text){return text&&(text.indexOf("Fatal error")>-1||text.indexOf("致命错误")>-1)}function aksrt_sprintf(key){var args=Array.prototype.slice.call(arguments,1),str=aksrt__(key),autoIndex=0;return str.replace(/%(\d+\$)?s/g,function(match,num){var idx=num?parseInt(num,10)-1:autoIndex++;return args[idx]!==void 0&&args[idx]!==null?args[idx]:match})}(function(window2,factory){var lazySizes=factory(window2,window2.document,Date);window2.lazySizes=lazySizes,typeof module=="object"&&module.exports&&(module.exports=lazySizes)})(typeof window<"u"?window:{},function(window2,document2,Date2){"use strict";var lazysizes,lazySizesCfg;if((function(){var prop,lazySizesDefaults={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",loadafterClass:"lazyloadafter",errorClass:"lazyerror",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125};lazySizesCfg=window2.lazySizesConfig||window2.lazysizesConfig||{};for(prop in lazySizesDefaults)prop in lazySizesCfg||(lazySizesCfg[prop]=lazySizesDefaults[prop])})(),!document2||!document2.getElementsByClassName)return{init:function(){},cfg:lazySizesCfg,noSupport:!0};var docElem=document2.documentElement,supportPicture=window2.HTMLPictureElement,_addEventListener="addEventListener",_getAttribute="getAttribute",addEventListener=window2[_addEventListener].bind(window2),setTimeout2=window2.setTimeout,requestAnimationFrame2=window2.requestAnimationFrame||setTimeout2,requestIdleCallback=window2.requestIdleCallback,regPicture=/^picture$/i,loadEvents=["load","error","lazyincluded","_lazyloaded"],regClassCache={},forEach=Array.prototype.forEach,hasClass=function(ele,cls){return regClassCache[cls]||(regClassCache[cls]=new RegExp("(\\s|^)"+cls+"(\\s|$)")),regClassCache[cls].test(ele[_getAttribute]("class")||"")&®ClassCache[cls]},addClass=function(ele,cls){hasClass(ele,cls)||ele.setAttribute("class",(ele[_getAttribute]("class")||"").trim()+" "+cls)},removeClass=function(ele,cls){var reg2;(reg2=hasClass(ele,cls))&&ele.setAttribute("class",(ele[_getAttribute]("class")||"").replace(reg2," "))},addRemoveLoadEvents=function(dom,fn,add){var action=add?_addEventListener:"removeEventListener";add&&addRemoveLoadEvents(dom,fn),loadEvents.forEach(function(evt){dom[action](evt,fn)})},triggerEvent=function(elem,name,detail,noBubbles,noCancelable){var event=document2.createEvent("Event");return detail||(detail={}),detail.instance=lazysizes,event.initEvent(name,!noBubbles,!noCancelable),event.detail=detail,elem.dispatchEvent(event),event},updatePolyfill=function(el,full){var polyfill;!supportPicture&&(polyfill=window2.picturefill||lazySizesCfg.pf)?(full&&full.src&&!el[_getAttribute]("srcset")&&el.setAttribute("srcset",full.src),polyfill({reevaluate:!0,elements:[el]})):full&&full.src&&(el.src=full.src)},getCSS=function(elem,style){return(getComputedStyle(elem,null)||{})[style]},getWidth=function(elem,parent,width){for(width=width||elem.offsetWidth;width<lazySizesCfg.minSize&&parent&&!elem._lazysizesWidth;)width=parent.offsetWidth,parent=parent.parentNode;return width},rAF=(function(){var running,waiting,firstFns=[],secondFns=[],fns=firstFns,run=function(){var runFns=fns;for(fns=firstFns.length?secondFns:firstFns,running=!0,waiting=!1;runFns.length;)runFns.shift()();running=!1},rafBatch=function(fn,queue){running&&!queue?fn.apply(this,arguments):(fns.push(fn),waiting||(waiting=!0,(document2.hidden?setTimeout2:requestAnimationFrame2)(run)))};return rafBatch._lsFlush=run,rafBatch})(),rAFIt=function(fn,simple){return simple?function(){rAF(fn)}:function(){var that=this,args=arguments;rAF(function(){fn.apply(that,args)})}},throttle2=function(fn){var running,lastTime=0,gDelay=lazySizesCfg.throttleDelay,rICTimeout=lazySizesCfLine truncated
|
||||
jQuery.cookie=function(e,a,t){if(a===void 0){var r=null;if(document.cookie&&document.cookie!="")for(var n=document.cookie.split(";"),i=0;i<n.length;i++){var s=jQuery.trim(n[i]);if(s.substring(0,e.length+1)==e+"="){r=decodeURIComponent(s.substring(e.length+1));break}}return r}t=t||{},a===null&&(a="",t.expires=-1);var o="";if(t.expires&&(typeof t.expires=="number"||t.expires.toUTCString)){var d;typeof t.expires=="number"?(d=new Date,d.setTime(d.getTime()+24*t.expires*60*60*1e3)):d=t.expires,o="; expires="+d.toUTCString()}var u=t.path?"; path="+t.path:"",c=t.domain?"; domain="+t.domain:"",l=t.secure?"; secure":"";document.cookie=[e,"=",encodeURIComponent(a),o,u,c,l].join("")};var lcs={get:function(e){return window.localStorage?localStorage.getItem(e):jQuery.cookie(e)},set:function(e,a){window.localStorage?localStorage[e]=a:jQuery.cookie(e,a)},remove:function(e){window.localStorage?localStorage.removeItem(e):jQuery.cookie(e,"")}};function aksrt__(e){var a=window._win&&window._win.i18n;return a&&Object.prototype.hasOwnProperty.call(a,e)?a[e]:e}function aksrt_is_fatal_error_response(e){return e&&(e.indexOf("Fatal error")>-1||e.indexOf("致命错误")>-1)}function aksrt_sprintf(e){var a=Array.prototype.slice.call(arguments,1),t=aksrt__(e),r=0;return t.replace(/%(\d+\$)?s/g,function(n,i){var s=i?parseInt(i,10)-1:r++;return a[s]!==void 0&&a[s]!==null?a[s]:n})}(function(e,a){var t=a(e,e.document,Date);e.lazySizes=t,typeof module=="object"&&module.exports&&(module.exports=t)})(typeof window<"u"?window:{},function(a,t,r){"use strict";var n,i;if((function(){var w,y={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",loadafterClass:"lazyloadafter",errorClass:"lazyerror",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125};i=a.lazySizesConfig||a.lazysizesConfig||{};for(w in y)w in i||(i[w]=y[w])})(),!t||!t.getElementsByClassName)return{init:function(){},cfg:i,noSupport:!0};var s=t.documentElement,o=a.HTMLPictureElement,d="addEventListener",u="getAttribute",c=a[d].bind(a),l=a.setTimeout,h=a.requestAnimationFrame||l,f=a.requestIdleCallback,p=/^picture$/i,g=["load","error","lazyincluded","_lazyloaded"],v={},b=Array.prototype.forEach,_=function(w,y){return v[y]||(v[y]=new RegExp("(\\s|^)"+y+"(\\s|$)")),v[y].test(w[u]("class")||"")&&v[y]},Q=function(w,y){_(w,y)||w.setAttribute("class",(w[u]("class")||"").trim()+" "+y)},j=function(w,y){var k;(k=_(w,y))&&w.setAttribute("class",(w[u]("class")||"").replace(k," "))},C=function(w,y,k){var L=k?d:"removeEventListener";k&&C(w,y),g.forEach(function(q){w[L](q,y)})},T=function(w,y,k,L,q){var z=t.createEvent("Event");return k||(k={}),k.instance=n,z.initEvent(y,!L,!q),z.detail=k,w.dispatchEvent(z),z},F=function(w,y){var k;!o&&(k=a.picturefill||i.pf)?(y&&y.src&&!w[u]("srcset")&&w.setAttribute("srcset",y.src),k({reevaluate:!0,elements:[w]})):y&&y.src&&(w.src=y.src)},X=function(w,y){return(getComputedStyle(w,null)||{})[y]},Z=function(w,y,k){for(k=k||w.offsetWidth;k<i.minSize&&y&&!w._lazysizesWidth;)k=y.offsetWidth,y=y.parentNode;return k},Y=(function(){var w,y,k=[],L=[],q=k,z=function(){var E=q;for(q=k.length?L:k,w=!0,y=!1;E.length;)E.shift()();w=!1},O=function(E,A){w&&!A?E.apply(this,arguments):(q.push(E),y||(y=!0,(t.hidden?l:h)(z)))};return O._lsFlush=z,O})(),G=function(w,y){return y?function(){Y(w)}:function(){var k=this,L=arguments;Y(function(){w.apply(k,L)})}},pe=function(w){var y,k=0,L=i.throttleDelay,q=i.ricTimeout,z=function(){y=!1,k=r.now(),w()},O=f&&q>49?function(){f(z,{timeout:q}),q!==i.ricTimeout&&(q=i.ricTimeout)}:G(function(){l(z)},!0);return function(E){var A;(E=E===!0)&&(q=33),!y&&(y=!0,A=L-(r.now()-k),A<0&&(A=0),E||A<9?O():l(O,A))}},oe=function(w){var y,k,L=99,q=function(){y=null,w()},z=function(){var O=r.now()-k;O<L?l(z,L-O):(f||q)(q)};return function(){k=r.now(),y||(y=l(z,L))}},le=(function(){var w,y,k,L,q,z,O,E,A,W,$,J,me=/^img$/i,ye=/^iframe$/i,ge="onscroll"in a&&!/(gle|ing)bot/.test(navigator.userAgent),_e=0,ae=0,R=0,ee=-1,de=function(m){R--,(!m||R<0||!m.target)&&(R=0)},ue=function(m){return J==null&&(J=X(t.body,"visibility")=="hidden"),J||!(X(m.parentNode,"visibility")=="hidden"&&X(m,"visibility")=="hidden")},we=function(m,x){var S,M=m,H=ue(m);for(E-=x,$+=x,A-=x,W+=x;H&&(M=M.offsetParent)&&M!=t.body&&M!=s;)H=(X(M,"opacity")||1)>0,H&&X(M,"overflow")!="visible"&&(S=M.getBoundingClientRect(),H=W>S.left&&A<S.right&&$>S.top-1&&E<S.bottom+1);return H},ce=function(){var m,x,S,M,H,I,B,D,V,U,K,te,N=n.elements;if((L=i.loadMode)&&R<8&&(m=N.length)){for(x=0,ee++;x<m;x++)if(!(!N[x]||N[x]._lazyRace)){if(!ge||n.prematureUnveil&&n.prematureUnveil(N[x])){re(N[x]);continue}if((!(D=N[x][u]("data-expand"))||!(I=D*1))&&(I=ae),U||(U=!i.expand||i.expand<1?s.clientHeight>500&&s.clientWidth>500?500:370:i.expand,n._defEx=U,K=U*i.expFactor,te=i.hFac,J=null,ae<K&&R<1&&ee>2&&L>2&&!t.hidden?(ae=KLine truncated
|
||||
;
|
||||
|
||||
/* source: assets/js/captcha-front.js */
|
||||
|
||||
+354
-255
@@ -9,10 +9,6 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
/* ============================================================
|
||||
* 1. 图片灯箱 — zoom / thumbnails / slideshow / fullscreen /
|
||||
* mousewheel / origin animation / smart download
|
||||
* ============================================================ */
|
||||
var lightboxEl = null;
|
||||
var lightboxImg = null;
|
||||
var lightboxCaption = null;
|
||||
@@ -23,63 +19,111 @@
|
||||
var currentZoom = 1;
|
||||
var autoplayTimer = null;
|
||||
var isAutoplay = false;
|
||||
var EXCLUDE_SEL = '.no-imgbox,.no-lightbox,.avatar,.img-icon,.avatar-badge,.aksrt-avatar';
|
||||
var TRIGGER_SEL = '.entry-content img, .wp-posts-content img, .aksrt-lightbox-trigger img, [data-aksrt-lightbox] img, .imgbox-container img, .comment-content .box-img img, a[data-imgbox] img';
|
||||
var CONTAINER_SEL = '.entry-content, .wp-posts-content, .aksrt-lightbox-trigger, [data-aksrt-lightbox], .imgbox-container, .comment-content';
|
||||
var lastTrigger = null;
|
||||
var previousBodyOverflow = '';
|
||||
var EXCLUDE_SEL = '.no-imgbox,.no-lightbox,.avatar,.img-icon,.avatar-badge,.aksrt-avatar,[data-no-lightbox],[data-aksrt-lightbox="0"]';
|
||||
var TRIGGER_SEL = '[data-aksrt-lightbox="1"] img,.aksrt-lightbox-trigger img,.imgbox-container img,.comment-content .box-img';
|
||||
var ANCHOR_TRIGGER_SEL = 'a[data-aksrt-lightbox-trigger]';
|
||||
var GROUP_SEL = '[data-aksrt-lightbox-group],.content-gallery[data-aksrt-lightbox="1"],.aksrt-carousel-block[data-aksrt-lightbox="1"],.imgbox-container,.comment-content,.post_front_content[data-aksrt-lightbox="1"],.wp-posts-content[data-aksrt-lightbox="1"],.entry-thumb[data-aksrt-lightbox="1"],.entry-content[data-aksrt-lightbox="1"],.aksrt-lightbox-trigger,[data-aksrt-lightbox="1"]';
|
||||
var IMAGE_URL_RE = /\.(?:avif|bmp|gif|ico|jpe?g|png|svg|tiff?|webp)(?:[?#].*)?$/i;
|
||||
var MAX_ZOOM_DESKTOP = 2;
|
||||
var MAX_ZOOM_MOBILE = 3;
|
||||
|
||||
function lightboxFlag(key, fallback) {
|
||||
var w = window._win || (window.aksrtData && window.aksrtData.imgbox) || {};
|
||||
if (w[key] === undefined || w[key] === null || w[key] === '') return fallback;
|
||||
return w[key] === true || w[key] === 1 || w[key] === '1';
|
||||
}
|
||||
function lightboxEnabled() {
|
||||
return lightboxFlag('imgbox', true);
|
||||
var config = window._win || {};
|
||||
if (config[key] === undefined || config[key] === null || config[key] === '') return fallback;
|
||||
return config[key] === true || config[key] === 1 || config[key] === '1';
|
||||
}
|
||||
|
||||
function lightboxEnabled() {
|
||||
return lightboxFlag('imgbox', false);
|
||||
}
|
||||
|
||||
function normalizeFullUrl(url) {
|
||||
if (!url || url.indexOf('data:') === 0) return url || '';
|
||||
return url
|
||||
.replace(/-\d+x\d+(\.[a-z0-9]+)(?=([?#]|$))/i, '$1')
|
||||
.replace(/([?&])x-oss-process=[^#&]*&?/i, '$1')
|
||||
.replace(/[?&]$/, '');
|
||||
}
|
||||
|
||||
function resolveFullUrl(img) {
|
||||
var full = img.getAttribute('data-full-url') || img.getAttribute('data-src') || '';
|
||||
if (full) return full;
|
||||
var src = img.src || '';
|
||||
// thumbnail → original: strip -NNNxNNN suffix
|
||||
return src.replace(/-\d+x\d+(\.[a-z]+)$/i, '$1');
|
||||
var explicitFull = img.getAttribute('data-full-url') || '';
|
||||
if (explicitFull) return normalizeFullUrl(explicitFull);
|
||||
|
||||
var anchor = img.closest('a[href]');
|
||||
var href = anchor ? anchor.getAttribute('href') || '' : '';
|
||||
if (IMAGE_URL_RE.test(href)) return normalizeFullUrl(href);
|
||||
|
||||
return normalizeFullUrl(
|
||||
img.getAttribute('data-src')
|
||||
|| img.getAttribute('data-lazy-src')
|
||||
|| img.currentSrc
|
||||
|| img.getAttribute('src')
|
||||
|| ''
|
||||
);
|
||||
}
|
||||
|
||||
function resolveThumbUrl(img) {
|
||||
return img.currentSrc
|
||||
|| img.getAttribute('src')
|
||||
|| img.getAttribute('data-src')
|
||||
|| img.getAttribute('data-lazy-src')
|
||||
|| img.getAttribute('data-full-url')
|
||||
|| '';
|
||||
}
|
||||
|
||||
function resolveCaption(img) {
|
||||
var anchor = img.closest('a');
|
||||
var explicit = anchor ? anchor.getAttribute('data-caption') || '' : '';
|
||||
if (explicit.trim()) return explicit.trim();
|
||||
|
||||
var figure = img.closest('figure');
|
||||
var figcaption = figure ? figure.querySelector('figcaption') : null;
|
||||
if (figcaption && figcaption.textContent.trim()) return figcaption.textContent.trim();
|
||||
|
||||
return (img.getAttribute('alt') || '').trim();
|
||||
}
|
||||
|
||||
function isNoLightbox(img) {
|
||||
if (img.closest(EXCLUDE_SEL)) return true;
|
||||
// parent anchor that does NOT point to an image
|
||||
var parentA = img.closest('a');
|
||||
if (!img || img.closest(EXCLUDE_SEL)) return true;
|
||||
|
||||
var parentA = img.closest('a[href]');
|
||||
if (parentA) {
|
||||
var href = parentA.getAttribute('href') || '';
|
||||
if (href && !/\.(jpe?g|png|gif|webp|avif|svg|bmp)(\?|$)/i.test(href) && !parentA.hasAttribute('data-imgbox')) {
|
||||
if (href && !IMAGE_URL_RE.test(href) && !parentA.hasAttribute('data-aksrt-lightbox-trigger')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
return resolveFullUrl(img) === '';
|
||||
}
|
||||
|
||||
function createLightbox() {
|
||||
if (!lightboxEnabled()) return;
|
||||
if (lightboxEl) return;
|
||||
if (!lightboxEnabled()) return null;
|
||||
if (lightboxEl) return lightboxEl;
|
||||
|
||||
lightboxEl = document.createElement('div');
|
||||
lightboxEl.className = 'aksrt-lightbox';
|
||||
lightboxEl.setAttribute('role', 'dialog');
|
||||
lightboxEl.setAttribute('aria-modal', 'true');
|
||||
lightboxEl.setAttribute('aria-hidden', 'true');
|
||||
lightboxEl.setAttribute('aria-label', '图片预览');
|
||||
lightboxEl.setAttribute('tabindex', '-1');
|
||||
lightboxEl.innerHTML =
|
||||
'<div class="aksrt-lightbox__toolbar">' +
|
||||
'<span class="aksrt-lightbox__counter"></span>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-zoom" title="缩放"><i class="fa fas fa-search-plus"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-thumbs" title="缩略图"><i class="fa fas fa-th"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-play" title="幻灯片"><i class="fa fas fa-play"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-full" title="全屏"><i class="fa fas fa-expand"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool aksrt-lightbox__download" title="下载"><i class="fa fas fa-download"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool aksrt-lightbox__close" title="关闭"><i class="fa fas fa-times"></i></button>' +
|
||||
'<span class="aksrt-lightbox__counter" aria-live="polite"></span>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-zoom" title="缩放" aria-label="缩放"><i class="fa fas fa-search-plus" aria-hidden="true"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-thumbs" title="缩略图" aria-label="显示或隐藏缩略图"><i class="fa fas fa-th" aria-hidden="true"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-play" title="幻灯片" aria-label="播放幻灯片"><i class="fa fas fa-play" aria-hidden="true"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool toggle-full" title="全屏" aria-label="切换全屏"><i class="fa fas fa-expand" aria-hidden="true"></i></button>' +
|
||||
'<a class="aksrt-lightbox__tool aksrt-lightbox__download" title="下载" aria-label="下载图片" download><i class="fa fas fa-download" aria-hidden="true"></i></a>' +
|
||||
'<button type="button" class="aksrt-lightbox__tool aksrt-lightbox__close" title="关闭" aria-label="关闭"><i class="fa fas fa-times" aria-hidden="true"></i></button>' +
|
||||
'</div>' +
|
||||
'<button type="button" class="aksrt-lightbox__nav aksrt-lightbox__nav--prev" aria-label="上一张"><i class="fa fas fa-chevron-left"></i></button>' +
|
||||
'<button type="button" class="aksrt-lightbox__nav aksrt-lightbox__nav--prev" aria-label="上一张"><i class="fa fas fa-chevron-left" aria-hidden="true"></i></button>' +
|
||||
'<div class="aksrt-lightbox__stage"><img class="aksrt-lightbox__img" src="" alt=""></div>' +
|
||||
'<button type="button" class="aksrt-lightbox__nav aksrt-lightbox__nav--next" aria-label="下一张"><i class="fa fas fa-chevron-right"></i></button>' +
|
||||
'<div class="aksrt-lightbox__caption"></div>' +
|
||||
'<button type="button" class="aksrt-lightbox__nav aksrt-lightbox__nav--next" aria-label="下一张"><i class="fa fas fa-chevron-right" aria-hidden="true"></i></button>' +
|
||||
'<div class="aksrt-lightbox__caption" aria-live="polite"></div>' +
|
||||
'<div class="aksrt-lightbox__thumbs" hidden></div>';
|
||||
|
||||
document.body.appendChild(lightboxEl);
|
||||
@@ -89,223 +133,260 @@
|
||||
lightboxCounter = lightboxEl.querySelector('.aksrt-lightbox__counter');
|
||||
lightboxThumbsWrap = lightboxEl.querySelector('.aksrt-lightbox__thumbs');
|
||||
|
||||
// Apply window._win imgbox feature flags
|
||||
var zoomBtn = lightboxEl.querySelector('.toggle-zoom');
|
||||
var thumbsBtn = lightboxEl.querySelector('.toggle-thumbs');
|
||||
var playBtn = lightboxEl.querySelector('.toggle-play');
|
||||
var fullBtn = lightboxEl.querySelector('.toggle-full');
|
||||
var downBtn = lightboxEl.querySelector('.aksrt-lightbox__download');
|
||||
if (zoomBtn) zoomBtn.hidden = !lightboxFlag('imgbox_zoom', true);
|
||||
if (thumbsBtn) thumbsBtn.hidden = !lightboxFlag('imgbox_thumbs', true);
|
||||
if (playBtn) playBtn.hidden = !lightboxFlag('imgbox_play', false);
|
||||
if (fullBtn) fullBtn.hidden = !lightboxFlag('imgbox_full', true);
|
||||
if (downBtn) downBtn.hidden = !lightboxFlag('imgbox_down', false);
|
||||
|
||||
// Close
|
||||
lightboxEl.querySelector('.aksrt-lightbox__close').addEventListener('click', function (e) { e.stopPropagation(); closeLightbox(); });
|
||||
lightboxEl.addEventListener('click', function (e) { if (e.target === lightboxEl || e.target.classList.contains('aksrt-lightbox__stage')) closeLightbox(); });
|
||||
|
||||
// Nav
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--prev').addEventListener('click', function (e) { e.stopPropagation(); navigateLightbox(-1); });
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--next').addEventListener('click', function (e) { e.stopPropagation(); navigateLightbox(1); });
|
||||
|
||||
// Keyboard
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (!lightboxEl.classList.contains('is-open')) return;
|
||||
if (e.key === 'Escape') closeLightbox();
|
||||
if (e.key === 'ArrowLeft') navigateLightbox(-1);
|
||||
if (e.key === 'ArrowRight') navigateLightbox(1);
|
||||
lightboxEl.querySelector('.aksrt-lightbox__close').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
closeLightbox();
|
||||
});
|
||||
lightboxEl.addEventListener('click', function (event) {
|
||||
if (event.target === lightboxEl || event.target.classList.contains('aksrt-lightbox__stage')) closeLightbox();
|
||||
});
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--prev').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
navigateLightbox(-1);
|
||||
});
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--next').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
navigateLightbox(1);
|
||||
});
|
||||
|
||||
// Mousewheel nav
|
||||
lightboxEl.addEventListener('wheel', function (e) {
|
||||
if (!lightboxEl.classList.contains('is-open')) return;
|
||||
if (currentZoom > 1) return; // don't nav when zoomed
|
||||
e.preventDefault();
|
||||
if (e.deltaY > 0) navigateLightbox(1);
|
||||
else navigateLightbox(-1);
|
||||
document.addEventListener('keydown', function (event) {
|
||||
if (!lightboxEl || !lightboxEl.classList.contains('is-open')) return;
|
||||
if (event.key === 'Escape') closeLightbox();
|
||||
if (event.key === 'ArrowLeft') navigateLightbox(-1);
|
||||
if (event.key === 'ArrowRight') navigateLightbox(1);
|
||||
if (event.key === 'Tab') trapFocus(event);
|
||||
});
|
||||
|
||||
lightboxEl.addEventListener('wheel', function (event) {
|
||||
if (!lightboxEl.classList.contains('is-open') || currentZoom > 1 || currentGallery.length < 2) return;
|
||||
event.preventDefault();
|
||||
navigateLightbox(event.deltaY > 0 ? 1 : -1);
|
||||
}, { passive: false });
|
||||
|
||||
// Image click → toggle zoom
|
||||
lightboxImg.addEventListener('click', function (e) { e.stopPropagation(); toggleZoom(); });
|
||||
|
||||
// Double-click → zoom in
|
||||
lightboxImg.addEventListener('dblclick', function (e) {
|
||||
e.stopPropagation();
|
||||
lightboxImg.addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
if (lightboxFlag('imgbox_zoom', true)) toggleZoom();
|
||||
});
|
||||
lightboxImg.addEventListener('dblclick', function (event) {
|
||||
if (!lightboxFlag('imgbox_zoom', true)) return;
|
||||
event.stopPropagation();
|
||||
var maxZoom = window.innerWidth < 768 ? MAX_ZOOM_MOBILE : MAX_ZOOM_DESKTOP;
|
||||
if (currentZoom < maxZoom) setZoom(maxZoom);
|
||||
else setZoom(1);
|
||||
setZoom(currentZoom < maxZoom ? maxZoom : 1);
|
||||
});
|
||||
|
||||
// Pinch zoom (mobile)
|
||||
bindTouchGestures();
|
||||
|
||||
lightboxEl.querySelector('.toggle-zoom').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
toggleZoom();
|
||||
});
|
||||
lightboxEl.querySelector('.toggle-thumbs').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
lightboxThumbsWrap.hidden = !lightboxThumbsWrap.hidden;
|
||||
});
|
||||
lightboxEl.querySelector('.toggle-play').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
toggleAutoplay();
|
||||
});
|
||||
lightboxEl.querySelector('.toggle-full').addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
toggleFullscreen();
|
||||
});
|
||||
|
||||
document.addEventListener('fullscreenchange', syncFullscreenState);
|
||||
document.addEventListener('webkitfullscreenchange', syncFullscreenState);
|
||||
|
||||
return lightboxEl;
|
||||
}
|
||||
|
||||
function bindTouchGestures() {
|
||||
var pinchStart = 0;
|
||||
lightboxEl.addEventListener('touchstart', function (e) {
|
||||
if (e.touches.length === 2) {
|
||||
var touchStartY = 0;
|
||||
var touchStartX = 0;
|
||||
var pullDistance = 0;
|
||||
|
||||
lightboxEl.addEventListener('touchstart', function (event) {
|
||||
if (event.touches.length === 2 && lightboxFlag('imgbox_zoom', true)) {
|
||||
pinchStart = Math.hypot(
|
||||
e.touches[1].clientX - e.touches[0].clientX,
|
||||
e.touches[1].clientY - e.touches[0].clientY
|
||||
event.touches[1].clientX - event.touches[0].clientX,
|
||||
event.touches[1].clientY - event.touches[0].clientY
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (event.touches.length === 1 && currentZoom <= 1.05) {
|
||||
touchStartY = event.touches[0].clientY;
|
||||
touchStartX = event.touches[0].clientX;
|
||||
pullDistance = 0;
|
||||
}
|
||||
}, { passive: true });
|
||||
|
||||
lightboxEl.addEventListener('touchmove', function (e) {
|
||||
if (e.touches.length === 2 && pinchStart > 0) {
|
||||
var dist = Math.hypot(
|
||||
e.touches[1].clientX - e.touches[0].clientX,
|
||||
e.touches[1].clientY - e.touches[0].clientY
|
||||
lightboxEl.addEventListener('touchmove', function (event) {
|
||||
if (event.touches.length === 2 && pinchStart > 0 && lightboxFlag('imgbox_zoom', true)) {
|
||||
var distance = Math.hypot(
|
||||
event.touches[1].clientX - event.touches[0].clientX,
|
||||
event.touches[1].clientY - event.touches[0].clientY
|
||||
);
|
||||
var maxZoom = window.innerWidth < 768 ? MAX_ZOOM_MOBILE : MAX_ZOOM_DESKTOP;
|
||||
var newZoom = Math.min(maxZoom, Math.max(1, currentZoom * (dist / pinchStart)));
|
||||
setZoom(newZoom);
|
||||
pinchStart = dist;
|
||||
setZoom(Math.min(maxZoom, Math.max(1, currentZoom * (distance / pinchStart))));
|
||||
pinchStart = distance;
|
||||
return;
|
||||
}
|
||||
}, { passive: true });
|
||||
if (event.touches.length !== 1 || currentZoom > 1.05) return;
|
||||
|
||||
lightboxEl.addEventListener('touchend', function () { pinchStart = 0; }, { passive: true });
|
||||
|
||||
// Touch swipe/pull-dismiss (skip when zoomed)
|
||||
var touchStartY = 0, touchStartX = 0, isSwiping = false;
|
||||
lightboxEl.addEventListener('touchstart', function (e) {
|
||||
if (e.touches.length !== 1 || currentZoom > 1.05) return;
|
||||
touchStartY = e.touches[0].clientY;
|
||||
touchStartX = e.touches[0].clientX;
|
||||
isSwiping = false;
|
||||
}, { passive: true });
|
||||
|
||||
lightboxEl.addEventListener('touchmove', function (e) {
|
||||
if (e.touches.length !== 1 || currentZoom > 1.05) return;
|
||||
var dy = e.touches[0].clientY - touchStartY;
|
||||
var dx = e.touches[0].clientX - touchStartX;
|
||||
var dy = event.touches[0].clientY - touchStartY;
|
||||
var dx = event.touches[0].clientX - touchStartX;
|
||||
if (Math.abs(dy) > Math.abs(dx) && dy > 30) {
|
||||
isSwiping = true;
|
||||
var opacity = Math.max(0.2, (150 - dy) / 80);
|
||||
pullDistance = dy;
|
||||
lightboxImg.style.transform = 'translate3d(0, ' + dy + 'px, 0) scale(' + currentZoom + ')';
|
||||
lightboxImg.style.opacity = String(Math.min(1, opacity));
|
||||
lightboxImg.style.opacity = String(Math.max(0.2, Math.min(1, (150 - dy) / 80)));
|
||||
}
|
||||
}, { passive: true });
|
||||
|
||||
lightboxEl.addEventListener('touchend', function () {
|
||||
if (isSwiping) {
|
||||
pinchStart = 0;
|
||||
if (pullDistance > 100) {
|
||||
closeLightbox();
|
||||
lightboxImg.style.transform = '';
|
||||
lightboxImg.style.opacity = '';
|
||||
} else if (pullDistance > 0) {
|
||||
setZoom(1);
|
||||
}
|
||||
isSwiping = false;
|
||||
lightboxImg.style.opacity = '';
|
||||
pullDistance = 0;
|
||||
}, { passive: true });
|
||||
|
||||
// Download
|
||||
lightboxEl.querySelector('.aksrt-lightbox__download').addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
var item = currentGallery[currentIndex];
|
||||
if (!item || !item.src) return;
|
||||
var a = document.createElement('a');
|
||||
var fullSrc = item.fullSrc || item.src;
|
||||
a.href = fullSrc;
|
||||
a.download = fullSrc.substring(fullSrc.lastIndexOf('/') + 1) || 'image';
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
});
|
||||
|
||||
// Zoom button
|
||||
lightboxEl.querySelector('.toggle-zoom').addEventListener('click', function (e) { e.stopPropagation(); toggleZoom(); });
|
||||
|
||||
// Thumbnails toggle
|
||||
lightboxEl.querySelector('.toggle-thumbs').addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
lightboxThumbsWrap.hidden = !lightboxThumbsWrap.hidden;
|
||||
});
|
||||
|
||||
// Slideshow toggle
|
||||
lightboxEl.querySelector('.toggle-play').addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
toggleAutoplay();
|
||||
});
|
||||
|
||||
// Fullscreen
|
||||
lightboxEl.querySelector('.toggle-full').addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
toggleFullscreen();
|
||||
});
|
||||
|
||||
document.addEventListener('fullscreenchange', function () {
|
||||
var icon = lightboxEl.querySelector('.toggle-full i');
|
||||
if (document.fullscreenElement) {
|
||||
lightboxEl.classList.add('full-screen');
|
||||
icon.className = 'fa fas fa-compress';
|
||||
} else {
|
||||
lightboxEl.classList.remove('full-screen');
|
||||
icon.className = 'fa fas fa-expand';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setZoom(z) {
|
||||
currentZoom = z;
|
||||
lightboxImg.style.transform = 'scale(' + z + ')';
|
||||
lightboxEl.classList.toggle('is-zoomed', z > 1);
|
||||
function trapFocus(event) {
|
||||
var focusable = Array.prototype.filter.call(
|
||||
lightboxEl.querySelectorAll('a[href],button:not([hidden]):not([disabled]),[tabindex]:not([tabindex="-1"])'),
|
||||
function (element) { return element.offsetParent !== null; }
|
||||
);
|
||||
if (!focusable.length) {
|
||||
event.preventDefault();
|
||||
lightboxEl.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
var first = focusable[0];
|
||||
var last = focusable[focusable.length - 1];
|
||||
if (event.shiftKey && document.activeElement === first) {
|
||||
event.preventDefault();
|
||||
last.focus();
|
||||
} else if (!event.shiftKey && document.activeElement === last) {
|
||||
event.preventDefault();
|
||||
first.focus();
|
||||
}
|
||||
}
|
||||
|
||||
function setZoom(zoom) {
|
||||
if (!lightboxImg || !lightboxEl) return;
|
||||
currentZoom = zoom;
|
||||
lightboxImg.style.transform = 'scale(' + zoom + ')';
|
||||
lightboxEl.classList.toggle('is-zoomed', zoom > 1);
|
||||
}
|
||||
|
||||
function toggleZoom() {
|
||||
if (!lightboxFlag('imgbox_zoom', true)) return;
|
||||
var maxZoom = window.innerWidth < 768 ? MAX_ZOOM_MOBILE : MAX_ZOOM_DESKTOP;
|
||||
setZoom(currentZoom > 1 ? 1 : maxZoom);
|
||||
}
|
||||
|
||||
function toggleAutoplay() {
|
||||
if (!lightboxEl) return;
|
||||
var icon = lightboxEl.querySelector('.toggle-play i');
|
||||
if (isAutoplay) {
|
||||
clearInterval(autoplayTimer);
|
||||
autoplayTimer = null;
|
||||
isAutoplay = false;
|
||||
icon.className = 'fa fas fa-play';
|
||||
} else {
|
||||
if (currentGallery.length < 2) return;
|
||||
isAutoplay = true;
|
||||
icon.className = 'fa fas fa-pause';
|
||||
autoplayTimer = setInterval(function () { navigateLightbox(1); }, 3000);
|
||||
return;
|
||||
}
|
||||
if (currentGallery.length < 2) return;
|
||||
|
||||
isAutoplay = true;
|
||||
icon.className = 'fa fas fa-pause';
|
||||
autoplayTimer = setInterval(function () { navigateLightbox(1); }, 3000);
|
||||
}
|
||||
|
||||
function toggleFullscreen() {
|
||||
var rfs = lightboxEl.requestFullscreen || lightboxEl.webkitRequestFullscreen || lightboxEl.msRequestFullscreen;
|
||||
if (document.fullscreenElement || document.webkitFullscreenElement) {
|
||||
(document.exitFullscreen || document.webkitExitFullscreen || document.msExitFullscreen).call(document);
|
||||
} else if (rfs) {
|
||||
rfs.call(lightboxEl);
|
||||
if (!lightboxEl || !lightboxFlag('imgbox_full', true)) return;
|
||||
var fullscreenElement = document.fullscreenElement || document.webkitFullscreenElement;
|
||||
if (fullscreenElement) {
|
||||
var exit = document.exitFullscreen || document.webkitExitFullscreen;
|
||||
if (exit) exit.call(document);
|
||||
return;
|
||||
}
|
||||
|
||||
var request = lightboxEl.requestFullscreen || lightboxEl.webkitRequestFullscreen;
|
||||
if (request) request.call(lightboxEl);
|
||||
}
|
||||
|
||||
function syncFullscreenState() {
|
||||
if (!lightboxEl) return;
|
||||
var active = Boolean(document.fullscreenElement || document.webkitFullscreenElement);
|
||||
var icon = lightboxEl.querySelector('.toggle-full i');
|
||||
lightboxEl.classList.toggle('full-screen', active);
|
||||
icon.className = active ? 'fa fas fa-compress' : 'fa fas fa-expand';
|
||||
}
|
||||
|
||||
function buildThumbnails() {
|
||||
if (!lightboxThumbsWrap) return;
|
||||
lightboxThumbsWrap.innerHTML = '';
|
||||
currentGallery.forEach(function (item, i) {
|
||||
currentGallery.forEach(function (item, index) {
|
||||
var button = document.createElement('button');
|
||||
var thumb = document.createElement('img');
|
||||
thumb.src = item.src;
|
||||
thumb.className = 'aksrt-lightbox__thumb' + (i === currentIndex ? ' is-active' : '');
|
||||
thumb.addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
showLightboxImage(i);
|
||||
button.type = 'button';
|
||||
button.className = 'aksrt-lightbox__thumb' + (index === currentIndex ? ' is-active' : '');
|
||||
button.setAttribute('aria-label', '查看第 ' + (index + 1) + ' 张图片');
|
||||
thumb.src = item.thumbSrc || item.src;
|
||||
thumb.alt = '';
|
||||
button.appendChild(thumb);
|
||||
button.addEventListener('click', function (event) {
|
||||
event.stopPropagation();
|
||||
showLightboxImage(index);
|
||||
});
|
||||
lightboxThumbsWrap.appendChild(thumb);
|
||||
lightboxThumbsWrap.appendChild(button);
|
||||
});
|
||||
}
|
||||
|
||||
function syncThumbActive() {
|
||||
if (!lightboxThumbsWrap) return;
|
||||
var thumbs = lightboxThumbsWrap.querySelectorAll('.aksrt-lightbox__thumb');
|
||||
thumbs.forEach(function (t, i) { t.classList.toggle('is-active', i === currentIndex); });
|
||||
thumbs.forEach(function (thumb, index) {
|
||||
thumb.classList.toggle('is-active', index === currentIndex);
|
||||
});
|
||||
var active = thumbs[currentIndex];
|
||||
if (active) active.scrollIntoView({ inline: 'center', block: 'nearest', behavior: 'smooth' });
|
||||
if (active) active.scrollIntoView({ inline: 'center', block: 'nearest' });
|
||||
}
|
||||
|
||||
function syncControls() {
|
||||
if (!lightboxEl) return;
|
||||
var multiple = currentGallery.length > 1;
|
||||
var fullscreenAvailable = Boolean(
|
||||
lightboxEl.requestFullscreen
|
||||
|| lightboxEl.webkitRequestFullscreen
|
||||
|| document.fullscreenEnabled
|
||||
|| document.webkitFullscreenEnabled
|
||||
);
|
||||
var thumbsEnabled = multiple && lightboxFlag('imgbox_thumbs', true);
|
||||
|
||||
lightboxEl.querySelector('.toggle-zoom').hidden = !lightboxFlag('imgbox_zoom', true);
|
||||
lightboxEl.querySelector('.toggle-thumbs').hidden = !thumbsEnabled;
|
||||
lightboxEl.querySelector('.toggle-play').hidden = !multiple || !lightboxFlag('imgbox_play', false);
|
||||
lightboxEl.querySelector('.toggle-full').hidden = !lightboxFlag('imgbox_full', true) || !fullscreenAvailable;
|
||||
lightboxEl.querySelector('.aksrt-lightbox__download').hidden = !lightboxFlag('imgbox_down', false);
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--prev').hidden = !multiple;
|
||||
lightboxEl.querySelector('.aksrt-lightbox__nav--next').hidden = !multiple;
|
||||
lightboxThumbsWrap.hidden = !thumbsEnabled;
|
||||
}
|
||||
|
||||
function openLightbox(src, caption, gallery, index, originEl) {
|
||||
createLightbox();
|
||||
if (!lightboxEnabled() || !createLightbox()) return false;
|
||||
|
||||
currentGallery = gallery || [{ src: src, caption: caption || '' }];
|
||||
currentIndex = index || 0;
|
||||
currentGallery = gallery && gallery.length ? gallery : [{ src: src, fullSrc: src, thumbSrc: src, caption: caption || '' }];
|
||||
currentIndex = Number.isInteger(index) ? index : 0;
|
||||
currentZoom = 1;
|
||||
lastTrigger = originEl || document.activeElement;
|
||||
|
||||
// Origin animation
|
||||
if (originEl) {
|
||||
if (originEl && typeof originEl.getBoundingClientRect === 'function') {
|
||||
var rect = originEl.getBoundingClientRect();
|
||||
lightboxEl.style.setProperty('--imgbox-origin-top', (rect.top + rect.height / 2) + 'px');
|
||||
lightboxEl.style.setProperty('--imgbox-origin-left', (rect.left + rect.width / 2) + 'px');
|
||||
@@ -314,16 +395,22 @@
|
||||
lightboxEl.classList.remove('from-origin');
|
||||
}
|
||||
|
||||
showLightboxImage(currentIndex);
|
||||
buildThumbnails();
|
||||
syncControls();
|
||||
showLightboxImage(currentIndex);
|
||||
|
||||
lightboxEl.classList.add('is-open');
|
||||
lightboxEl.setAttribute('aria-hidden', 'false');
|
||||
previousBodyOverflow = document.body.style.overflow;
|
||||
document.body.style.overflow = 'hidden';
|
||||
|
||||
document.body.classList.add('aksrt-lightbox-open');
|
||||
lightboxEl.querySelector('.aksrt-lightbox__close').focus();
|
||||
lightboxEl.dispatchEvent(new CustomEvent('aksrt:lightbox-open', { bubbles: true }));
|
||||
return true;
|
||||
}
|
||||
|
||||
function showLightboxImage(index) {
|
||||
if (!currentGallery.length || !lightboxImg) return;
|
||||
if (index < 0) index = currentGallery.length - 1;
|
||||
if (index >= currentGallery.length) index = 0;
|
||||
currentIndex = index;
|
||||
@@ -333,88 +420,113 @@
|
||||
lightboxImg.src = item.fullSrc || item.src;
|
||||
lightboxImg.alt = item.caption || '';
|
||||
lightboxCaption.textContent = item.caption || '';
|
||||
lightboxCaption.style.display = item.caption ? '' : 'none';
|
||||
lightboxCaption.hidden = !item.caption;
|
||||
|
||||
if (currentGallery.length > 1) {
|
||||
lightboxCounter.textContent = (currentIndex + 1) + ' / ' + currentGallery.length;
|
||||
lightboxCounter.style.display = '';
|
||||
lightboxCounter.hidden = false;
|
||||
} else {
|
||||
lightboxCounter.style.display = 'none';
|
||||
lightboxCounter.textContent = '';
|
||||
lightboxCounter.hidden = true;
|
||||
}
|
||||
|
||||
var download = lightboxEl.querySelector('.aksrt-lightbox__download');
|
||||
var fullSrc = item.fullSrc || item.src;
|
||||
download.href = fullSrc;
|
||||
download.download = fullSrc.substring(fullSrc.lastIndexOf('/') + 1).split(/[?#]/)[0] || 'image';
|
||||
syncThumbActive();
|
||||
}
|
||||
|
||||
function navigateLightbox(dir) {
|
||||
showLightboxImage(currentIndex + dir);
|
||||
function navigateLightbox(direction) {
|
||||
if (currentGallery.length < 2) return;
|
||||
showLightboxImage(currentIndex + direction);
|
||||
}
|
||||
|
||||
function closeLightbox() {
|
||||
if (!lightboxEl) return;
|
||||
if (!lightboxEl || !lightboxEl.classList.contains('is-open')) return;
|
||||
if (isAutoplay) toggleAutoplay();
|
||||
lightboxEl.classList.remove('is-open', 'is-zoomed', 'from-origin');
|
||||
document.body.style.overflow = '';
|
||||
lightboxEl.setAttribute('aria-hidden', 'true');
|
||||
document.body.style.overflow = previousBodyOverflow;
|
||||
document.body.classList.remove('aksrt-lightbox-open');
|
||||
lightboxThumbsWrap.hidden = true;
|
||||
if (document.fullscreenElement) {
|
||||
(document.exitFullscreen || document.webkitExitFullscreen || document.msExitFullscreen).call(document);
|
||||
lightboxImg.src = '';
|
||||
lightboxImg.alt = '';
|
||||
|
||||
var fullscreenElement = document.fullscreenElement || document.webkitFullscreenElement;
|
||||
var exit = document.exitFullscreen || document.webkitExitFullscreen;
|
||||
if (fullscreenElement && exit) exit.call(document);
|
||||
|
||||
if (lastTrigger && typeof lastTrigger.focus === 'function' && document.contains(lastTrigger)) {
|
||||
lastTrigger.focus({ preventScroll: true });
|
||||
}
|
||||
lastTrigger = null;
|
||||
}
|
||||
|
||||
function buildGallery(img) {
|
||||
var container = img.closest(GROUP_SEL);
|
||||
if (!container || container.closest('[data-no-lightbox],[data-aksrt-lightbox="0"]')) return null;
|
||||
|
||||
var gallery = [];
|
||||
var foundIndex = -1;
|
||||
container.querySelectorAll('img').forEach(function (candidate) {
|
||||
if (!candidate.matches(TRIGGER_SEL) || isNoLightbox(candidate)) return;
|
||||
var fullSrc = resolveFullUrl(candidate);
|
||||
var thumbSrc = resolveThumbUrl(candidate) || fullSrc;
|
||||
if (!fullSrc) return;
|
||||
|
||||
if (candidate === img) foundIndex = gallery.length;
|
||||
gallery.push({
|
||||
src: thumbSrc,
|
||||
thumbSrc: thumbSrc,
|
||||
fullSrc: fullSrc,
|
||||
caption: resolveCaption(candidate),
|
||||
});
|
||||
});
|
||||
|
||||
if (foundIndex < 0 || !gallery.length) return null;
|
||||
return { items: gallery, index: foundIndex };
|
||||
}
|
||||
|
||||
function openImage(img) {
|
||||
if (isNoLightbox(img)) return false;
|
||||
var gallery = buildGallery(img);
|
||||
if (!gallery) return false;
|
||||
var item = gallery.items[gallery.index];
|
||||
return openLightbox(item.fullSrc, item.caption, gallery.items, gallery.index, img);
|
||||
}
|
||||
|
||||
// Auto-bind: expanded trigger scope + exclusion rules
|
||||
function initLightbox() {
|
||||
document.addEventListener('click', function (e) {
|
||||
// Also support a[data-imgbox]
|
||||
var anchor = e.target.closest('a[data-imgbox]');
|
||||
if (anchor) {
|
||||
e.preventDefault();
|
||||
var href = anchor.getAttribute('href') || anchor.getAttribute('data-imgbox');
|
||||
openLightbox(href, '', [{ src: href, fullSrc: href, caption: '' }], 0, anchor);
|
||||
document.addEventListener('click', function (event) {
|
||||
if (!lightboxEnabled() || !(event.target instanceof Element)) return;
|
||||
|
||||
var anchor = event.target.closest(ANCHOR_TRIGGER_SEL);
|
||||
if (anchor && !anchor.closest(EXCLUDE_SEL)) {
|
||||
var anchorImage = anchor.querySelector('img');
|
||||
if (anchorImage && openImage(anchorImage)) {
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
var href = anchor.getAttribute('href') || '';
|
||||
if (IMAGE_URL_RE.test(href) && openLightbox(href, anchor.getAttribute('data-caption') || '', null, 0, anchor)) {
|
||||
event.preventDefault();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
var img = e.target.closest(TRIGGER_SEL);
|
||||
if (!img) return;
|
||||
if (img.width < 100 || img.height < 100) return;
|
||||
if (!lightboxEnabled() || isNoLightbox(img)) return;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
var container = img.closest(CONTAINER_SEL);
|
||||
if (!container) return;
|
||||
|
||||
var allImages = container.querySelectorAll('img');
|
||||
var gallery = [];
|
||||
var foundIndex = 0;
|
||||
|
||||
allImages.forEach(function (el) {
|
||||
if (el.width < 100 || el.height < 100) return;
|
||||
if (isNoLightbox(el)) return;
|
||||
var full = resolveFullUrl(el);
|
||||
var caption = el.alt || '';
|
||||
var figcaption = el.closest('figure') ? el.closest('figure').querySelector('figcaption') : null;
|
||||
if (figcaption) caption = figcaption.textContent;
|
||||
gallery.push({ src: el.dataset.src || el.src, fullSrc: full, caption: caption });
|
||||
if (el === img) foundIndex = gallery.length - 1;
|
||||
});
|
||||
|
||||
if (gallery.length > 0) {
|
||||
openLightbox(img.dataset.src || img.src, img.alt, gallery, foundIndex, img);
|
||||
}
|
||||
var img = event.target.closest(TRIGGER_SEL);
|
||||
if (img && openImage(img)) event.preventDefault();
|
||||
});
|
||||
}
|
||||
|
||||
// 暴露到全局
|
||||
window.AksrtLightbox = {
|
||||
open: openLightbox,
|
||||
close: closeLightbox,
|
||||
};
|
||||
|
||||
/* ============================================================
|
||||
* 2. 滚动方向感知
|
||||
* ============================================================ */
|
||||
// Scroll direction is now handled by aksrt-runtime.js body scroll bus
|
||||
// (body.scroll-down / body.scroll-up / body.body-scroll).
|
||||
// This stub syncs the legacy aksrt-* prefixed classes for backward compat.
|
||||
// Scroll direction is handled by aksrt-runtime.js. Keep the prefixed
|
||||
// classes in sync for the remaining CSS consumers.
|
||||
function initScrollDirection() {
|
||||
var body = document.body;
|
||||
|
||||
@@ -430,26 +542,13 @@
|
||||
}, 300);
|
||||
}
|
||||
|
||||
function onScroll() {
|
||||
window.addEventListener('scroll', function () {
|
||||
requestAnimationFrame(sync);
|
||||
}
|
||||
|
||||
window.addEventListener('scroll', onScroll, { passive: true });
|
||||
}, { passive: true });
|
||||
}
|
||||
|
||||
/* ============================================================
|
||||
* 3. 导航溢出折叠
|
||||
* 由 legacy main.js 的 navFolding 负责。
|
||||
* 此处不再重复实现,避免两套逻辑争抢 .aksrt-nav-more 节点
|
||||
* 触发 NotFoundError: insertBefore (moreLi 已被对方 remove)。
|
||||
* ============================================================ */
|
||||
|
||||
/* ============================================================
|
||||
* 初始化入口
|
||||
* ============================================================ */
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
initLightbox();
|
||||
initScrollDirection();
|
||||
});
|
||||
|
||||
})();
|
||||
@@ -1,8 +1,8 @@
|
||||
/**
|
||||
* AKSRT Page Template
|
||||
*
|
||||
* Handles template-scoped content interactions: lightbox,
|
||||
* expandable article bodies, and one-shot query cleanup banners.
|
||||
* Handles template-scoped content interactions: expandable article bodies
|
||||
* and one-shot query cleanup banners.
|
||||
*
|
||||
* @package AKSRT
|
||||
*/
|
||||
@@ -10,69 +10,6 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
function initLightbox() {
|
||||
var overlay = document.getElementById('lightbox-overlay');
|
||||
var content = document.querySelector(".wp-posts-content[data-aksrt-lightbox='1'], .entry-content[data-aksrt-lightbox='1']");
|
||||
if (!overlay || !content || overlay.dataset.aksrtLightboxBound === '1') return;
|
||||
|
||||
overlay.dataset.aksrtLightboxBound = '1';
|
||||
|
||||
var image = overlay.querySelector('.lightbox-img');
|
||||
var caption = overlay.querySelector('.lightbox-caption');
|
||||
var closeBtn = overlay.querySelector('.lightbox-close');
|
||||
|
||||
function close() {
|
||||
overlay.classList.remove('is-open');
|
||||
overlay.setAttribute('aria-hidden', 'true');
|
||||
document.body.style.overflow = '';
|
||||
if (image) {
|
||||
image.src = '';
|
||||
image.alt = '';
|
||||
}
|
||||
}
|
||||
|
||||
content.querySelectorAll('img').forEach(function (img) {
|
||||
var link = img.closest('a[href]');
|
||||
var linkHref = link ? link.href : '';
|
||||
var linksToImage = /\.(?:avif|gif|jpe?g|png|svg|webp)(?:[?#].*)?$/i.test(linkHref);
|
||||
if (img.closest('[data-no-lightbox]') || (link && !linksToImage)) return;
|
||||
|
||||
img.classList.add('aksrt-lightbox-target');
|
||||
img.addEventListener('click', function (event) {
|
||||
if (!image) return;
|
||||
if (linksToImage) event.preventDefault();
|
||||
|
||||
image.src = linksToImage
|
||||
? linkHref
|
||||
: (img.getAttribute('data-src') || img.getAttribute('data-lazy-src') || img.currentSrc || img.src);
|
||||
image.alt = img.alt || '';
|
||||
|
||||
if (caption) {
|
||||
var figure = img.closest('figure');
|
||||
var figureCaption = figure ? figure.querySelector('figcaption') : null;
|
||||
caption.textContent = img.alt || (figureCaption ? figureCaption.textContent : '') || '';
|
||||
}
|
||||
|
||||
overlay.classList.add('is-open');
|
||||
overlay.setAttribute('aria-hidden', 'false');
|
||||
document.body.style.overflow = 'hidden';
|
||||
if (closeBtn) closeBtn.focus();
|
||||
});
|
||||
});
|
||||
|
||||
overlay.addEventListener('click', function (event) {
|
||||
if (event.target === overlay || event.target === closeBtn || (event.target.closest && event.target.closest('.lightbox-close'))) {
|
||||
close();
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('keydown', function (event) {
|
||||
if (event.key === 'Escape' && overlay.classList.contains('is-open')) {
|
||||
close();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function initContentExpand() {
|
||||
// legacy-style: inject .read-more inside .limit-height and expand on click.
|
||||
document.querySelectorAll('.wp-posts-content.limit-height, .limit-height[data-nav]').forEach(function (content) {
|
||||
@@ -150,7 +87,6 @@
|
||||
}
|
||||
|
||||
function init() {
|
||||
initLightbox();
|
||||
initContentExpand();
|
||||
initFlashQueryCleanup();
|
||||
}
|
||||
|
||||
@@ -1,567 +0,0 @@
|
||||
(function ($, window) {
|
||||
'use strict';
|
||||
|
||||
var Miniimgbox = function (img_selector, container_selector) {
|
||||
return _Miniimgbox(img_selector, container_selector, Miniimgbox.options);
|
||||
};
|
||||
|
||||
Miniimgbox.options = {
|
||||
group: true,
|
||||
thumbs: true,
|
||||
down: true,
|
||||
play: true,
|
||||
zoom: true,
|
||||
full: true,
|
||||
exclude: '.no-imgbox,.avatar,.img-icon,.avatar-badge', //排除
|
||||
};
|
||||
|
||||
Miniimgbox.swiper = '';
|
||||
Miniimgbox.thumbs_swiper = '';
|
||||
window.Miniimgbox = Miniimgbox;
|
||||
|
||||
function _Miniimgbox(img_selector, container_selector, options) {
|
||||
var imgbox_calss = 'mini-imgbox imgbox';
|
||||
var imgbox_id = 'mini-imgbox';
|
||||
var data_key = 'imgbox_data';
|
||||
var imgbox_selector = '#' + imgbox_id;
|
||||
var _imgbox = $(imgbox_selector);
|
||||
var Miniimgbox = window.Miniimgbox;
|
||||
var imgbox_swiper = Miniimgbox.swiper;
|
||||
var imgbox_thumbs_swiper = Miniimgbox.thumbs_swiper;
|
||||
var _body = $('body');
|
||||
var _fixed = $('.nav-fixed header');
|
||||
|
||||
if (!options.group) {
|
||||
options.thumbs = false;
|
||||
}
|
||||
|
||||
init();
|
||||
|
||||
function init() {
|
||||
add_dom();
|
||||
|
||||
if (options.exclude) {
|
||||
img_selector += ':not(' + options.exclude + ')';
|
||||
}
|
||||
|
||||
var all_img_selector = container_selector ? container_selector + ' ' + img_selector : img_selector;
|
||||
container_selector = options.group ? container_selector : false;
|
||||
|
||||
setTimeout(function () {
|
||||
update_all_slide_data(img_selector, container_selector); //更新dom数据
|
||||
}, 1000);
|
||||
|
||||
//只绑定一次
|
||||
if (!_body.data('imgbox-ison-' + all_img_selector)) {
|
||||
_body.on('click', all_img_selector, function () {
|
||||
var _this = $(this);
|
||||
imgbox_open(_this, container_selector);
|
||||
});
|
||||
_body.data('imgbox-ison-' + all_img_selector, true);
|
||||
}
|
||||
}
|
||||
|
||||
function imgbox_open(_this, container_s) {
|
||||
var slide_lists = get_slide_lists(_this, container_s);
|
||||
|
||||
//没有则退出
|
||||
if (!slide_lists.slide) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (slide_lists.node_length > 1) {
|
||||
$('.imgbox-an .toggle-palay').show();
|
||||
} else {
|
||||
$('.imgbox-an .toggle-palay').hide();
|
||||
}
|
||||
|
||||
$(imgbox_selector + ' .swiper-imgbox .swiper-wrapper').html(slide_lists.slide);
|
||||
|
||||
if (options.thumbs) {
|
||||
$(imgbox_selector + ' .swiper-thumbsbox .swiper-wrapper').html(slide_lists.thumbs);
|
||||
}
|
||||
|
||||
var index = ~~_this.attr('imgbox-index') || 0;
|
||||
|
||||
setTimeout(function () {
|
||||
if (options.thumbs) {
|
||||
imgbox_thumbs_swiper.update();
|
||||
}
|
||||
imgbox_swiper.update();
|
||||
imgbox_swiper.slideTo(index, 2);
|
||||
imgbox_swiper.autoplay.stop();
|
||||
thumb_open();
|
||||
}, 16);
|
||||
|
||||
show(_this);
|
||||
}
|
||||
|
||||
function get_slide_lists(_this, container_s) {
|
||||
var data = _this.data(data_key);
|
||||
if (data) {
|
||||
return data;
|
||||
}
|
||||
|
||||
var _container = container_s ? $(_this.parents(container_s)[0]) : {};
|
||||
|
||||
if (_container.length) {
|
||||
var _data = _container.data(data_key);
|
||||
if (_data && _data.node_length == get_node_length(_container)) {
|
||||
return _data;
|
||||
}
|
||||
}
|
||||
|
||||
return update_slide_data(_this, _container);
|
||||
}
|
||||
|
||||
//获取节点数量
|
||||
function get_node_length(_container) {
|
||||
return _container.find(img_selector).length;
|
||||
}
|
||||
|
||||
function update_all_slide_data(img_selector, container_s) {
|
||||
if (container_s) {
|
||||
$(container_s).each(function () {
|
||||
var each_this = $(this);
|
||||
if (!each_this.data(data_key)) {
|
||||
update_slide_data(each_this.find(img_selector).eq(0), each_this);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$(img_selector).each(function () {
|
||||
var each_this = $(this);
|
||||
if (!each_this.data(data_key)) {
|
||||
update_slide_data(each_this, {});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//将数据保存到节点
|
||||
function update_slide_data(_this, _container) {
|
||||
var data = {
|
||||
slide: '',
|
||||
thumbs: '',
|
||||
length: 0,
|
||||
};
|
||||
|
||||
if (_container.length) {
|
||||
var index = 0;
|
||||
_container.find(img_selector).each(function (i) {
|
||||
if (i == 0) {
|
||||
index = 0;
|
||||
}
|
||||
|
||||
var each_this = $(this);
|
||||
if (!is_no(each_this)) {
|
||||
each_this.attr('imgbox-index', index);
|
||||
data.slide += get_slide(each_this);
|
||||
data.length = index + 1;
|
||||
//缩略图
|
||||
if (options.thumbs) data.thumbs += get_thumbs(each_this);
|
||||
index++;
|
||||
}
|
||||
});
|
||||
|
||||
data.node_length = get_node_length(_container);
|
||||
_container.data(data_key, data);
|
||||
} else {
|
||||
if (!is_no(_this) && !_this.find('img').length) {
|
||||
data.slide = get_slide(_this);
|
||||
data.length = index;
|
||||
if (!_this.attr('imgbox-no-cache')) {
|
||||
_this.data(data_key, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
//加载dom
|
||||
function add_dom() {
|
||||
if (_imgbox.length) return;
|
||||
|
||||
var swiper = '<div class="swiper-imgbox"><div class="swiper-wrapper"></div><div class="swiper-button-prev"></div><div class="swiper-button-next"></div><div class="abs-left counter-con"></div></div>';
|
||||
var thumbs_swiper = '<div class="swiper-thumbsbox"><div class="swiper-wrapper">' + '' + '</div><div class="swiper-button-prev"></div><div class="swiper-button-next"></div><div class="abs-center right-top"><i class="hide-but fa fas fa-angle-down em12"></i></div></div>';
|
||||
|
||||
var button = options.down ? '<a href="javascript:;" download class="img-down toggle-radius mr6" title="' + aksrt__('imgbox_download') + '"><i class="fa fas fa-download"></i></a>' : '';
|
||||
if (options.group) {
|
||||
button += options.play ? '<a href="javascript:;" class="toggle-palay toggle-radius mr6" title="' + aksrt__('imgbox_play') + '"><i class="fa fas fa-play"></i></a>' : '';
|
||||
if (options.thumbs) {
|
||||
button += '<a href="javascript:;" class="toggle-thumbs toggle-radius mr6" title="' + aksrt__('imgbox_view_more') + '"><i class="fa fas fa-th-large"></i></a>';
|
||||
swiper += thumbs_swiper;
|
||||
}
|
||||
}
|
||||
|
||||
button += options.zoom ? '<a href="javascript:;" class="toggle-zoom toggle-radius mr6" title="' + aksrt__('imgbox_toggle_zoom') + '"><i class="fa fas fa-search"></i></a>' : '';
|
||||
button += options.full ? '<a href="javascript:;" class="hide-sm toggle-full toggle-radius mr6" title="' + aksrt__('imgbox_toggle_full') + '"><i class="fa fas fa-expand"></i></a>' : '';
|
||||
button += '<a href="javascript:;" title="' + aksrt__('close') + '" class="icon-close toggle-radius"><svg viewBox="0 0 1024 1024" class="icon em12"><path d="M573.44 512.128l237.888 237.696a43.328 43.328 0 0 1 0 59.712 43.392 43.392 0 0 1-59.712 0L513.728 571.84 265.856 819.712a44.672 44.672 0 0 1-61.568 0 44.672 44.672 0 0 1 0-61.568L452.16 510.272 214.208 272.448a43.328 43.328 0 0 1 0-59.648 43.392 43.392 0 0 1 59.712 0l237.952 237.76 246.272-246.272a44.672 44.672 0 0 1 61.568 0 44.672 44.672 0 0 1 0 61.568L573.44 512.128z"></path></svg></a>';
|
||||
|
||||
_body.append('<div class="' + imgbox_calss + '" id="' + imgbox_id + '"><div class="modal-backdrop imgbox-bg"></div><div class="imgbox-an">' + button + '</div>' + swiper + '</div>');
|
||||
|
||||
_imgbox = $(imgbox_selector);
|
||||
|
||||
new_swiper();
|
||||
imgbox_on();
|
||||
}
|
||||
|
||||
function new_swiper() {
|
||||
var selector = imgbox_selector + ' .swiper-imgbox';
|
||||
var speed = ~~(($(window).width() + 1600) / 600);
|
||||
var option = {};
|
||||
// option['init'] = false;
|
||||
option['mousewheel'] = {
|
||||
speed: 10,
|
||||
};
|
||||
option['speed'] = speed * 100;
|
||||
|
||||
option['zoom'] = {
|
||||
maxRatio: $(window).width() < 769 ? 3 : 2,
|
||||
};
|
||||
|
||||
option['autoplay'] = {
|
||||
disableOnInteraction: false,
|
||||
};
|
||||
option['grabCursor'] = true;
|
||||
option['navigation'] = {
|
||||
nextEl: selector + ' .swiper-button-next',
|
||||
prevEl: selector + ' .swiper-button-prev',
|
||||
};
|
||||
option['keyboard'] = {
|
||||
enabled: !0,
|
||||
onlyInViewport: !1,
|
||||
};
|
||||
option['pagination'] = {
|
||||
el: selector + ' .counter-con',
|
||||
type: 'custom',
|
||||
renderCustom: function (swiper, current, total) {
|
||||
if (total > 1) {
|
||||
return '<badge class="b-black counter">' + current + '/' + total + '</badge>';
|
||||
}
|
||||
return '';
|
||||
},
|
||||
};
|
||||
if (options.thumbs && options.group) {
|
||||
new_thumbs_swiper();
|
||||
option['thumbs'] = {
|
||||
swiper: imgbox_thumbs_swiper,
|
||||
autoScrollOffset: ~~(speed / 1.6),
|
||||
};
|
||||
}
|
||||
|
||||
Miniimgbox.swiper = imgbox_swiper = new Swiper(selector, option);
|
||||
}
|
||||
|
||||
function new_thumbs_swiper() {
|
||||
var selector = imgbox_selector + ' .swiper-thumbsbox';
|
||||
var option = {};
|
||||
// option['init'] = true;
|
||||
option['watchSlidesVisibility'] = true; //防止不可点击
|
||||
option['navigation'] = {
|
||||
nextEl: selector + ' .swiper-button-next',
|
||||
prevEl: selector + ' .swiper-button-prev',
|
||||
};
|
||||
option.slidesPerView = 'auto';
|
||||
option.freeMode = true;
|
||||
option.freeModeSticky = true;
|
||||
Miniimgbox.thumbs_swiper = imgbox_thumbs_swiper = new Swiper(selector, option);
|
||||
}
|
||||
|
||||
//绑定执行
|
||||
function imgbox_on() {
|
||||
//仅绑定一次
|
||||
if (_imgbox.data('is_on')) return;
|
||||
|
||||
//下滑关闭
|
||||
touch_close();
|
||||
|
||||
//关闭灯箱
|
||||
_imgbox.on('click', '.img-close,.imgbox-bg,.imgbox-an .icon-close', close);
|
||||
|
||||
//切换thumb
|
||||
_imgbox.on('click', '.imgbox-an .toggle-thumbs,.hide-but', function () {
|
||||
_imgbox.toggleClass('show-thumb');
|
||||
});
|
||||
|
||||
//下载图片
|
||||
_imgbox.on('click', '.imgbox-an .img-down', function () {
|
||||
var _this = $(this);
|
||||
var img = _imgbox.find('.swiper-imgbox .swiper-slide-active img');
|
||||
var src = img.attr('data-src') || img.attr('src');
|
||||
var down_name = src.substring(src.lastIndexOf('/') + 1) || src;
|
||||
|
||||
_this.attr('href', src).attr('download', down_name);
|
||||
});
|
||||
|
||||
//播放图片
|
||||
_imgbox.on('click', '.imgbox-an .toggle-palay', function () {
|
||||
var _this = $(this);
|
||||
|
||||
_this.hasClass('is-play') ? imgbox_swiper.autoplay.stop() : imgbox_swiper.autoplay.start();
|
||||
_this.toggleClass('is-play');
|
||||
});
|
||||
|
||||
//按钮切换放大缩小
|
||||
_imgbox.on('click', '.imgbox-an .toggle-zoom', function () {
|
||||
var _this = $(this);
|
||||
imgbox_swiper.zoom.toggle();
|
||||
_this.toggleClass('is-zoom');
|
||||
});
|
||||
|
||||
//切换全屏
|
||||
_imgbox.on('click', '.imgbox-an .toggle-full', function () {
|
||||
if (!document.fullscreenElement) {
|
||||
//进入页面全屏
|
||||
full_in();
|
||||
} else {
|
||||
full_out();
|
||||
}
|
||||
});
|
||||
|
||||
_imgbox.data('is_on', true);
|
||||
}
|
||||
|
||||
//全屏
|
||||
function full_in() {
|
||||
var docElm = document.documentElement;
|
||||
if (docElm.requestFullscreen) {
|
||||
docElm.requestFullscreen();
|
||||
} else if (docElm.msRequestFullscreen) {
|
||||
docElm.msRequestFullscreen();
|
||||
} else if (docElm.mozRequestFullScreen) {
|
||||
docElm.mozRequestFullScreen();
|
||||
} else if (docElm.webkitRequestFullScreen) {
|
||||
docElm.webkitRequestFullScreen();
|
||||
}
|
||||
$(imgbox_selector + ' .imgbox-an .toggle-full .fa')
|
||||
.removeClass('fa-expand')
|
||||
.addClass('fa-compress');
|
||||
$(imgbox_selector + '.show').addClass('full-screen'); //全屏
|
||||
}
|
||||
|
||||
//退出全屏
|
||||
function full_out() {
|
||||
if (document.fullscreenElement) {
|
||||
if (document.exitFullscreen) {
|
||||
document.exitFullscreen();
|
||||
} else if (document.msExitFullscreen) {
|
||||
document.msExitFullscreen();
|
||||
} else if (document.mozCancelFullScreen) {
|
||||
document.mozCancelFullScreen();
|
||||
} else if (document.webkitCancelFullScreen) {
|
||||
document.webkitCancelFullScreen();
|
||||
}
|
||||
}
|
||||
|
||||
$(imgbox_selector + ' .imgbox-an .toggle-full .fa')
|
||||
.removeClass('fa-compress')
|
||||
.addClass('fa-expand');
|
||||
_imgbox.removeClass('full-screen'); //全屏
|
||||
}
|
||||
|
||||
//链接处理
|
||||
function link_replace(link) {
|
||||
return link.indexOf('base64,') == -1 && link.length < 300 ? link.replace(/(.*\/)(.*)(-\d+x\d+\.)(.*)/g, '$1$2.$4').replace(/\??x-oss-process(.*)/, '') : link;
|
||||
}
|
||||
|
||||
//定位show_style
|
||||
function show_style(_this) {
|
||||
var offset = _this.offset();
|
||||
var offset_top = offset.top;
|
||||
var offset_left = offset.left;
|
||||
var scrollTop = $(document).scrollTop();
|
||||
var height = _this.height();
|
||||
var width = _this.width();
|
||||
|
||||
var s_top = offset_top - scrollTop + height / 2;
|
||||
var s_left = offset_left + width / 2;
|
||||
|
||||
_imgbox.attr('style', '--imgbox-origin-top:' + s_top + 'px;--imgbox-origin-left:' + s_left + 'px;');
|
||||
}
|
||||
|
||||
function thumb_open() {
|
||||
var _thumb_btn = $(imgbox_selector + ' .imgbox-an .toggle-thumbs,.hide-but');
|
||||
|
||||
if (options.thumbs && _thumb_btn.length) {
|
||||
if (imgbox_swiper.slides.length > 1) {
|
||||
_thumb_btn.show();
|
||||
} else {
|
||||
_imgbox.removeClass('show-thumb');
|
||||
_thumb_btn.hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function checkScrollbar() {
|
||||
var fullWindowWidth = window.innerWidth;
|
||||
if (!fullWindowWidth) {
|
||||
// 兼容IE8
|
||||
var documentElementRect = document.documentElement.getBoundingClientRect();
|
||||
fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);
|
||||
}
|
||||
return document.body.clientWidth < fullWindowWidth;
|
||||
}
|
||||
|
||||
function measureScrollbar() {
|
||||
var scrollbarWidthData = _body.data('scrollbar-width');
|
||||
if (scrollbarWidthData !== undefined) {
|
||||
return scrollbarWidthData;
|
||||
}
|
||||
// thx walsh
|
||||
var scrollDiv = document.createElement('div');
|
||||
scrollDiv.className = 'modal-scrollbar-measure';
|
||||
_body.append(scrollDiv);
|
||||
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
|
||||
_body[0].removeChild(scrollDiv);
|
||||
_body.data('scrollbar-width', scrollbarWidth);
|
||||
return scrollbarWidth;
|
||||
}
|
||||
|
||||
function setScrollbar() {
|
||||
var bodyPad = parseInt(_body.css('padding-right') || 0, 10);
|
||||
var scrollbarWidth = measureScrollbar();
|
||||
if (checkScrollbar()) {
|
||||
_body.css('padding-right', bodyPad + scrollbarWidth);
|
||||
_fixed.each(function (index, element) {
|
||||
var actualPadding = element.style.paddingRight;
|
||||
var calculatedPadding = $(element).css('padding-right');
|
||||
$(element)
|
||||
.data('padding-right', actualPadding)
|
||||
.css('transition', 'none')
|
||||
.css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px');
|
||||
});
|
||||
}
|
||||
}
|
||||
//显示
|
||||
function show(_this) {
|
||||
setScrollbar();
|
||||
_body.addClass('imgbox-show');
|
||||
//$(".modal").modal("hide");
|
||||
show_style(_this);
|
||||
_imgbox.addClass('show').removeClass('hide');
|
||||
}
|
||||
|
||||
function close() {
|
||||
_body.removeClass('imgbox-show').css('padding-right', '');
|
||||
//等待动画结束,延迟
|
||||
_fixed.css('padding-right', '');
|
||||
setTimeout(function () {
|
||||
_fixed.css('transition', '');
|
||||
}, 10);
|
||||
_imgbox.addClass('hideing').removeClass('show');
|
||||
full_out(); //退出全屏
|
||||
|
||||
setTimeout(function () {
|
||||
_imgbox.removeClass('hideing').addClass('hide').attr('style', '');
|
||||
|
||||
$('.toggle-palay.is-play').removeClass('is-play'); //停止播放
|
||||
|
||||
try {
|
||||
imgbox_swiper.zoom.out(); //恢复放大缩小
|
||||
imgbox_swiper.autoplay.stop(); //停止播放
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
|
||||
//恢复下滑关闭
|
||||
$(imgbox_selector + ' .swiper-close').css({
|
||||
opacity: '',
|
||||
transform: '',
|
||||
});
|
||||
}, 300);
|
||||
}
|
||||
|
||||
//滑动关闭
|
||||
function touch_close() {
|
||||
_imgbox.on('touchmove pointermove MSPointerMove', function (e) {
|
||||
e.preventDefault ? e.preventDefault() : (e.returnValue = !1);
|
||||
});
|
||||
|
||||
_imgbox.minitouch({
|
||||
direction: 'bottom',
|
||||
selector: '.swiper-close',
|
||||
depreciation: 100,
|
||||
onStart: false,
|
||||
stop: function (_e, _this) {
|
||||
var scale = _this
|
||||
.find('img')
|
||||
.css('transform')
|
||||
.replace(/[^0-9\-,]/g, '')
|
||||
.split(',')[0];
|
||||
return scale && scale > 1;
|
||||
},
|
||||
onIng: function (_e, _this, distanceX, distanceY) {
|
||||
var set_opacity = (150 - distanceY) / 80;
|
||||
set_opacity = set_opacity < 1 && set_opacity > 0.2 && set_opacity;
|
||||
_this.css('opacity', set_opacity);
|
||||
},
|
||||
inEnd: function (_e, _this) {
|
||||
_this.css({
|
||||
opacity: '',
|
||||
});
|
||||
},
|
||||
onEnd: function (_e, _this) {
|
||||
_imgbox.attr('style', '--imgbox-origin-top:' + t_h + 'px;--imgbox-origin-left:conter;');
|
||||
var t_h = _this.height();
|
||||
_this.css({
|
||||
transform: 'translate3D(0px, ' + t_h + 'px, 0px)',
|
||||
transition: '.2s linear',
|
||||
opacity: 0,
|
||||
});
|
||||
// close();
|
||||
setTimeout(close, 150);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function get_slide(each_this) {
|
||||
var thumbs_src = each_this.attr('src') || each_this.attr('box-img');
|
||||
var data_src = each_this.attr('data-src');
|
||||
|
||||
if (!thumbs_src && !data_src) return '';
|
||||
|
||||
var full_src = each_this.attr('data-full-url') || link_replace(data_src || thumbs_src);
|
||||
var main_img = '<img src="' + thumbs_src + '" data-src="' + full_src + '" class="lazyload"><div class="swiper-lazy-preloader"></div>';
|
||||
var main_img_html = '<div class="swiper-slide"><div class="swiper-close"><div class="swiper-zoom-container"><div class="absolute img-close"></div>' + main_img + '</div></div></div>';
|
||||
return main_img_html;
|
||||
}
|
||||
|
||||
function get_thumbs(each_this) {
|
||||
var thumbs_src_b = each_this.attr('data-src') || each_this.attr('src');
|
||||
if (!thumbs_src_b) return '';
|
||||
var thumbs_img = '<img data-src="' + thumbs_src_b + '" class="lazyload fit-cover">';
|
||||
var thumbs_img_html = '<div class="swiper-slide">' + thumbs_img + '</div>';
|
||||
return thumbs_img_html;
|
||||
}
|
||||
|
||||
function is_no(_this) {
|
||||
//判断上级是否有链接,且不是链接到原图
|
||||
var src = _this.attr('data-src') || _this.attr('src');
|
||||
if (!src) return false;
|
||||
|
||||
src = link_replace(src);
|
||||
var parent = _this.parent('a');
|
||||
if (!parent.length) return false;
|
||||
var href = parent.attr('box-img') || parent.attr('href');
|
||||
href = link_replace(href);
|
||||
return href && (href.indexOf(src) == -1 || src.indexOf(href) == -1);
|
||||
}
|
||||
}
|
||||
|
||||
tbquire(['swiper'], function () {
|
||||
$('link#swiper').length || $('head').append('<link type="text/css" id="swiper" rel="stylesheet" href="' + _win.uri + '/css/swiper.min.css?ver=' + _win.ver + '">');
|
||||
|
||||
Miniimgbox.options.group = _win.imgbox_type === 'group';
|
||||
Miniimgbox.options.thumbs = _win.imgbox_thumbs;
|
||||
Miniimgbox.options.down = _win.imgbox_down;
|
||||
Miniimgbox.options.play = _win.imgbox_play;
|
||||
Miniimgbox.options.zoom = _win.imgbox_zoom;
|
||||
Miniimgbox.options.full = _win.imgbox_full;
|
||||
|
||||
Miniimgbox('.alone-imgbox-img,a[data-imgbox]');
|
||||
Miniimgbox('img', '.wp-posts-content');
|
||||
Miniimgbox('img', '.imgbox-container');
|
||||
Miniimgbox('.box-img', '.comment-content');
|
||||
});
|
||||
})(jQuery, window);
|
||||
Vendored
-1
@@ -1 +0,0 @@
|
||||
(function(s,b){"use strict";var l=function(m,f){return E(m,f,l.options)};l.options={group:!0,thumbs:!0,down:!0,play:!0,zoom:!0,full:!0,exclude:".no-imgbox,.avatar,.img-icon,.avatar-badge"},l.swiper="",l.thumbs_swiper="",b.Miniimgbox=l;function E(m,f,n){var M="mini-imgbox imgbox",y="mini-imgbox",p="imgbox_data",u="#"+y,r=s(u),v=b.Miniimgbox,g=v.swiper,h=v.thumbs_swiper,d=s("body"),x=s(".nav-fixed header");n.group||(n.thumbs=!1),q();function q(){j(),n.exclude&&(m+=":not("+n.exclude+")");var e=f?f+" "+m:m;f=n.group?f:!1,setTimeout(function(){T(m,f)},1e3),d.data("imgbox-ison-"+e)||(d.on("click",e,function(){var i=s(this);W(i,f)}),d.data("imgbox-ison-"+e,!0))}function W(e,i){var t=R(e,i);if(t.slide){t.node_length>1?s(".imgbox-an .toggle-palay").show():s(".imgbox-an .toggle-palay").hide(),s(u+" .swiper-imgbox .swiper-wrapper").html(t.slide),n.thumbs&&s(u+" .swiper-thumbsbox .swiper-wrapper").html(t.thumbs);var a=~~e.attr("imgbox-index")||0;setTimeout(function(){n.thumbs&&h.update(),g.update(),g.slideTo(a,2),g.autoplay.stop(),L()},16),X(e)}}function R(e,i){var t=e.data(p);if(t)return t;var a=i?s(e.parents(i)[0]):{};if(a.length){var o=a.data(p);if(o&&o.node_length==C(a))return o}return w(e,a)}function C(e){return e.find(m).length}function T(e,i){i?s(i).each(function(){var t=s(this);t.data(p)||w(t.find(e).eq(0),t)}):s(e).each(function(){var t=s(this);t.data(p)||w(t,{})})}function w(e,i){var t={slide:"",thumbs:"",length:0};if(i.length){var a=0;i.find(m).each(function(o){o==0&&(a=0);var c=s(this);F(c)||(c.attr("imgbox-index",a),t.slide+=S(c),t.length=a+1,n.thumbs&&(t.thumbs+=G(c)),a++)}),t.node_length=C(i),i.data(p,t)}else!F(e)&&!e.find("img").length&&(t.slide=S(e),t.length=a,e.attr("imgbox-no-cache")||e.data(p,t));return t}function j(){if(!r.length){var e='<div class="swiper-imgbox"><div class="swiper-wrapper"></div><div class="swiper-button-prev"></div><div class="swiper-button-next"></div><div class="abs-left counter-con"></div></div>',i='<div class="swiper-thumbsbox"><div class="swiper-wrapper"></div><div class="swiper-button-prev"></div><div class="swiper-button-next"></div><div class="abs-center right-top"><i class="hide-but fa fas fa-angle-down em12"></i></div></div>',t=n.down?'<a href="javascript:;" download class="img-down toggle-radius mr6" title="'+aksrt__("imgbox_download")+'"><i class="fa fas fa-download"></i></a>':"";n.group&&(t+=n.play?'<a href="javascript:;" class="toggle-palay toggle-radius mr6" title="'+aksrt__("imgbox_play")+'"><i class="fa fas fa-play"></i></a>':"",n.thumbs&&(t+='<a href="javascript:;" class="toggle-thumbs toggle-radius mr6" title="'+aksrt__("imgbox_view_more")+'"><i class="fa fas fa-th-large"></i></a>',e+=i)),t+=n.zoom?'<a href="javascript:;" class="toggle-zoom toggle-radius mr6" title="'+aksrt__("imgbox_toggle_zoom")+'"><i class="fa fas fa-search"></i></a>':"",t+=n.full?'<a href="javascript:;" class="hide-sm toggle-full toggle-radius mr6" title="'+aksrt__("imgbox_toggle_full")+'"><i class="fa fas fa-expand"></i></a>':"",t+='<a href="javascript:;" title="'+aksrt__("close")+'" class="icon-close toggle-radius"><svg viewBox="0 0 1024 1024" class="icon em12"><path d="M573.44 512.128l237.888 237.696a43.328 43.328 0 0 1 0 59.712 43.392 43.392 0 0 1-59.712 0L513.728 571.84 265.856 819.712a44.672 44.672 0 0 1-61.568 0 44.672 44.672 0 0 1 0-61.568L452.16 510.272 214.208 272.448a43.328 43.328 0 0 1 0-59.648 43.392 43.392 0 0 1 59.712 0l237.952 237.76 246.272-246.272a44.672 44.672 0 0 1 61.568 0 44.672 44.672 0 0 1 0 61.568L573.44 512.128z"></path></svg></a>',d.append('<div class="'+M+'" id="'+y+'"><div class="modal-backdrop imgbox-bg"></div><div class="imgbox-an">'+t+"</div>"+e+"</div>"),r=s(u),O(),I()}}function O(){var e=u+" .swiper-imgbox",i=~~((s(b).width()+1600)/600),t={};t.mousewheel={speed:10},t.speed=i*100,t.zoom={maxRatio:s(b).width()<769?3:2},t.autoplay={disableOnInteraction:!1},t.grabCursor=!0,t.navigation={nextEl:e+" .swiper-button-next",prevEl:e+" .swiper-button-prev"},t.keyboard={enabled:!0,onlyInViewport:!1},t.pagination={el:e+" .counter-con",type:"custom",renderCustom:function(a,o,c){return c>1?'<badge class="b-black counter">'+o+"/"+c+"</badge>":""}},n.thumbs&&n.group&&(D(),t.thumbs={swiper:h,autoScrollOffset:~~(i/1.6)}),v.swiper=g=new Swiper(e,t)}function D(){var e=u+" .swiper-thumbsbox",i={};i.watchSlidesVisibility=!0,i.navigation={nextEl:e+" .swiper-button-next",prevEl:e+" .swiper-button-prev"},i.slidesPerView="auto",i.freeMode=!0,i.freeModeSticky=!0,v.thumbs_swiper=h=new Swiper(e,i)}function I(){r.data("is_on")||(A(),r.on("click",".img-close,.imgbox-bg,.imgbox-an .icon-close",z),r.on("click",".imgbox-an .toggle-thumbs,.hide-but",function(){r.toggleClass("show-thumb")}),r.on("click",".imgbox-an .img-down",function(){var e=s(this),i=r.find(".swiper-imgbox .swiper-slide-active img"),t=i.attr("data-src")||i.attr("src"),a=t.substring(t.lastIndexOf("/")+1)||t;e.attr("href",t).attr("download",a)}),r.on("click",".imgbox-an .toggle-palay",function(){var e=s(this);e.hasClass("is-Line truncated
|
||||
@@ -58,9 +58,9 @@ tbquire.config({
|
||||
'spark-md5' : 'libs/spark-md5.min',
|
||||
'translate' : 'libs/translate.min',
|
||||
'waterfall' : 'waterfall.min',
|
||||
'enlighterjs' : 'enlighter/enlighterjs.min',
|
||||
'imgbox' : 'imgbox.min',
|
||||
'section-navs' : 'section-navs.min',
|
||||
'enlighterjs' : 'enlighter/enlighterjs.min',
|
||||
'section-navs' : 'section-navs.min',
|
||||
|
||||
'poster-share' : 'poster-share.min',
|
||||
'comment' : 'comment.min',
|
||||
'page-template' : 'page-template.min',
|
||||
|
||||
@@ -2504,9 +2504,6 @@ function z_auto_fun() {
|
||||
theme: _win.highlight_zt,
|
||||
});
|
||||
});
|
||||
|
||||
//图片灯箱
|
||||
_win.imgbox && jQuery('.alone-imgbox-img,a[data-imgbox],.comment-content .box-img,.wp-posts-content img,.imgbox-container').length && tbquire(['imgbox']);
|
||||
}
|
||||
|
||||
//页面滚动监听函数
|
||||
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
jQuery.cookie=function(e,o,t){if(o===void 0){var i=null;if(document.cookie&&document.cookie!="")for(var r=document.cookie.split(";"),n=0;n<r.length;n++){var c=jQuery.trim(r[n]);if(c.substring(0,e.length+1)==e+"="){i=decodeURIComponent(c.substring(e.length+1));break}}return i}t=t||{},o===null&&(o="",t.expires=-1);var a="";if(t.expires&&(typeof t.expires=="number"||t.expires.toUTCString)){var l2;typeof t.expires=="number"?(l2=new Date,l2.setTime(l2.getTime()+24*t.expires*60*60*1e3)):l2=t.expires,a="; expires="+l2.toUTCString()}var u=t.path?"; path="+t.path:"",s=t.domain?"; domain="+t.domain:"",m=t.secure?"; secure":"";document.cookie=[e,"=",encodeURIComponent(o),a,u,s,m].join("")};var lcs={get:function(e){return window.localStorage?localStorage.getItem(e):jQuery.cookie(e)},set:function(e,o){window.localStorage?localStorage[e]=o:jQuery.cookie(e,o)},remove:function(e){window.localStorage?localStorage.removeItem(e):jQuery.cookie(e,"")}};function aksrt__(key){var map=window._win&&window._win.i18n;return map&&Object.prototype.hasOwnProperty.call(map,key)?map[key]:key}function aksrt_is_fatal_error_response(text){return text&&(text.indexOf("Fatal error")>-1||text.indexOf("致命错误")>-1)}function aksrt_sprintf(key){var args=Array.prototype.slice.call(arguments,1),str=aksrt__(key),autoIndex=0;return str.replace(/%(\d+\$)?s/g,function(match,num){var idx=num?parseInt(num,10)-1:autoIndex++;return args[idx]!==void 0&&args[idx]!==null?args[idx]:match})}(function(window2,factory){var lazySizes=factory(window2,window2.document,Date);window2.lazySizes=lazySizes,typeof module=="object"&&module.exports&&(module.exports=lazySizes)})(typeof window<"u"?window:{},function(window2,document2,Date2){"use strict";var lazysizes,lazySizesCfg;if((function(){var prop,lazySizesDefaults={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",loadafterClass:"lazyloadafter",errorClass:"lazyerror",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125};lazySizesCfg=window2.lazySizesConfig||window2.lazysizesConfig||{};for(prop in lazySizesDefaults)prop in lazySizesCfg||(lazySizesCfg[prop]=lazySizesDefaults[prop])})(),!document2||!document2.getElementsByClassName)return{init:function(){},cfg:lazySizesCfg,noSupport:!0};var docElem=document2.documentElement,supportPicture=window2.HTMLPictureElement,_addEventListener="addEventListener",_getAttribute="getAttribute",addEventListener=window2[_addEventListener].bind(window2),setTimeout2=window2.setTimeout,requestAnimationFrame2=window2.requestAnimationFrame||setTimeout2,requestIdleCallback=window2.requestIdleCallback,regPicture=/^picture$/i,loadEvents=["load","error","lazyincluded","_lazyloaded"],regClassCache={},forEach=Array.prototype.forEach,hasClass=function(ele,cls){return regClassCache[cls]||(regClassCache[cls]=new RegExp("(\\s|^)"+cls+"(\\s|$)")),regClassCache[cls].test(ele[_getAttribute]("class")||"")&®ClassCache[cls]},addClass=function(ele,cls){hasClass(ele,cls)||ele.setAttribute("class",(ele[_getAttribute]("class")||"").trim()+" "+cls)},removeClass=function(ele,cls){var reg2;(reg2=hasClass(ele,cls))&&ele.setAttribute("class",(ele[_getAttribute]("class")||"").replace(reg2," "))},addRemoveLoadEvents=function(dom,fn,add){var action=add?_addEventListener:"removeEventListener";add&&addRemoveLoadEvents(dom,fn),loadEvents.forEach(function(evt){dom[action](evt,fn)})},triggerEvent=function(elem,name,detail,noBubbles,noCancelable){var event=document2.createEvent("Event");return detail||(detail={}),detail.instance=lazysizes,event.initEvent(name,!noBubbles,!noCancelable),event.detail=detail,elem.dispatchEvent(event),event},updatePolyfill=function(el,full){var polyfill;!supportPicture&&(polyfill=window2.picturefill||lazySizesCfg.pf)?(full&&full.src&&!el[_getAttribute]("srcset")&&el.setAttribute("srcset",full.src),polyfill({reevaluate:!0,elements:[el]})):full&&full.src&&(el.src=full.src)},getCSS=function(elem,style){return(getComputedStyle(elem,null)||{})[style]},getWidth=function(elem,parent,width){for(width=width||elem.offsetWidth;width<lazySizesCfg.minSize&&parent&&!elem._lazysizesWidth;)width=parent.offsetWidth,parent=parent.parentNode;return width},rAF=(function(){var running,waiting,firstFns=[],secondFns=[],fns=firstFns,run=function(){var runFns=fns;for(fns=firstFns.length?secondFns:firstFns,running=!0,waiting=!1;runFns.length;)runFns.shift()();running=!1},rafBatch=function(fn,queue){running&&!queue?fn.apply(this,arguments):(fns.push(fn),waiting||(waiting=!0,(document2.hidden?setTimeout2:requestAnimationFrame2)(run)))};return rafBatch._lsFlush=run,rafBatch})(),rAFIt=function(fn,simple){return simple?function(){rAF(fn)}:function(){var that=this,args=arguments;rAF(function(){fn.apply(that,args)})}},throttle2=function(fn){var running,lastTime=0,gDelay=lazySizesCfg.throttleDelay,rICTimeout=lazySizesCfLine truncated
|
||||
jQuery.cookie=function(e,a,t){if(a===void 0){var r=null;if(document.cookie&&document.cookie!="")for(var n=document.cookie.split(";"),i=0;i<n.length;i++){var s=jQuery.trim(n[i]);if(s.substring(0,e.length+1)==e+"="){r=decodeURIComponent(s.substring(e.length+1));break}}return r}t=t||{},a===null&&(a="",t.expires=-1);var o="";if(t.expires&&(typeof t.expires=="number"||t.expires.toUTCString)){var d;typeof t.expires=="number"?(d=new Date,d.setTime(d.getTime()+24*t.expires*60*60*1e3)):d=t.expires,o="; expires="+d.toUTCString()}var u=t.path?"; path="+t.path:"",c=t.domain?"; domain="+t.domain:"",l=t.secure?"; secure":"";document.cookie=[e,"=",encodeURIComponent(a),o,u,c,l].join("")};var lcs={get:function(e){return window.localStorage?localStorage.getItem(e):jQuery.cookie(e)},set:function(e,a){window.localStorage?localStorage[e]=a:jQuery.cookie(e,a)},remove:function(e){window.localStorage?localStorage.removeItem(e):jQuery.cookie(e,"")}};function aksrt__(e){var a=window._win&&window._win.i18n;return a&&Object.prototype.hasOwnProperty.call(a,e)?a[e]:e}function aksrt_is_fatal_error_response(e){return e&&(e.indexOf("Fatal error")>-1||e.indexOf("致命错误")>-1)}function aksrt_sprintf(e){var a=Array.prototype.slice.call(arguments,1),t=aksrt__(e),r=0;return t.replace(/%(\d+\$)?s/g,function(n,i){var s=i?parseInt(i,10)-1:r++;return a[s]!==void 0&&a[s]!==null?a[s]:n})}(function(e,a){var t=a(e,e.document,Date);e.lazySizes=t,typeof module=="object"&&module.exports&&(module.exports=t)})(typeof window<"u"?window:{},function(a,t,r){"use strict";var n,i;if((function(){var w,y={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",loadafterClass:"lazyloadafter",errorClass:"lazyerror",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125};i=a.lazySizesConfig||a.lazysizesConfig||{};for(w in y)w in i||(i[w]=y[w])})(),!t||!t.getElementsByClassName)return{init:function(){},cfg:i,noSupport:!0};var s=t.documentElement,o=a.HTMLPictureElement,d="addEventListener",u="getAttribute",c=a[d].bind(a),l=a.setTimeout,h=a.requestAnimationFrame||l,f=a.requestIdleCallback,p=/^picture$/i,g=["load","error","lazyincluded","_lazyloaded"],v={},b=Array.prototype.forEach,_=function(w,y){return v[y]||(v[y]=new RegExp("(\\s|^)"+y+"(\\s|$)")),v[y].test(w[u]("class")||"")&&v[y]},Q=function(w,y){_(w,y)||w.setAttribute("class",(w[u]("class")||"").trim()+" "+y)},j=function(w,y){var k;(k=_(w,y))&&w.setAttribute("class",(w[u]("class")||"").replace(k," "))},C=function(w,y,k){var L=k?d:"removeEventListener";k&&C(w,y),g.forEach(function(q){w[L](q,y)})},T=function(w,y,k,L,q){var z=t.createEvent("Event");return k||(k={}),k.instance=n,z.initEvent(y,!L,!q),z.detail=k,w.dispatchEvent(z),z},F=function(w,y){var k;!o&&(k=a.picturefill||i.pf)?(y&&y.src&&!w[u]("srcset")&&w.setAttribute("srcset",y.src),k({reevaluate:!0,elements:[w]})):y&&y.src&&(w.src=y.src)},X=function(w,y){return(getComputedStyle(w,null)||{})[y]},Z=function(w,y,k){for(k=k||w.offsetWidth;k<i.minSize&&y&&!w._lazysizesWidth;)k=y.offsetWidth,y=y.parentNode;return k},Y=(function(){var w,y,k=[],L=[],q=k,z=function(){var E=q;for(q=k.length?L:k,w=!0,y=!1;E.length;)E.shift()();w=!1},O=function(E,A){w&&!A?E.apply(this,arguments):(q.push(E),y||(y=!0,(t.hidden?l:h)(z)))};return O._lsFlush=z,O})(),G=function(w,y){return y?function(){Y(w)}:function(){var k=this,L=arguments;Y(function(){w.apply(k,L)})}},pe=function(w){var y,k=0,L=i.throttleDelay,q=i.ricTimeout,z=function(){y=!1,k=r.now(),w()},O=f&&q>49?function(){f(z,{timeout:q}),q!==i.ricTimeout&&(q=i.ricTimeout)}:G(function(){l(z)},!0);return function(E){var A;(E=E===!0)&&(q=33),!y&&(y=!0,A=L-(r.now()-k),A<0&&(A=0),E||A<9?O():l(O,A))}},oe=function(w){var y,k,L=99,q=function(){y=null,w()},z=function(){var O=r.now()-k;O<L?l(z,L-O):(f||q)(q)};return function(){k=r.now(),y||(y=l(z,L))}},le=(function(){var w,y,k,L,q,z,O,E,A,W,$,J,me=/^img$/i,ye=/^iframe$/i,ge="onscroll"in a&&!/(gle|ing)bot/.test(navigator.userAgent),_e=0,ae=0,R=0,ee=-1,de=function(m){R--,(!m||R<0||!m.target)&&(R=0)},ue=function(m){return J==null&&(J=X(t.body,"visibility")=="hidden"),J||!(X(m.parentNode,"visibility")=="hidden"&&X(m,"visibility")=="hidden")},we=function(m,x){var S,M=m,H=ue(m);for(E-=x,$+=x,A-=x,W+=x;H&&(M=M.offsetParent)&&M!=t.body&&M!=s;)H=(X(M,"opacity")||1)>0,H&&X(M,"overflow")!="visible"&&(S=M.getBoundingClientRect(),H=W>S.left&&A<S.right&&$>S.top-1&&E<S.bottom+1);return H},ce=function(){var m,x,S,M,H,I,B,D,V,U,K,te,N=n.elements;if((L=i.loadMode)&&R<8&&(m=N.length)){for(x=0,ee++;x<m;x++)if(!(!N[x]||N[x]._lazyRace)){if(!ge||n.prematureUnveil&&n.prematureUnveil(N[x])){re(N[x]);continue}if((!(D=N[x][u]("data-expand"))||!(I=D*1))&&(I=ae),U||(U=!i.expand||i.expand<1?s.clientHeight>500&&s.clientWidth>500?500:370:i.expand,n._defEx=U,K=U*i.expFactor,te=i.hFac,J=null,ae<K&&R<1&&ee>2&&L>2&&!t.hidden?(ae=KLine truncated
|
||||
Reference in new issue
Block a user