You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
263 lines
6.9 KiB
263 lines
6.9 KiB
<template>
|
|
<view>
|
|
<swiper class="swiper" :current="currentIndex" :vertical="true" @change="handleSwiperChange">
|
|
<swiper-item v-for="(item, index) in swiperItems" :key="index" v-if="index < indexShow">
|
|
<view :class="['swiper-item',{'swiper-item1-10': item.images}]"
|
|
:style="{ backgroundImage: `url(${item.imageUrl})` }" @click="changeIndex(index)">
|
|
<!-- 如果是第一章的第10个swiper-item,显示图片并绑定点击事件 -->
|
|
<template v-if="item.images">
|
|
<image v-for="(image, imgIndex) in item.images" :key="imgIndex" :src="image.src"
|
|
mode="aspectFill"
|
|
@click="setStorage(imgIndex);gotoPath(item.link.replace('{index}', imgIndex + item.linkIndex))">
|
|
</image>
|
|
</template>
|
|
<!-- 视频 -->
|
|
<template v-if="index == 3">
|
|
<video src="https://des.dayunyuanjian.cn/epicSoul/bmzm.mp4" @play="handleVideoPlay"
|
|
@pause="handleVideoPause" @ended="handleVideoEnded" style="width: 100vw;height: 30vh;"
|
|
objectFit="cover"></video>
|
|
</template>
|
|
<!-- 动图 -->
|
|
<template v-if="index == 8">
|
|
<image src="https://des.dayunyuanjian.cn/epicSoul/bmzm/chapter1/img7s.gif" mode="widthFix"
|
|
style="width: 100vw;"></image>
|
|
</template>
|
|
</view>
|
|
</swiper-item>
|
|
</swiper>
|
|
<MusicControl />
|
|
<NavMenu :nav-index="0" @jump-to-page="handleJumpToPage" />
|
|
<AudioControl audioSrc="https://des.dayunyuanjian.cn/data/2025/09/05/9875a62d-14ef-481e-b88f-19c061478ce6.MP3" />
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import AudioControl from '@/components/AudioControl.vue';
|
|
import MusicControl from '@/components/MusicControl.vue';
|
|
import NavMenu from '../components/NavMenu.vue';
|
|
export default {
|
|
components: {
|
|
MusicControl,
|
|
NavMenu,
|
|
AudioControl
|
|
},
|
|
data() {
|
|
return {
|
|
currentIndex: 0,
|
|
// 禁止滑动到的索引
|
|
forbiddenIndex: 2,
|
|
initialIndex: 1,
|
|
popupIndex: 1,
|
|
// 视频播放前的状态记录
|
|
beforeVideoState: {
|
|
audioWasPlaying: false,
|
|
bgMusicWasPlaying: false
|
|
},
|
|
// 抽象出swiper-item的数据
|
|
swiperItems: [{
|
|
imageUrl: `https://des.dayunyuanjian.cn/epicSoul/bmzm/index/index1.png`
|
|
},
|
|
{
|
|
imageUrl: 'https://des.dayunyuanjian.cn/epicSoul/bmzm/index/index5.png'
|
|
},
|
|
// 第一章
|
|
...Array.from({
|
|
length: 9
|
|
}, (_, i) => ({
|
|
imageUrl: `https://des.dayunyuanjian.cn/epicSoul/bmzm/chapter1/img${i + 1}.png`
|
|
})),
|
|
{
|
|
imageUrl: 'https://des.dayunyuanjian.cn/epicSoul/bmzm/chapter1/img10.png',
|
|
images: Array.from({
|
|
length: 4
|
|
}, (_, i) => ({
|
|
src: `https://des.dayunyuanjian.cn/epicSoul/bmzm/chapter1/img10-${i + 1}.png`
|
|
})),
|
|
link: '/bmzm/chapter2/index?index={index}',
|
|
linkIndex: 11
|
|
}
|
|
],
|
|
indexShow: 3
|
|
};
|
|
},
|
|
onLoad(option) {
|
|
this.initialIndex = option.index;
|
|
// 更新第一个swiper-item的图片路径
|
|
this.swiperItems[0].imageUrl =
|
|
`https://des.dayunyuanjian.cn/epicSoul/bmzm/index/index${this.initialIndex}.png`;
|
|
},
|
|
methods: {
|
|
touchmove() {
|
|
return this.currentIndex == 2 ? true : false
|
|
},
|
|
changeIndex(index) {
|
|
if (index == 2) this.currentIndex = 3
|
|
this.indexShow = 100
|
|
},
|
|
handleSwiperChange(e) {
|
|
this.currentIndex = e.detail.current;
|
|
if (this.currentIndex == 2) this.indexShow = 3
|
|
},
|
|
// 存储答案,供后面使用
|
|
setStorage(i) {
|
|
let text = ''
|
|
switch (i) {
|
|
case 0:
|
|
text = '灵感的捕捉者'
|
|
break;
|
|
case 1:
|
|
text = '众智的编织者'
|
|
break;
|
|
case 2:
|
|
text = '智慧的开启者'
|
|
break;
|
|
case 3:
|
|
text = '自然的尊重者'
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
this.appendToStorage('answerObj', {
|
|
answer2: text
|
|
});
|
|
},
|
|
// 视频开始播放
|
|
handleVideoPlay() {
|
|
console.log('视频开始播放');
|
|
|
|
// 记录当前状态
|
|
this.recordCurrentState();
|
|
|
|
// 暂停音频和背景音乐
|
|
this.pauseAllAudio();
|
|
},
|
|
|
|
// 视频暂停
|
|
handleVideoPause() {
|
|
console.log('视频暂停');
|
|
// 恢复之前的状态
|
|
this.restorePreviousState();
|
|
},
|
|
|
|
// 视频播放结束
|
|
handleVideoEnded() {
|
|
console.log('视频播放结束');
|
|
// 恢复之前的状态
|
|
this.restorePreviousState();
|
|
},
|
|
|
|
// 记录当前音频和背景音乐状态
|
|
recordCurrentState() {
|
|
try {
|
|
// 检查音频状态
|
|
if (uni.$globalAudio && uni.$globalAudio.isAudioPlaying()) {
|
|
this.beforeVideoState.audioWasPlaying = true;
|
|
console.log('bmzm chapter1: 记录:音频正在播放');
|
|
} else {
|
|
this.beforeVideoState.audioWasPlaying = false;
|
|
}
|
|
|
|
// 检查背景音乐状态
|
|
const app = getApp();
|
|
if (app && app.globalData && app.globalData.isMusicPlaying) {
|
|
this.beforeVideoState.bgMusicWasPlaying = true;
|
|
console.log('bmzm chapter1: 记录:背景音乐正在播放');
|
|
} else {
|
|
this.beforeVideoState.bgMusicWasPlaying = false;
|
|
}
|
|
} catch (error) {
|
|
console.error('bmzm chapter1: 记录状态失败:', error);
|
|
}
|
|
},
|
|
|
|
// 暂停所有音频
|
|
pauseAllAudio() {
|
|
try {
|
|
// 暂停音频
|
|
if (this.beforeVideoState.audioWasPlaying && uni.$globalAudio) {
|
|
uni.$globalAudio.pauseCurrentAudio();
|
|
console.log('bmzm chapter1: 暂停音频');
|
|
}
|
|
|
|
// 暂停背景音乐
|
|
if (this.beforeVideoState.bgMusicWasPlaying) {
|
|
const app = getApp();
|
|
if (app && app.globalData && app.globalData.bgMusic) {
|
|
app.globalData.bgMusic.pause();
|
|
console.log('bmzm chapter1: 暂停背景音乐');
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('bmzm chapter1: 暂停音频失败:', error);
|
|
}
|
|
},
|
|
|
|
// 恢复之前的状态
|
|
restorePreviousState() {
|
|
try {
|
|
// 恢复音频
|
|
if (this.beforeVideoState.audioWasPlaying && uni.$globalAudio) {
|
|
uni.$globalAudio.playCurrentAudio();
|
|
console.log('bmzm chapter1: 恢复音频播放');
|
|
}
|
|
|
|
// 恢复背景音乐
|
|
if (this.beforeVideoState.bgMusicWasPlaying) {
|
|
const app = getApp();
|
|
if (app && app.globalData && app.globalData.bgMusic) {
|
|
app.globalData.bgMusic.play();
|
|
console.log('bmzm chapter1: 恢复背景音乐播放');
|
|
}
|
|
}
|
|
|
|
// 重置状态记录
|
|
this.beforeVideoState.audioWasPlaying = false;
|
|
this.beforeVideoState.bgMusicWasPlaying = false;
|
|
} catch (error) {
|
|
console.error('bmzm chapter1: 恢复状态失败:', error);
|
|
}
|
|
},
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.swiper {
|
|
width: 100vw;
|
|
height: 100vh;
|
|
}
|
|
|
|
.swiper-item {
|
|
width: 100vw;
|
|
height: 100vh;
|
|
background-size: 100% 100%;
|
|
}
|
|
|
|
.swiper-item1-10 {
|
|
padding: 506rpx 65rpx 370rpx;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
justify-content: space-between;
|
|
|
|
&>image:nth-child(n+1) {
|
|
width: 310rpx;
|
|
height: 316.58rpx;
|
|
}
|
|
|
|
&>image:nth-child(n+2) {
|
|
width: 291.61rpx;
|
|
height: 334.55rpx;
|
|
}
|
|
|
|
&>image:nth-child(n+3) {
|
|
width: 292.61rpx;
|
|
height: 334.55rpx;
|
|
}
|
|
|
|
&>image:nth-child(n+4) {
|
|
width: 309.59rpx;
|
|
height: 317.58rpx;
|
|
margin-top: 15rpx;
|
|
}
|
|
}
|
|
</style>
|