|
@@ -17,7 +17,8 @@ import {
|
|
|
onUnmounted,
|
|
|
ref,
|
|
|
watch,
|
|
|
- Transition
|
|
|
+ Transition,
|
|
|
+ TransitionGroup
|
|
|
} from 'vue'
|
|
|
import iconBack from './image/back.svg'
|
|
|
import styles from './index.module.less'
|
|
@@ -40,10 +41,17 @@ import Points from './component/points'
|
|
|
import { browser, getSecondRPM } from '@/helpers/utils'
|
|
|
import { Vue3Lottie } from 'vue3-lottie'
|
|
|
import playLoadData from './datas/data.json'
|
|
|
-import { usePageVisibility } from '@vant/use'
|
|
|
+import { usePageVisibility, useRect } from '@vant/use'
|
|
|
import PlayRecordTime from './playRecordTime'
|
|
|
import dayjs from 'dayjs'
|
|
|
|
|
|
+import { Pagination, Navigation, EffectFade, EffectFlip, EffectCreative, Lazy } from 'swiper'
|
|
|
+import { Swiper, SwiperSlide } from 'swiper/vue'
|
|
|
+import 'swiper/less'
|
|
|
+import 'swiper/less/effect-fade'
|
|
|
+import 'swiper/less/effect-flip'
|
|
|
+import 'swiper/less/effect-creative'
|
|
|
+
|
|
|
export default defineComponent({
|
|
|
name: 'CoursewarePlay',
|
|
|
setup() {
|
|
@@ -290,6 +298,7 @@ export default defineComponent({
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ const swiperDom = ref()
|
|
|
onMounted(() => {
|
|
|
getDetail()
|
|
|
getCourseSchedule()
|
|
@@ -347,9 +356,10 @@ export default defineComponent({
|
|
|
const toggleMaterial = () => {
|
|
|
const index = data.itemList.findIndex((n: any) => n.id == popupData.itemActive)
|
|
|
if (index > -1) {
|
|
|
- swipeRef.value?.swipeTo(index, {
|
|
|
- immediate: true
|
|
|
- })
|
|
|
+ // swipeRef.value?.swipeTo(index, {
|
|
|
+ // immediate: true
|
|
|
+ // })
|
|
|
+ swiperDom.value?.slideTo(index, 1000)
|
|
|
}
|
|
|
}
|
|
|
/** 延迟收起模态框 */
|
|
@@ -389,14 +399,6 @@ export default defineComponent({
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- // 上一个知识点, 下一个知识点
|
|
|
- const handlePreAndNext = (type: string) => {
|
|
|
- if (type === 'up') {
|
|
|
- swipeRef.value?.prev()
|
|
|
- } else {
|
|
|
- swipeRef.value?.next()
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
// 去点名,签退
|
|
|
const gotoRollCall = (pageTag: string) => {
|
|
@@ -452,187 +454,325 @@ export default defineComponent({
|
|
|
const handleEnded = (m: any) => {
|
|
|
// console.log(m)
|
|
|
if (popupData.activeIndex != data.itemList.length - 1) {
|
|
|
- swipeRef.value?.next()
|
|
|
+ swiperDom.value.slideNext(800)
|
|
|
+
|
|
|
+ // setTimeout(() => {
|
|
|
+ // swipeRef.value?.next()
|
|
|
+ // ;(document.querySelector('.swiper-button-next') as any)?.click()
|
|
|
+ // swiperDom.value.navigation.nextEl.click()
|
|
|
+ // swiperDom.value.slideNext(800)
|
|
|
+ // }, 300)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ const effects = [
|
|
|
+ {
|
|
|
+ prev: {
|
|
|
+ shadow: true,
|
|
|
+ translate: [0, 0, -400]
|
|
|
+ },
|
|
|
+ next: {
|
|
|
+ translate: ['100%', 0, 0]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prev: {
|
|
|
+ shadow: true,
|
|
|
+ translate: ['-120%', 0, -500]
|
|
|
+ },
|
|
|
+ next: {
|
|
|
+ shadow: true,
|
|
|
+ translate: ['120%', 0, -500]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prev: {
|
|
|
+ shadow: true,
|
|
|
+ translate: ['-20%', 0, -1]
|
|
|
+ },
|
|
|
+ next: {
|
|
|
+ translate: ['100%', 0, 0]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prev: {
|
|
|
+ shadow: true,
|
|
|
+ translate: [0, 0, -800],
|
|
|
+ rotate: [180, 0, 0]
|
|
|
+ },
|
|
|
+ next: {
|
|
|
+ shadow: true,
|
|
|
+ translate: [0, 0, -800],
|
|
|
+ rotate: [-180, 0, 0]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prev: {
|
|
|
+ shadow: true,
|
|
|
+ translate: ['-125%', 0, -800],
|
|
|
+ rotate: [0, 0, -90]
|
|
|
+ },
|
|
|
+ next: {
|
|
|
+ shadow: true,
|
|
|
+ translate: ['125%', 0, -800],
|
|
|
+ rotate: [0, 0, 90]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prev: {
|
|
|
+ shadow: true,
|
|
|
+ origin: 'right center',
|
|
|
+ translate: ['5%', 0, -200],
|
|
|
+ rotate: [0, -100, 0]
|
|
|
+ },
|
|
|
+ next: {
|
|
|
+ origin: 'left center',
|
|
|
+ translate: ['-5%', 0, -200],
|
|
|
+ rotate: [0, 100, 0]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ prev: {
|
|
|
+ scale: 0.3,
|
|
|
+ opacity: 0.4
|
|
|
+ },
|
|
|
+ next: {
|
|
|
+ opacity: 0.4,
|
|
|
+ scale: 0.3
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ const swiperType = ref(effects[2])
|
|
|
+ // 上一个知识点, 下一个知识点
|
|
|
+ const handlePreAndNext = (type: string) => {
|
|
|
+ setTimeout(() => {
|
|
|
+ if (type === 'up') {
|
|
|
+ // swiperRef.value?.allowSlidePrev()
|
|
|
+
|
|
|
+ // ;(document.querySelector('.swiper-button-prev') as any)?.click()
|
|
|
+ // swiperDom.value.navigation.prevEl.click()
|
|
|
+ swiperDom.value.slidePrev(800)
|
|
|
+ } else {
|
|
|
+ // swiperRef.value?.allowSlideNext()
|
|
|
+
|
|
|
+ // ;(document.querySelector('.swiper-button-next') as any)?.click()
|
|
|
+ // swiperDom.value.navigation.nextEl.click()
|
|
|
+ // const nextKonwledgeId = data.itemList[popupData.activeIndex + 1].knowledgePointId
|
|
|
+ // console.log(nextKonwledgeId === popupData.tabActive)
|
|
|
+ // if (nextKonwledgeId === popupData.tabActive) {
|
|
|
+ // swiperType.value = effects[2]
|
|
|
+ // } else {
|
|
|
+ // swiperType.value = effects[3]
|
|
|
+ // }
|
|
|
+
|
|
|
+ swiperDom.value.slideNext(800)
|
|
|
+ }
|
|
|
+ }, 400)
|
|
|
+ }
|
|
|
+
|
|
|
return () => (
|
|
|
<div class={styles.playContent}>
|
|
|
<div class={styles.coursewarePlay} style={{ width: parentContainer.width }}>
|
|
|
- <Swipe
|
|
|
+ {/* <swiper :modules="modules" :pagination="{ clickable: true }">
|
|
|
+ <swiper-slide>Slide 1</swiper-slide>
|
|
|
+ <swiper-slide>Slide 2</swiper-slide>
|
|
|
+ <swiper-slide>Slide 3</swiper-slide>
|
|
|
+ </swiper> */}
|
|
|
+
|
|
|
+ {/*
|
|
|
+ 知识点 翻
|
|
|
+ 素材滑
|
|
|
+ */}
|
|
|
+ <Swiper
|
|
|
style={{ height: '100%' }}
|
|
|
- ref={swipeRef}
|
|
|
- showIndicators={false}
|
|
|
- loop={false}
|
|
|
- duration={0}
|
|
|
- vertical
|
|
|
- lazyRender={true}
|
|
|
- touchable={false}
|
|
|
- initialSwipe={popupData.firstIndex}
|
|
|
- onChange={handleSwipeChange}
|
|
|
+ effect="creative"
|
|
|
+ modules={[Pagination, Navigation, EffectFade, EffectFlip, EffectCreative]}
|
|
|
+ creativeEffect={swiperType.value}
|
|
|
+ direction="vertical"
|
|
|
+ navigation
|
|
|
+ allowTouchMove={false}
|
|
|
+ onSwiper={(swiper: any) => {
|
|
|
+ // console.log(swiper, 'index')
|
|
|
+ swiperDom.value = swiper
|
|
|
+ }}
|
|
|
+ onSlideChange={(swiper: any) => {
|
|
|
+ // console.log(swiper, 'index')
|
|
|
+ handleSwipeChange(swiper.activeIndex)
|
|
|
+ }}
|
|
|
>
|
|
|
{data.itemList.map((m: any, mIndex: number) => {
|
|
|
return (
|
|
|
- <SwipeItem class={styles.swipeItem}>
|
|
|
- <>
|
|
|
- <div
|
|
|
- class={styles.itemDiv}
|
|
|
- onClick={() => {
|
|
|
- clearTimeout(activeData.timer)
|
|
|
- if (Date.now() - activeData.nowTime < 300) {
|
|
|
- handleDbClick(m)
|
|
|
- return
|
|
|
- }
|
|
|
- activeData.nowTime = Date.now()
|
|
|
- activeData.timer = setTimeout(() => {
|
|
|
- activeData.model = !activeData.model
|
|
|
- setModelOpen()
|
|
|
- }, 300)
|
|
|
- }}
|
|
|
- >
|
|
|
- {m.type === 'VIDEO' ? (
|
|
|
- <>
|
|
|
- <video
|
|
|
- playsinline="false"
|
|
|
- muted={m.muted}
|
|
|
- preload="auto"
|
|
|
- class="player"
|
|
|
- data-vid={m.id}
|
|
|
- src={m.content}
|
|
|
- loop={m.loop}
|
|
|
- autoplay={m.autoPlay}
|
|
|
- onLoadedmetadata={(e: Event) => {
|
|
|
- const videoEle = e.target as unknown as HTMLVideoElement
|
|
|
- m.currentTime = videoEle.currentTime
|
|
|
- m.duration = videoEle.duration
|
|
|
- m.videoEle = videoEle
|
|
|
- m.isprepare = true
|
|
|
- }}
|
|
|
- onTimeupdate={(e: Event) => {
|
|
|
- if (!m.isprepare) return
|
|
|
- const videoEle = e.target as unknown as HTMLVideoElement
|
|
|
- m.currentTime = videoEle.currentTime
|
|
|
- m.progress = Number((videoEle.currentTime / m.duration) * 100)
|
|
|
- }}
|
|
|
- onPlay={() => {
|
|
|
- // 播放
|
|
|
- m.paused = false
|
|
|
- console.log('播放')
|
|
|
- setModelOpen()
|
|
|
- // 第一次播放
|
|
|
- if (m.muted) {
|
|
|
- m.muted = false
|
|
|
- m.autoPlay = false
|
|
|
- }
|
|
|
- }}
|
|
|
- onPause={() => {
|
|
|
- //暂停
|
|
|
- clearTimeout(activeData.timer)
|
|
|
- m.paused = true
|
|
|
- }}
|
|
|
- onEnded={() => handleEnded(m)}
|
|
|
- >
|
|
|
- <source src={m.content} type="video/mp4" />
|
|
|
- </video>
|
|
|
- {m.muted && (
|
|
|
- <div class={styles.loadWrap}>
|
|
|
- <Vue3Lottie animationData={playLoadData}></Vue3Lottie>
|
|
|
+ <SwiperSlide class={styles.swipeItem}>
|
|
|
+ <div
|
|
|
+ // class={[styles.itemDiv]}
|
|
|
+
|
|
|
+ class={[styles.itemDiv]}
|
|
|
+ onClick={() => {
|
|
|
+ clearTimeout(activeData.timer)
|
|
|
+ if (Date.now() - activeData.nowTime < 300) {
|
|
|
+ handleDbClick(m)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ activeData.nowTime = Date.now()
|
|
|
+ activeData.timer = setTimeout(() => {
|
|
|
+ activeData.model = !activeData.model
|
|
|
+ setModelOpen()
|
|
|
+ }, 300)
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ {m.type === 'VIDEO' ? (
|
|
|
+ <>
|
|
|
+ <video
|
|
|
+ class={['player']}
|
|
|
+ playsinline="false"
|
|
|
+ muted={m.muted}
|
|
|
+ preload="auto"
|
|
|
+ // class="player"
|
|
|
+ data-vid={m.id}
|
|
|
+ src={m.content}
|
|
|
+ loop={m.loop}
|
|
|
+ autoplay={m.autoPlay}
|
|
|
+ onLoadedmetadata={(e: Event) => {
|
|
|
+ const videoEle = e.target as unknown as HTMLVideoElement
|
|
|
+ m.currentTime = videoEle.currentTime
|
|
|
+ m.duration = videoEle.duration
|
|
|
+ m.videoEle = videoEle
|
|
|
+ m.isprepare = true
|
|
|
+ }}
|
|
|
+ onTimeupdate={(e: Event) => {
|
|
|
+ if (!m.isprepare) return
|
|
|
+ const videoEle = e.target as unknown as HTMLVideoElement
|
|
|
+ m.currentTime = videoEle.currentTime
|
|
|
+ m.progress = Number((videoEle.currentTime / m.duration) * 100)
|
|
|
+ }}
|
|
|
+ onPlay={() => {
|
|
|
+ // 播放
|
|
|
+ m.paused = false
|
|
|
+ console.log('播放')
|
|
|
+ setModelOpen()
|
|
|
+ // 第一次播放
|
|
|
+ if (m.muted) {
|
|
|
+ m.muted = false
|
|
|
+ m.autoPlay = false
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ onPause={() => {
|
|
|
+ //暂停
|
|
|
+ clearTimeout(activeData.timer)
|
|
|
+ m.paused = true
|
|
|
+ }}
|
|
|
+ onEnded={() => handleEnded(m)}
|
|
|
+ >
|
|
|
+ <source src={m.content} type="video/mp4" />
|
|
|
+ </video>
|
|
|
+ {m.muted && (
|
|
|
+ <div class={styles.loadWrap}>
|
|
|
+ <Vue3Lottie animationData={playLoadData}></Vue3Lottie>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+ <div
|
|
|
+ style={{ transform: activeData.model ? '' : 'translateY(100%)' }}
|
|
|
+ class={styles.bottomFixedContainer}
|
|
|
+ onClick={(e: Event) => {
|
|
|
+ e.stopPropagation()
|
|
|
+ setModelOpen()
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div style={{ opacity: m.isprepare ? '1' : '0' }}>
|
|
|
+ <div class={styles.time}>
|
|
|
+ <span>{getSecondRPM(m.currentTime)}</span>
|
|
|
+ <span>{getSecondRPM(m.duration)}</span>
|
|
|
</div>
|
|
|
- )}
|
|
|
- <div
|
|
|
- style={{ transform: activeData.model ? '' : 'translateY(100%)' }}
|
|
|
- class={styles.bottomFixedContainer}
|
|
|
- onClick={(e: Event) => {
|
|
|
- e.stopPropagation()
|
|
|
- setModelOpen()
|
|
|
- }}
|
|
|
- >
|
|
|
- <div style={{ opacity: m.isprepare ? '1' : '0' }}>
|
|
|
- <div class={styles.time}>
|
|
|
- <span>{getSecondRPM(m.currentTime)}</span>
|
|
|
- <span>{getSecondRPM(m.duration)}</span>
|
|
|
- </div>
|
|
|
- <div class={styles.slider}>
|
|
|
- <Slider
|
|
|
- onClick={() => setModelOpen()}
|
|
|
- buttonSize={16}
|
|
|
- step={1}
|
|
|
- modelValue={m.progress}
|
|
|
- onUpdate:modelValue={(val: any) => {
|
|
|
- console.log('val', val)
|
|
|
- m.progress = val
|
|
|
- handleChangeSlider(m)
|
|
|
- }}
|
|
|
- onDragStart={(e: Event) => {
|
|
|
- // 开始拖动,暂停播放
|
|
|
- console.log('开始拖动')
|
|
|
- // 如果拖动之前,视频是播放状态,拖动完毕后继续播放
|
|
|
- if (!m.paused) {
|
|
|
- m.isDrage = true
|
|
|
- }
|
|
|
- handlePaused(m)
|
|
|
- }}
|
|
|
- onDragEnd={(e: Event) => {
|
|
|
- console.log('结束拖动')
|
|
|
- if (m.isDrage) {
|
|
|
- m.isDrage = false
|
|
|
- handlePlay(m)
|
|
|
- }
|
|
|
- }}
|
|
|
- min={0}
|
|
|
- max={100}
|
|
|
- />
|
|
|
- </div>
|
|
|
+ <div class={styles.slider}>
|
|
|
+ <Slider
|
|
|
+ onClick={() => setModelOpen()}
|
|
|
+ buttonSize={16}
|
|
|
+ step={1}
|
|
|
+ modelValue={m.progress}
|
|
|
+ onUpdate:modelValue={(val: any) => {
|
|
|
+ console.log('val', val)
|
|
|
+ m.progress = val
|
|
|
+ handleChangeSlider(m)
|
|
|
+ }}
|
|
|
+ onDragStart={(e: Event) => {
|
|
|
+ // 开始拖动,暂停播放
|
|
|
+ console.log('开始拖动')
|
|
|
+ // 如果拖动之前,视频是播放状态,拖动完毕后继续播放
|
|
|
+ if (!m.paused) {
|
|
|
+ m.isDrage = true
|
|
|
+ }
|
|
|
+ handlePaused(m)
|
|
|
+ }}
|
|
|
+ onDragEnd={(e: Event) => {
|
|
|
+ console.log('结束拖动')
|
|
|
+ if (m.isDrage) {
|
|
|
+ m.isDrage = false
|
|
|
+ handlePlay(m)
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ min={0}
|
|
|
+ max={100}
|
|
|
+ />
|
|
|
</div>
|
|
|
+ </div>
|
|
|
|
|
|
- <div class={styles.actions}>
|
|
|
- <div class={styles.actionBtn}>
|
|
|
- {m.isprepare ? (
|
|
|
- <>
|
|
|
- {m.paused ? (
|
|
|
- <img src={iconplay} onClick={(e: Event) => handlePlay(m)} />
|
|
|
- ) : (
|
|
|
- <img
|
|
|
- src={iconpause}
|
|
|
- onClick={(e: Event) => handlePaused(m)}
|
|
|
- />
|
|
|
- )}
|
|
|
- </>
|
|
|
- ) : (
|
|
|
- <Loading color="#fff" />
|
|
|
- )}
|
|
|
+ <div class={styles.actions}>
|
|
|
+ <div class={styles.actionBtn}>
|
|
|
+ {m.isprepare ? (
|
|
|
+ <>
|
|
|
+ {m.paused ? (
|
|
|
+ <img src={iconplay} onClick={(e: Event) => handlePlay(m)} />
|
|
|
+ ) : (
|
|
|
+ <img src={iconpause} onClick={(e: Event) => handlePaused(m)} />
|
|
|
+ )}
|
|
|
+ </>
|
|
|
+ ) : (
|
|
|
+ <Loading color="#fff" />
|
|
|
+ )}
|
|
|
|
|
|
- {m.loop ? (
|
|
|
- <img
|
|
|
- src={iconLoopActive}
|
|
|
- onClick={(e: Event) => (m.loop = false)}
|
|
|
- />
|
|
|
- ) : (
|
|
|
- <img src={iconLoop} onClick={(e: Event) => (m.loop = true)} />
|
|
|
- )}
|
|
|
- </div>
|
|
|
- <div>{m.name}</div>
|
|
|
+ {m.loop ? (
|
|
|
+ <img
|
|
|
+ src={iconLoopActive}
|
|
|
+ onClick={(e: Event) => (m.loop = false)}
|
|
|
+ />
|
|
|
+ ) : (
|
|
|
+ <img src={iconLoop} onClick={(e: Event) => (m.loop = true)} />
|
|
|
+ )}
|
|
|
</div>
|
|
|
+ <div>{m.name}</div>
|
|
|
</div>
|
|
|
- </>
|
|
|
- ) : m.type === 'IMG' ? (
|
|
|
- <img src={m.content} />
|
|
|
- ) : (
|
|
|
- <MusicScore
|
|
|
- data-vid={m.id}
|
|
|
- music={m}
|
|
|
- onSetIframe={(el: any) => {
|
|
|
- m.iframeRef = el
|
|
|
- }}
|
|
|
- />
|
|
|
- )}
|
|
|
- </div>
|
|
|
- </>
|
|
|
- </SwipeItem>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ ) : m.type === 'IMG' ? (
|
|
|
+ <img src={m.content} />
|
|
|
+ ) : (
|
|
|
+ <MusicScore
|
|
|
+ data-vid={m.id}
|
|
|
+ music={m}
|
|
|
+ onSetIframe={(el: any) => {
|
|
|
+ m.iframeRef = el
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ </SwiperSlide>
|
|
|
)
|
|
|
})}
|
|
|
- </Swipe>
|
|
|
-
|
|
|
+ </Swiper>
|
|
|
+ {/* <Swipe
|
|
|
+ style={{ height: '100%' }}
|
|
|
+ ref={swipeRef}
|
|
|
+ showIndicators={false}
|
|
|
+ loop={false}
|
|
|
+ duration={0}
|
|
|
+ // vertical
|
|
|
+ lazyRender={true}
|
|
|
+ touchable={false}
|
|
|
+ initialSwipe={popupData.firstIndex}
|
|
|
+ onChange={handleSwipeChange}
|
|
|
+ >
|
|
|
+
|
|
|
+ </Swipe> */}
|
|
|
<div
|
|
|
style={{ transform: activeData.model ? '' : 'translateY(-100%)' }}
|
|
|
id="coursePlayHeader"
|
|
@@ -648,7 +788,6 @@ export default defineComponent({
|
|
|
<PlayRecordTime ref={playRef} list={data.itemList} />
|
|
|
)}
|
|
|
</div>
|
|
|
-
|
|
|
<Transition name="right">
|
|
|
{activeData.model && (
|
|
|
<div class={styles.rightFixedBtns}>
|
|
@@ -680,7 +819,6 @@ export default defineComponent({
|
|
|
</div>
|
|
|
)}
|
|
|
</Transition>
|
|
|
-
|
|
|
<Transition name="left">
|
|
|
{activeData.model && (
|
|
|
<div class={styles.leftFixedBtns}>
|
|
@@ -694,7 +832,7 @@ export default defineComponent({
|
|
|
</div>
|
|
|
)}
|
|
|
{popupData.activeIndex != data.itemList.length - 1 && (
|
|
|
- <div class={styles.fullBtn} onClick={() => handlePreAndNext('down')}>
|
|
|
+ <div class={[styles.fullBtn]} onClick={() => handlePreAndNext('down')}>
|
|
|
<span style={{ textAlign: 'center' }}>下一个</span>
|
|
|
<img src={iconDown} />
|
|
|
</div>
|
|
@@ -702,7 +840,6 @@ export default defineComponent({
|
|
|
</div>
|
|
|
)}
|
|
|
</Transition>
|
|
|
-
|
|
|
<Popup
|
|
|
class={styles.popup}
|
|
|
overlayClass={styles.overlayClass}
|