"use client"; import React, { useEffect, useState, useRef } from "react"; import { Image, ImageViewer, Dialog } from "antd-mobile"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faAngleUp, faClose } from "@fortawesome/free-solid-svg-icons"; import { useRouter } from "next/navigation"; import baseRequest from "@/utils/baseRequest"; import { handleShowVideo } from "@/utils/tools/handleFuns"; // import dynamic from 'next/dynamic' import ImagesMask from "@/components/ImagesMask"; // const ImagesMask = dynamic(() => // import('@/components/ImagesMask'), { ssr: false } // ) export default function Photos({ isUnlocked, mediaVisibleRange, mediaAmount, media, type, data, }) { const [seeAllPhotos, setSeeAllPhotos] = useState(false); const [currentPhotos, setCurrentPhotos] = useState([]); const [photos, setPhotos] = useState([]); const [visible, setVisible] = useState(false); const currentIndex = useRef(); const swiper = useRef(null); const imagesMaskRef = useRef(null); const router = useRouter(); const base = baseRequest(); useEffect(() => { if (media) { let imgArr = media.images.map((item) => ({ type: "img", url: item.urls?.[0], // fullwidth:item.w>item.h, w: item.w, h: item.h, })); let videoArr = media.videos.map((item) => ({ type: "video", url: item.cover_urls?.[0], mp4: item.urls?.[0], w: item.cover_w, h: item.cover_h, // fullwidth:item.cover_w>item.cover_h })); let arr = [...imgArr, ...videoArr]; let newPhotos = [...arr]; if (mediaAmount && !isUnlocked) { // console.log("newPhotos", newPhotos); newPhotos = Array(mediaAmount) .fill(null) .map((item, index) => { return newPhotos[index] && mediaVisibleRange ? newPhotos[index] : { mp4: newPhotos[0]?.type === "video", url: newPhotos[0]?.url, type: "hid", w: newPhotos[0]?.w, h: newPhotos[0]?.h, }; }); } setPhotos(newPhotos); if (newPhotos.length > 9) { newPhotos = newPhotos.slice(0, 9); } // console.log("newPhotos", newPhotos); setCurrentPhotos(newPhotos); } }, [media]); useEffect(() => { // window.addEventListener('resize', (e)=>{ // // alert(window.innerHeight) // setMaskHeight(window.innerHeight) // }); return () => { // window.removeEventListener("resize") }; }, []); const showPhotos = (photos, index) => { currentIndex.current = index; // const interval = setInterval(() => { // const bodyBox = document.getElementsByClassName("photos-bodyBox")[0]; // if (bodyBox) { // bodyBox.firstChild.lastChild.style.transform = `translateX(-${ // currentIndex.current * (window.innerWidth + 16) // }px)`; // // console.log(bodyBox.firstChild.lastChild.style.transform); // } // }, 400); // 添加左右切换按钮 // const btns = document.createElement("div"); // btns.className = "imagesBtnsControllers"; // const btnL = document.createElement("div"); // btnL.className = "imagesBtnsControllerLeft"; // btnL.addEventListener("click", () => { // if (currentIndex.current > 0) { // currentIndex.current = currentIndex.current - 1; // handleShowImages(currentIndex.current, photos, btns,interval); // if (!currentIndex.current) { // btnL.style.opacity = 0.5; // btnR.style.opacity = 1; // } else { // btnR.style.opacity = 1; // btnL.style.opacity = 1; // } // } // }); // const btnR = document.createElement("div"); // btnR.className = "imagesBtnsControllerRight"; // btnR.addEventListener("click", () => { // if (currentIndex.current < currentPhotos.length - 1) { // currentIndex.current = currentIndex.current + 1; // handleShowImages(currentIndex.current, photos, btns,interval); // if (currentIndex.current == currentPhotos.length - 1) { // btnR.style.opacity = 0.5; // btnL.style.opacity = 1; // } else { // btnR.style.opacity = 1; // btnL.style.opacity = 1; // } // } // }); // btns.append(btnL, btnR); // handleShowImages(index, photos, btns,interval); // handleShowImages(index, photos, interval); // setVisible(true) console.log(imagesMaskRef.current, photos); imagesMaskRef.current.show(photos, index, data); }; // const handleShowImages = (index, photos, interval) => { // const mediaDom = document.createElement("div"); // mediaDom.style.width = "100vw"; // document.body.appendChild(mediaDom); // mediaDom.className = `${ // photos[index]?.type == "hid" ? "mediaDom photos-body" : "mediaDom" // }`; // // mediaDom.appendChild(btns); // document.body.style.overflow = "hidden"; // ImageViewer.clear(); // ImageViewer.Multi.show({ // images: photos.map((item) => item?.url), // defaultIndex: index, // renderFooter: (image, index) => { // return renderFooter(photos[index]?.type == "hid", mediaDom); // }, // getContainer: mediaDom, // onIndexChange: (index) => { // currentIndex.current = index; // mediaDom.className = `${ // photos[index]?.type == "hid" ? "mediaDom photos-body" : "mediaDom" // }`; // const leftBtn = document.getElementsByClassName( // "imagesBtnsControllerLeft" // )[0]; // const rightBtn = document.getElementsByClassName( // "imagesBtnsControllerRight" // )[0]; // if (leftBtn && rightBtn) { // if (!index) { // leftBtn.style.opacity = 0.5; // rightBtn.style.opacity = 1; // } else if (index == currentPhotos.length - 1) { // leftBtn.style.opacity = 1; // rightBtn.style.opacity = 0.5; // } else { // leftBtn.style.opacity = 1; // rightBtn.style.opacity = 1; // } // } // }, // afterClose: () => { // mediaDom.remove(); // clearInterval(interval); // document.body.style.overflow = "auto"; // }, // classNames: { body: "photos-bodyBox" }, // }); // }; const handleSeeAllPhotos = (e) => { e.stopPropagation(); e.preventDefault(); // console.log(e); setSeeAllPhotos((old) => { if (old) { const newPhotos = [...photos]; setCurrentPhotos(newPhotos.slice(0, 9)); return false; } else { setCurrentPhotos(photos); return true; } }); }; const renderFooter = (hidden, fatherDom) => { return hidden ? (
{ fatherDom && fatherDom.remove(); router.push( "/webView/" + encodeURIComponent( "/zone/pay/" + data?.zid + "/h5_zone_moment/" + data?.id + "?base=" + encodeURIComponent(JSON.stringify(base)) ) ); }} style={{ marginTop: "calc(-85px )" }} > 此内容暂未解锁,立即解锁
) : null; }; return ( <>
1 ? "grid grid-cols-3 gap-1.5 min-h-[24vw]" : "auto" }`} > {currentPhotos.map((item, index) => { return (
{ if (item?.type == "video") { if (!isUnlocked && type == "space") { const mediaDom = document.createElement("div"); document.body.appendChild(mediaDom); ImageViewer.show({ image: item.url, maxZoom: 8, classNames: { body: "customize-body" }, getContainer: mediaDom, renderFooter: () => renderFooter(true, mediaDom), }); return; } handleShowVideo(item); } else { showPhotos(photos, index); } }} > {
1 ? "h-[24vw]" : "" }`} >
} width={ currentPhotos.length > 1 ? "24vw" : item.w > item.h ? `calc(100vw - 72px - 2rem)` : `calc(46vw * ${item.w / item.h})` } height={ currentPhotos.length > 1 ? "24vw" : item.w > item.h ? `calc((100vw - 72px - 2rem) * ${item.h / item.w})` : "46vw" } className={`rounded max-w-full ${ item?.type == "hid" && type == "space" ? "imageBlur" : "" }`} fit={currentPhotos.length > 1 ? "cover" : "contain"} src={item?.url} />
} {item?.mp4 && (
} />
)} {/* {index==8 && currentPhotos.length>9 && (
+{currentPhotos.length}
)} */} {index == currentPhotos.length - 1 && photos.length > 9 && (!seeAllPhotos ? (
+{currentPhotos.length}
) : (
))} ); })} {/* { setVisible(false); } } images={currentPhotos.map((it,index)=>({src:it.url,alt:index}))} /> */} ); }