|
|
@@ -569,7 +569,7 @@
|
|
|
</div>
|
|
|
</header>
|
|
|
|
|
|
- <!-- 配图轮播:checkInImages;含视频时仅展示封面静图,不播放视频 -->
|
|
|
+ <!-- 配图轮播:仅用 checkInImages;视频显示封面静图。店铺图见下方 #storeThumb(不用 coverUrl) -->
|
|
|
<div class="checkin-hero" id="dynHero">
|
|
|
<div class="checkin-hero__track" id="dynHeroTrack"></div>
|
|
|
<div class="checkin-hero__dots" id="dynHeroDots" aria-hidden="true"></div>
|
|
|
@@ -2017,6 +2017,20 @@
|
|
|
: '';
|
|
|
}
|
|
|
|
|
|
+ function parseCheckInShopItem() {
|
|
|
+ var raw = getMergedParam('checkInShopItem');
|
|
|
+ if (!raw) return null;
|
|
|
+ try {
|
|
|
+ return JSON.parse(tryDecode(String(raw).trim()));
|
|
|
+ } catch (e1) {
|
|
|
+ try {
|
|
|
+ return JSON.parse(String(raw).trim());
|
|
|
+ } catch (e2) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/** 与 App checkIn/details isVideoClockUrl 一致 */
|
|
|
function isCheckInVideoUrl(url) {
|
|
|
var s = normalizeMediaUrl(String(url || ''));
|
|
|
@@ -2062,34 +2076,10 @@
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- function getCheckInPosterFallbacks() {
|
|
|
- var list = [];
|
|
|
- function pushStill(u) {
|
|
|
- u = normalizeMediaUrl(String(u || '').trim());
|
|
|
- if (!u || isCheckInVideoUrl(u)) return;
|
|
|
- if (list.indexOf(u) < 0) list.push(u);
|
|
|
- }
|
|
|
- pushStill(getMergedParam('coverUrl') || q('coverUrl'));
|
|
|
- var item = parseOptionsItem();
|
|
|
- if (item) {
|
|
|
- ['videoFirstFrame', 'coverImage', 'cover', 'coverUrl', 'poster', 'entranceImage'].forEach(
|
|
|
- function (k) {
|
|
|
- if (item[k] != null) pushStill(item[k]);
|
|
|
- }
|
|
|
- );
|
|
|
- }
|
|
|
- return list;
|
|
|
- }
|
|
|
-
|
|
|
- /** 视频地址 → 封面静图 URL(不渲染 video 标签) */
|
|
|
- function resolveCheckInHeroDisplayUrl(rawUrl, posterFallbacks) {
|
|
|
- var url = normalizeMediaUrl(rawUrl);
|
|
|
- if (!url) return '';
|
|
|
- if (!isCheckInVideoUrl(url)) return url;
|
|
|
- var fallbacks = posterFallbacks || getCheckInPosterFallbacks();
|
|
|
- for (var i = 0; i < fallbacks.length; i++) {
|
|
|
- if (fallbacks[i]) return fallbacks[i];
|
|
|
- }
|
|
|
+ /** 中间轮播:仅把打卡视频换成封面静图(不用店铺 entranceImage / coverUrl) */
|
|
|
+ function resolveCheckInVideoPosterUrl(videoUrl) {
|
|
|
+ var url = normalizeMediaUrl(videoUrl);
|
|
|
+ if (!url || !isCheckInVideoUrl(url)) return '';
|
|
|
var playUrl = getMp4PlaybackUrl(url);
|
|
|
if (playUrl) {
|
|
|
var jpg = mp4UrlToJpgUrl(playUrl);
|
|
|
@@ -2099,16 +2089,13 @@
|
|
|
return CHECKIN_HERO_DEFAULT_MAP_SRC;
|
|
|
}
|
|
|
|
|
|
- /** 轮播:checkInImages;视频项替换为封面图 */
|
|
|
- function collectImageUrlsFromUrl() {
|
|
|
+ /** 原始打卡配图列表(checkInImages),不含店铺头图 */
|
|
|
+ function collectRawCheckInImageUrls() {
|
|
|
var merged = getMergedQueryString();
|
|
|
var urls = [];
|
|
|
- var posterFallbacks = getCheckInPosterFallbacks();
|
|
|
-
|
|
|
getAllParamValuesCI(merged, 'checkinimages').forEach(function (val) {
|
|
|
pushUrlsFromRawParam(urls, val);
|
|
|
});
|
|
|
-
|
|
|
var item = parseOptionsItem();
|
|
|
if (item && item.checkInImages != null && item.checkInImages !== '') {
|
|
|
if (Array.isArray(item.checkInImages)) {
|
|
|
@@ -2119,23 +2106,72 @@
|
|
|
pushUrlsFromRawParam(urls, String(item.checkInImages));
|
|
|
}
|
|
|
}
|
|
|
+ return urls;
|
|
|
+ }
|
|
|
|
|
|
+ /** 中间 #dynHero:checkInImages;视频项 → 封面静图 */
|
|
|
+ function collectImageUrlsFromUrl() {
|
|
|
+ var urls = collectRawCheckInImageUrls();
|
|
|
var displayUrls = [];
|
|
|
urls.forEach(function (u) {
|
|
|
- var display = resolveCheckInHeroDisplayUrl(u, posterFallbacks);
|
|
|
+ var display = isCheckInVideoUrl(u)
|
|
|
+ ? resolveCheckInVideoPosterUrl(u)
|
|
|
+ : normalizeMediaUrl(u);
|
|
|
if (display) pushUniqueUrl(displayUrls, display);
|
|
|
});
|
|
|
-
|
|
|
if (!displayUrls.length) {
|
|
|
- if (posterFallbacks.length) {
|
|
|
- pushUniqueUrl(displayUrls, posterFallbacks[0]);
|
|
|
- } else {
|
|
|
- pushUniqueUrl(displayUrls, CHECKIN_HERO_DEFAULT_MAP_SRC);
|
|
|
- }
|
|
|
+ pushUniqueUrl(displayUrls, CHECKIN_HERO_DEFAULT_MAP_SRC);
|
|
|
}
|
|
|
return displayUrls;
|
|
|
}
|
|
|
|
|
|
+ /** 下方店铺缩略图 #storeThumb:用门店 entranceImage,不用打卡视频 coverUrl */
|
|
|
+ function resolveStoreThumbUrl(item) {
|
|
|
+ var shop = parseCheckInShopItem();
|
|
|
+ if (shop && shop.entranceImage != null && String(shop.entranceImage).trim() !== '') {
|
|
|
+ var ent = normalizeMediaUrl(String(shop.entranceImage).trim());
|
|
|
+ if (ent && !isCheckInVideoUrl(ent)) return ent;
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ shop &&
|
|
|
+ Array.isArray(shop.storeAlbumUrlList) &&
|
|
|
+ shop.storeAlbumUrlList[0]
|
|
|
+ ) {
|
|
|
+ var alb = normalizeMediaUrl(String(shop.storeAlbumUrlList[0]).trim());
|
|
|
+ if (alb && !isCheckInVideoUrl(alb)) return alb;
|
|
|
+ }
|
|
|
+ var cardCover = getMergedParam('cardCover') || q('cardCover');
|
|
|
+ if (cardCover && !isCheckInVideoUrl(cardCover)) {
|
|
|
+ return normalizeMediaUrl(cardCover);
|
|
|
+ }
|
|
|
+ if (item && item.entranceImage != null && String(item.entranceImage).trim() !== '') {
|
|
|
+ var ie = normalizeMediaUrl(String(item.entranceImage).trim());
|
|
|
+ if (ie && !isCheckInVideoUrl(ie)) return ie;
|
|
|
+ }
|
|
|
+ if (item && Array.isArray(item.storeAlbumUrlList) && item.storeAlbumUrlList[0]) {
|
|
|
+ var ia = normalizeMediaUrl(String(item.storeAlbumUrlList[0]).trim());
|
|
|
+ if (ia && !isCheckInVideoUrl(ia)) return ia;
|
|
|
+ }
|
|
|
+ var coverUrl = getMergedParam('coverUrl') || q('coverUrl');
|
|
|
+ if (coverUrl && !isCheckInVideoUrl(coverUrl)) {
|
|
|
+ var coverNorm = normalizeMediaUrl(coverUrl);
|
|
|
+ var checkInUrls = collectRawCheckInImageUrls();
|
|
|
+ var isCheckInMedia = false;
|
|
|
+ for (var i = 0; i < checkInUrls.length; i++) {
|
|
|
+ if (normalizeMediaUrl(checkInUrls[i]) === coverNorm) {
|
|
|
+ isCheckInMedia = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!isCheckInMedia) return coverNorm;
|
|
|
+ }
|
|
|
+ if (shop && shop.imgUrl != null && String(shop.imgUrl).trim() !== '') {
|
|
|
+ var si = normalizeMediaUrl(String(shop.imgUrl).trim());
|
|
|
+ if (si && !isCheckInVideoUrl(si)) return si;
|
|
|
+ }
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+
|
|
|
var heroI = 0;
|
|
|
var heroTimer = null;
|
|
|
var dynHeroSwipeInited = false;
|
|
|
@@ -2211,14 +2247,9 @@
|
|
|
im.decoding = 'async';
|
|
|
im.src = url;
|
|
|
im.onerror = function () {
|
|
|
- if (this.dataset.fallbackApplied === '1') {
|
|
|
- this.src = CHECKIN_HERO_DEFAULT_MAP_SRC;
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (this.dataset.fallbackApplied === '1') return;
|
|
|
this.dataset.fallbackApplied = '1';
|
|
|
- var fb = getCheckInPosterFallbacks();
|
|
|
- if (fb.length) this.src = fb[0];
|
|
|
- else this.src = CHECKIN_HERO_DEFAULT_MAP_SRC;
|
|
|
+ this.src = CHECKIN_HERO_DEFAULT_MAP_SRC;
|
|
|
};
|
|
|
s.appendChild(im);
|
|
|
track.appendChild(s);
|
|
|
@@ -2388,17 +2419,10 @@
|
|
|
var elTag = document.getElementById('storeTagline');
|
|
|
if (elTag) elTag.textContent = tryDecode(tag);
|
|
|
|
|
|
- var thumb = getMergedParam('coverUrl') || q('coverUrl');
|
|
|
- if (!thumb && item && item.coverUrl != null && String(item.coverUrl).trim() !== '') {
|
|
|
- thumb = String(item.coverUrl);
|
|
|
- }
|
|
|
- if (!thumb) thumb = getMergedParam('cardCover') || q('cardCover');
|
|
|
- if (!thumb && item) {
|
|
|
- if (item.entranceImage) thumb = String(item.entranceImage);
|
|
|
- else if (Array.isArray(item.storeAlbumUrlList) && item.storeAlbumUrlList[0]) thumb = item.storeAlbumUrlList[0];
|
|
|
- else if (Array.isArray(item.imageList) && item.imageList[0]) thumb = item.imageList[0];
|
|
|
+ var thumb = resolveStoreThumbUrl(item);
|
|
|
+ if (thumb) {
|
|
|
+ document.getElementById('storeThumb').src = thumb;
|
|
|
}
|
|
|
- if (thumb) document.getElementById('storeThumb').src = normalizeMediaUrl(thumb) || thumb;
|
|
|
}
|
|
|
|
|
|
function boot() {
|