lanxin 1 månad sedan
förälder
incheckning
ec95b9c808

BIN
public/myData/img/fudiao_line.png


BIN
public/myData/img/gongyangren_line.png


BIN
public/myData/img/shizi_line.png


BIN
public/myData/img/yinxianke_line.png


+ 7 - 3
public/myData/myData.js

@@ -783,19 +783,22 @@ const myDataTemp = {
       ],
       imgItems: [
         {
-          title: '公元420年 炳灵寺169窟',
+          time: '公元420年',
+          title: '炳灵寺169窟',
           src: './myData/img/sin_1.png',
           srcLine: './myData/img/sin_1_line.png',
           txt: '炳灵寺169窟“建弘元年”的题记,是中国现存最早的有明确纪年的佛教石窟实物。主尊肉髻呈馒头状、着通肩大衣,体态雄健、双臂与身体空间分离,注重表现躯体的结构。'
         },
         {
-          title: '北魏 云冈石窟第20窟佛像',
+          time: '北魏',
+          title: '云冈石窟第20窟佛像',
           src: './myData/img/sin_2.png',
           srcLine: './myData/img/sin_2_line.png',
           txt: '图上标注:主佛:着袒右式僧衣,僧衣厚重,中亚犍陀罗造像风格   旁边:印度秣菟罗造像风格,衣纹贴体'
         },
         {
-          title: '北魏 云冈石窟第19窟右壁胁侍菩萨 ',
+          time: '北魏',
+          title: '云冈石窟第19窟右壁胁侍菩萨 ',
           src: './myData/img/sin_3.png',
           srcLine: './myData/img/sin_3_line.png',
           txt: ''
@@ -936,6 +939,7 @@ const myDataTemp = {
     {
       type: '西域雕塑风格',
       name: '高浮雕',
+      lineSrc: './myData/img/gaofudiao_line.png',
       intro:
         '程哲碑在中央开凿凹入的佛龛,采用高浮雕与阴线刻相结合的雕刻技法,使图像层次分明、神态生动,展现出技艺的高度成熟与文化的深度交融。高浮雕石刻造像技艺,经西域传入中国,在佛教造像技法上体现得淋漓尽致。',
       imgItems: [

+ 13 - 22
src/pages/A6ybwx/A6_1_zxys/index.module.scss

@@ -14,7 +14,7 @@
       left: 4%;
       cursor: pointer;
 
-      &>img {
+      & > img {
         height: 100%;
         object-fit: contain;
       }
@@ -28,7 +28,7 @@
       height: 60px;
       width: 330px;
 
-      &>img {
+      & > img {
         height: 100%;
         object-fit: contain;
       }
@@ -45,7 +45,6 @@
       flex-direction: column;
       gap: 10px;
       color: rgba(255, 233, 182, 1);
-      font-weight: lighter;
 
       .t1 {
         font-size: 16px;
@@ -55,7 +54,7 @@
         width: 100%;
         height: 25px;
 
-        &>img {
+        & > img {
           height: 100%;
           object-fit: contain;
         }
@@ -86,7 +85,7 @@
         font-size: 8px;
       }
 
-      &>img {
+      & > img {
         height: 60px;
         width: 60px;
         object-fit: contain;
@@ -140,7 +139,7 @@
         left: 4%;
         cursor: pointer;
 
-        &>img {
+        & > img {
           height: 100%;
           object-fit: contain;
         }
@@ -192,7 +191,7 @@
             width: 20px;
             height: 20px;
 
-            &>img {
+            & > img {
               height: 100%;
               object-fit: contain;
             }
@@ -240,7 +239,7 @@
             border-radius: 50%;
             background-color: #ccc;
 
-            &>img {
+            & > img {
               border-radius: 50%;
               width: 120px;
               height: 120px;
@@ -271,7 +270,7 @@
             justify-content: center;
             align-items: center;
 
-            &>img {
+            & > img {
               height: 20px;
               width: 20px;
               object-fit: contain;
@@ -285,7 +284,7 @@
         width: 400px;
         height: 150%;
 
-        &>img {
+        & > img {
           height: 100%;
           object-fit: cover;
         }
@@ -294,8 +293,6 @@
   }
 }
 
-
-
 //--------移动端
 .ZaoxiangMo {
   :global {
@@ -353,7 +350,6 @@
 
 .detailPageMo {
   :global {
-
     .detailpageContent {
       .back {
         width: 80px;
@@ -376,7 +372,6 @@
           height: auto;
           font-size: 18px;
           padding: 23px 10px 46px 10px;
-
         }
 
         .txt {
@@ -391,7 +386,6 @@
           .icon2 {
             width: 30px;
             height: 30px;
-
           }
 
           .text {
@@ -402,22 +396,19 @@
         }
       }
 
-
-      .txtcontent{
+      .txtcontent {
         font-size: 16px;
         letter-spacing: 2px;
         line-height: 24px;
       }
 
-      .preview .previewItem{
-        .txt{
+      .preview .previewItem {
+        .txt {
           height: auto;
           font-size: 14px;
           letter-spacing: 2px;
         }
       }
     }
-
-
   }
-}
+}

+ 73 - 40
src/pages/A6ybwx/A6_2_zxzgh/index.module.scss

@@ -29,7 +29,8 @@
     .back {
       width: 60px;
       height: 30px;
-      position: absolute;
+      position: fixed;
+      z-index: 2;
       top: 3%;
       left: 4%;
       cursor: pointer;
@@ -78,9 +79,11 @@
       }
 
       .t2 {
-        width: 87%;
-        font-size: 13px;
-        letter-spacing: 0.5px;
+        width: 90%;
+        font-size: 16px;
+        line-height: 22px;
+        letter-spacing: 2px;
+        font-weight: 400;
       }
     }
 
@@ -108,7 +111,7 @@
       transform: translate(-12%, -50%);
 
       .name {
-        font-size: 10px;
+        font-size: 16px;
         font-weight: 500;
         color: rgba(170, 105, 77, 1);
         text-align: center;
@@ -142,7 +145,7 @@
       display: flex;
       align-items: center;
       justify-content: center;
-      font-size: 13px;
+      font-size: 14px;
       font-weight: 500;
       color: rgba(255, 233, 182, 1);
       transition: all 0.3s ease-in-out;
@@ -160,6 +163,7 @@
 }
 
 .label {
+  transform: scale(1.4);
   position: absolute;
   height: 30px;
   width: fit-content;
@@ -265,6 +269,7 @@
           .txt {
             writing-mode: vertical-rl;
             text-align: left;
+            letter-spacing: 4px;
             width: 100%;
             padding: 50px 40%;
             height: 100%;
@@ -281,6 +286,33 @@
           transition: all 0.7s ease-in-out;
           display: flex;
           align-items: center;
+          .point {
+            position: absolute;
+            top: 50%;
+            left: 50%;
+            transform: translate(-50%, -50%);
+            width: 225px;
+            height: 60px;
+            background: url('../../../assets/img/A6_pointBg.png') no-repeat center center;
+            background-size: 100% 100%;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            justify-content: center;
+            .pointTime,
+            .pointTitle {
+              padding-left: 10px;
+              width: 60%;
+              height: 60%;
+              font-size: 13px;
+              font-weight: 500;
+              color: rgba(124, 75, 54, 1);
+              text-align: center;
+            }
+            .pointTime {
+              height: 30%;
+            }
+          }
           .left {
             width: 800px;
             height: 100%;
@@ -288,12 +320,15 @@
             align-items: center;
             flex-direction: column;
             .lTop {
+              text-align: justify;
               padding: 20px;
               padding-bottom: 0;
               width: 100%;
-              height: 100px;
-              font-size: 13px;
-              font-weight: 500;
+              height: 130px;
+              font-size: 16px;
+              line-height: 24px;
+              letter-spacing: 2px;
+              font-weight: 400;
               color: rgba(124, 75, 54, 1);
             }
             .lContent {
@@ -305,32 +340,17 @@
               .lImgBox {
                 width: 550px;
                 height: 100%;
+                .pic {
+                  width: 100%;
+                  height: 100%;
+                  transition: all 0.3s ease-in-out;
+                  background-repeat: no-repeat;
+                  background-size: contain;
+                }
                 & > img {
                   height: 100%;
                   object-fit: contain;
                 }
-                .point {
-                  position: absolute;
-                  top: 50%;
-                  left: 50%;
-                  transform: translate(-50%, -50%);
-                  width: 160px;
-                  height: 40px;
-                  background: url('../../../assets/img/A6_pointBg.png') no-repeat center center;
-                  background-size: 100% 100%;
-                  display: flex;
-                  align-items: center;
-                  justify-content: center;
-                  .pointText {
-                    padding-left: 10px;
-                    width: 70%;
-                    height: 100%;
-                    font-size: 13px;
-                    font-weight: 500;
-                    color: rgba(124, 75, 54, 1);
-                    text-align: center;
-                  }
-                }
               }
               .lInfo {
                 padding-right: 20px;
@@ -350,8 +370,10 @@
                   .lTitle {
                     width: 100%;
                     height: fit-content;
-                    font-size: 13px;
-                    font-weight: 500;
+                    font-size: 17px;
+                    line-height: 24px;
+                    letter-spacing: 2px;
+                    font-weight: bold;
                     color: rgba(124, 75, 54, 1);
                     position: relative;
                     z-index: 1;
@@ -369,6 +391,11 @@
                     }
                   }
                   .lText {
+                    font-size: 16px;
+                    line-height: 24px;
+                    letter-spacing: 2px;
+                    font-weight: 400;
+                    color: #504e40;
                     height: fit-content;
                     margin-top: 5px;
                     max-height: 90px;
@@ -387,20 +414,20 @@
             height: 100%;
             .RItems {
               width: fit-content;
+              height: 100%;
               display: flex;
               align-items: center;
               gap: 10px;
               .item {
                 width: 500px;
                 height: 100%;
+                position: relative;
                 .pic {
                   width: 100%;
                   height: 100%;
-                  & > img {
-                    width: 80%;
-                    height: 100%;
-                    object-fit: contain;
-                  }
+                  transition: all 0.3s ease-in-out;
+                  background-repeat: no-repeat;
+                  background-size: contain;
                 }
               }
             }
@@ -442,9 +469,15 @@
   display: flex;
   align-items: center;
   :global {
-    .dotLeft {
-      width: 150px;
+    .cardClose {
+      position: absolute;
+      z-index: 2;
+      top: 3%;
+      right: 3%;
+      width: 20px;
       height: 20px;
+      font-weight: bold;
+      cursor: pointer;
       & > img {
         width: 100%;
         height: 100%;

+ 95 - 59
src/pages/A6ybwx/A6_2_zxzgh/index.tsx

@@ -12,7 +12,6 @@ type InfoCardProps = {
   inset?: string
 }
 function Sinicize() {
-
   const { myData } = useSelector((state: RootState) => state.A0Layout)
 
   const [currentTab, setCurrentTab] = useState(0)
@@ -39,9 +38,17 @@ function Sinicize() {
   }) => {
     return (
       <div className={styles.label} style={{ inset: inset }}>
-        {direct === 'left' ? <div className='arrowL' style={{ width: width + 'px' }} ><div className="dot"></div></div> : null}
+        {direct === 'left' ? (
+          <div className='arrowL' style={{ width: width + 'px' }}>
+            <div className='dot'></div>
+          </div>
+        ) : null}
         <div className='btn'>{name}</div>
-        {direct === 'right' ? <div className='arrowR' style={{ width: width + 'px' }} ><div className="dot"></div></div> : null}
+        {direct === 'right' ? (
+          <div className='arrowR' style={{ width: width + 'px' }}>
+            <div className='dot'></div>
+          </div>
+        ) : null}
       </div>
     )
   }
@@ -55,6 +62,7 @@ function Sinicize() {
       })
       return
     }
+    setIsShowLine(true)
     setCurrentImgIndex(0)
     if (selectedTime === index) {
       setSelectedTime(-1)
@@ -97,12 +105,15 @@ function Sinicize() {
   const InfoCard = ({ time, location, text, from, inset }: InfoCardProps) => {
     return (
       <div className={styles.InfoCard} style={{ inset: inset }}>
-        <div className="dotLeft"><img src={require('@/assets/img/A6_arrow.png')} alt="" /></div>
-        <div className="main">
-          <div className="time">{time}</div>
-          <div className="location">{location}</div>
-          <div className="text">{text}</div>
-          <div className="from">{from}</div>
+        <div className="cardClose" onClick={() => setIsShowLine(true)}>×</div>
+        <div className='dotLeft'>
+          <img src={require('@/assets/img/A6_arrow.png')} alt='' />
+        </div>
+        <div className='main'>
+          <div className='time'>{time}</div>
+          <div className='location'>{location}</div>
+          <div className='text'>{text}</div>
+          <div className='from'>{from}</div>
         </div>
       </div>
     )
@@ -129,18 +140,20 @@ function Sinicize() {
               <div className='line1'>
                 <img src={require('@/assets/img/A6_sinicize_line2.png')} draggable='false' alt='' />
               </div>
-              <div className='t2'>
-                {myData.sinicizeDataStatic.desc}
-              </div>
+              <div className='t2'>{myData.sinicizeDataStatic.desc}</div>
             </div>
-            {currentTab === 0 && <div className={`zhufo ${currentTab === 0 ? 'active' : ''}`}>
-              <img src={require('@/assets/img/A6_sinicize_zhufo.png')} draggable='false' alt='' />{' '}
-              <div className='name'>主尊佛像</div>
-            </div>}
-            {currentTab === 1 && <div className={`pusha ${currentTab === 1 ? 'active' : ''}`}>
-              <img src={require('@/assets/img/A6_sinicize_pusha.png')} draggable='false' alt='' />
-              <div className='name'>胁侍菩萨</div>
-            </div>}
+            {currentTab === 0 && (
+              <div className={`zhufo ${currentTab === 0 ? 'active' : ''}`}>
+                <img src={require('@/assets/img/A6_sinicize_zhufo.png')} draggable='false' alt='' />{' '}
+                <div className='name'>主尊佛像</div>
+              </div>
+            )}
+            {currentTab === 1 && (
+              <div className={`pusha ${currentTab === 1 ? 'active' : ''}`}>
+                <img src={require('@/assets/img/A6_sinicize_pusha.png')} draggable='false' alt='' />
+                <div className='name'>胁侍菩萨</div>
+              </div>
+            )}
             {currentTab === 0 && (
               <>
                 <Label width={70} inset={'53px auto auto 360px'} name={'肉髻'} direct={'right'} />
@@ -160,12 +173,7 @@ function Sinicize() {
             {currentTab === 1 && (
               <>
                 <Label width={70} inset={'83px auto auto 360px'} name={'头光'} direct={'right'} />
-                <Label
-                  width={93}
-                  inset={'181px auto auto 318px'}
-                  name={'披帛'}
-                  direct={'right'}
-                />
+                <Label width={93} inset={'181px auto auto 318px'} name={'披帛'} direct={'right'} />
                 <Label width={68} inset={'272px auto auto 345px'} name={'天衣'} direct={'right'} />
                 <Label width={40} inset={'93px auto auto 506px'} name={'头冠'} direct={'left'} />
                 <Label width={36} inset={'129px auto auto 512px'} name={'宝缯'} direct={'left'} />
@@ -202,41 +210,66 @@ function Sinicize() {
                     <div className='txt'>{sItem.time}</div>
                   </div>
                   <div className={`${selectedTime === index ? 'detailShow' : 'detailHide'}`}>
-                    <div className="left">
-                      <div className="lTop">{sItem.desc}</div>
-                      <div className="lContent">
-                        <div className="lImgBox">
-                          <img src={isShowLine ? sItem.imgItems[0].srcLine : sItem.imgItems[0].src} alt="" />
-                          {!isShowLine && <InfoCard
-                            time={sItem.imgItems[0].title}
-                            location={sItem.imgItems[0].title}
-                            text={sItem.imgItems[0].txt}
-                            from={sItem.imgItems[0].title}
-                          />}
-                          <div className="point">
-                            <div className="pointText">123</div>
-                          </div>
+                    <div className='left'>
+                      <div className='lTop'>{sItem.desc}</div>
+                      <div className='lContent'>
+                        <div className='lImgBox'>
+                          {/* <img
+                            src={isShowLine ? sItem.imgItems[0].srcLine : sItem.imgItems[0].src}
+                            alt=''
+                          /> */}
+                          <div style={{
+                            backgroundImage: `url(${isShowLine ? sItem.imgItems[0].srcLine : sItem.imgItems[0].src})`
+                          }} className={`pic ${isShowLine ? 'picLine' : ''}`} />
+                          {!isShowLine ? (
+                            <InfoCard
+                              time={sItem.imgItems[0].time}
+                              location={sItem.imgItems[0].title}
+                              text={sItem.imgItems[0].txt}
+                              from={sItem.imgItems[0].title}
+                            />
+                          ) : (
+                            <div className='point' onClick={() => setIsShowLine(false)}>
+                              <div className="pointTime">{sItem.imgItems[0].time}</div>
+                              <div className='pointTitle'>{sItem.imgItems[0].title}</div>
+                            </div>
+                          )}
                         </div>
-                        <div className="lInfo">
+                        <div className='lInfo'>
                           {sItem.items.map((i, index) => (
-                            <div className="item" key={index}>
-                              <div className="lTitle">{i.title}</div>
-                              <div className="lText">{i.txt}</div>
+                            <div className='item' key={index}>
+                              <div className='lTitle'>{i.title}</div>
+                              <div className='lText'>{i.txt}</div>
                             </div>
                           ))}
                         </div>
                       </div>
                     </div>
-                    <div className="right">
-                      <div className="RItems">
-                        {
-                          sItem.imgItems.map((i, index) => (
-                            <div className="item" key={index}>
-                              <div className="pic"><img src={i.src} alt="" /></div>
-                            </div>
-                          ))
-                        }
-
+                    <div className='right'>
+                      <div className='RItems'>
+                        {sItem.imgItems.filter((i, index) => index !== 0).map((i, index) => (
+                          <div className='item' key={index}>
+                            {/* <div className='pic'>
+                              <img src={i.src} alt='' />
+                            </div> */}
+                            <div style={{
+                              backgroundImage: `url(${isShowLine ? i.srcLine : i.src})`
+                            }} className={`pic ${isShowLine ? 'picLine' : ''}`} />
+                            {!isShowLine ? (
+                              <InfoCard
+                                time={i.time}
+                                location={i.title}
+                                text={i.txt}
+                                from={i.title}
+                              />
+                            ) : (
+                              <div className='point' onClick={() => setIsShowLine(false)}>
+                                <div className="pointTime">{i.time}</div>
+                                <div className='pointTitle'>{i.title}</div>
+                              </div>
+                            )}
+                          </div>
+                        ))}
                       </div>
                     </div>
                   </div>
@@ -247,11 +280,14 @@ function Sinicize() {
         </div>
       </div>
       {isShowTip && (
-        <div className={styles.tip} onClick={() => {
-          setTimeout(() => {
-            setIsShowTip(false)
-          }, 1500);
-        }}>
+        <div
+          className={styles.tip}
+          onClick={() => {
+            setTimeout(() => {
+              setIsShowTip(false)
+            }, 1500)
+          }}
+        >
           <div className='gesture'>
             <img src={require('@/assets/img/A6_sinicize_gesture.png')} draggable='false' alt='' />{' '}
             <div className='txt'>向右滑动查看造像中国化的演变</div>{' '}

+ 8 - 8
src/pages/A6ybwx/StatueArt/index.module.scss

@@ -46,13 +46,13 @@
     }
 
     .text {
-      width: 200px;
-      height: 300px;
-      font-size: 11px;
-      line-height: 22px;
-      font-weight: lighter;
-      color: #fff;
-      transform: translate(-86%, -46%);
+      width: 150px;
+      height: 95%;
+      font-size: 16px;
+      line-height: 24px;
+      color: rgb(255, 233, 182);
+      font-weight: 300;
+      transform: translate(-117%, -46%);
       text-align: justify;
     }
 
@@ -80,7 +80,7 @@
       width: 120px;
     }
     .text {
-      font-size: 18px;
+      font-size: 16px;
     }
     .back {
       width: 80px;

+ 2 - 1
src/pages/A6ybwx/index.tsx

@@ -46,13 +46,14 @@ function A6ybwx() {
         playerRef.current.destroy()
       }, // 触发播放结束事件
       onSourceEstablished: () => {
+        if (isEnter) setVideoOk(false)
         setVideoOk(true)
       } //有足够的数据可以播放了
     }
     playerRef.current = F_Video('./myData/ybwx.ts', params)
     const dom = document.querySelector('.A6videoDom')!
     dom.append(playerRef.current.domElement)
-  }, [])
+  }, [isEnter])
 
   const timeRR = useRef(-1)
   useEffect(() => {

+ 1 - 1
src/types/declaration.d.ts

@@ -58,7 +58,7 @@ declare const F_Video: any
     bgPath: string
     desc: string
     items: { title: string; txt: string; inset: string }[]
-    imgItems: { title: string; src: string; srcLine: string; txt: string }[]
+    imgItems: { time: string; title: string; src: string; srcLine: string; txt: string }[]
   }[]
   zaoxiangDataDetail: {
     type: string