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.
488 lines
13 KiB
488 lines
13 KiB
<template>
|
|
<view class="main_container">
|
|
<view class="show-content" @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd">
|
|
<view v-for="(item, index) in show_materials" :key="index" :class="['show-item', item.material_type == 1 && itemIndex == index ? 'show-video' : '']">
|
|
<image
|
|
:class="['show-img', 'animate__animated', item.material_type == 0 ? item.effect : '']"
|
|
v-show="item.material_type == 0 && itemIndex == index"
|
|
:src="linkUrl"
|
|
mode="aspectFill"
|
|
></image>
|
|
<!-- :autoplay="autoplay" -->
|
|
<video
|
|
:id="'video' + index"
|
|
v-if="item.material_type == 1 && itemIndex == index"
|
|
:src="linkUrl"
|
|
:controls="false"
|
|
:autoplay="autoplay"
|
|
:enable-progress-gesture="false"
|
|
:enable-play-gesture="false"
|
|
object-fit="contain"
|
|
show-center-play-btn="false"
|
|
@play="playEvent"
|
|
@ended="videoPlayEnd"
|
|
@waiting="waitingVideo"
|
|
@loadeddata="loading"
|
|
@timeupdate="timeUpdate"
|
|
initial-time="initial_time"
|
|
>
|
|
<!-- <cover-view
|
|
style="z-index:99;position: fixed;width:100%;height:100%;top:0;left:0;display:flex; justify-content:center; align-items:center;">
|
|
<image style="width: 40px;height: 40px;"></image>
|
|
</cover-view> -->
|
|
</video>
|
|
</view>
|
|
</view>
|
|
<!-- <swiper @change="changeMaterial()" style="height: 100%;">
|
|
<swiper-item v-for="(item, index) in show_materials" :key="index" :class="['show-item', item.material_type == 1 && itemIndex == index ? 'show-video' : '']">
|
|
<view class="item" v-if="item.material_type == 1 && itemIndex == index">
|
|
<video id="myVideo" ref="myVideo"
|
|
:src="linkUrl" :autoplay="autoplay" :controls="false" :enable-progress-gesture="false" object-fit="contain" @ended="videoPlayEnd"></video>
|
|
<cover-view
|
|
style="z-index:99;position: fixed;width:100%;height:100%;top:0;left:0;display:flex; justify-content:center; align-items:center;">
|
|
<image style="width: 40px;height: 40px;"></image>
|
|
</cover-view>
|
|
</view>
|
|
<view class="item" v-if="item.material_type == 0 && itemIndex == index">
|
|
<image :src="linkUrl" :class="['show-img', 'animate__animated', item.material_type == 0 ? item.effect:'']"></image>
|
|
</view>
|
|
</swiper-item>
|
|
</swiper> -->
|
|
<view class="show-audio"></view>
|
|
<view style="position:absolute; bottom:55.55rpx; left: 69.44rpx; color: #fff; z-index: 99999;">{{ infoTxt }}--{{ audioName }}</view>
|
|
|
|
<!-- <view v-if="!deviceInfoShow" class="local-data">
|
|
<text class="title">欢迎使用数字新视窗</text>
|
|
<view class="data-info">设备ID : 123456789</view>
|
|
<view class="data-info">设备账号 : 123456789</view>
|
|
<view class="data-info">设备名称 : CVBBN2</view>
|
|
<view class="count-down" @click="deviceInfoShow=true">{{ count }}</view>
|
|
</view> -->
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import one from './show2.js';
|
|
let innerAudioContext = uni.createInnerAudioContext();
|
|
export default {
|
|
components: {},
|
|
data() {
|
|
return {
|
|
// 已登录情况显示6S得设备信息
|
|
count: 6,
|
|
deviceInfoShow: false,
|
|
autoplay: false,
|
|
// 素材
|
|
materialsCont: [],
|
|
show_materials: [],
|
|
contentIndex: 0,
|
|
itemIndex: 0,
|
|
linkUrl: '',
|
|
timer: null,
|
|
duration: null,
|
|
audioSrc: null,
|
|
audioName: null,
|
|
itemLength: [],
|
|
flagIndex: 0,
|
|
infoTxt: '',
|
|
video_real_time: 0,
|
|
nitial_time: '',
|
|
// 刚触碰的时间
|
|
startTime: 0,
|
|
// 刚触碰的位置
|
|
startPosition: 0,
|
|
// 结束的位置
|
|
endPosition: 0,
|
|
startY: 0,
|
|
startX: 0,
|
|
elePosition: null,
|
|
isAutoSwitch: true,
|
|
moveX: 0, //滑动的x轴距离
|
|
moveY: 0, //滑动的y轴距离
|
|
like_state: 0 //-1:左滑,0:没滑动,1:右滑
|
|
};
|
|
},
|
|
onLoad() {
|
|
const _this = this;
|
|
let result = one.data.data;
|
|
this.materialsCont = result;
|
|
this.materialsCont.map(item => {
|
|
this.itemLength = this.itemLength.concat(item.show_materials.length);
|
|
this.show_materials = this.show_materials.concat(item.show_materials);
|
|
});
|
|
// 初始化
|
|
this.changIndex();
|
|
},
|
|
onReady: function(res) {
|
|
const videoId = 'video'+this.itemIndex
|
|
this.videoCtx = uni.createVideoContext(videoId)
|
|
},
|
|
created() {
|
|
this.auto();
|
|
},
|
|
mounted() {
|
|
// this.countdown();
|
|
this.changeMaterial();
|
|
},
|
|
methods: {
|
|
// 素材切换
|
|
touchStart(event) {
|
|
this.startX = event.touches[0].pageX;
|
|
this.startY = event.touches[0].pageY;
|
|
console.log('开始触摸:', this.startX, this.startY);
|
|
},
|
|
touchMove(event) {
|
|
let currentX = event.touches[0].pageX;
|
|
let currentY = event.touches[0].pageY;
|
|
let moveX = currentX - this.startX;
|
|
let moveY = currentY - this.startY;
|
|
let text = '';
|
|
let state = 0; //-1:左滑,0:没滑动,1:右滑
|
|
// //左右方向滑动
|
|
if (Math.abs(moveX) > Math.abs(moveY)) {
|
|
if (moveX < -10) {
|
|
text = '左滑';
|
|
state = 1;
|
|
} else if (moveX > 10) {
|
|
text = '右滑';
|
|
state = -1;
|
|
}
|
|
} else {
|
|
//上下方向滑动
|
|
if (moveY < 0) {
|
|
text = '上滑';
|
|
state = -2;
|
|
} else if (moveY > 0) {
|
|
text = '下滑';
|
|
state = 2;
|
|
}
|
|
}
|
|
this.like_state = state;
|
|
this.moveX = moveX;
|
|
this.moveY = moveY;
|
|
console.log('开始滑动:', this.moveX, this.moveY, this.like_state);
|
|
},
|
|
touchEnd(event) {
|
|
console.log(`移动距离:${Math.abs(this.moveX)}`);
|
|
// if (Math.abs(this.moveX) > 60 ) {
|
|
// if (this.like_state == 1) {
|
|
// this.itemIndex++;
|
|
// this.flagIndex++;
|
|
// this.isAutoSwitch = true;
|
|
// } else if (this.like_state == -1) {
|
|
// this.itemIndex--;
|
|
// this.flagIndex--;
|
|
// this.isAutoSwitch = false;
|
|
// }
|
|
// this.changIndex();
|
|
// }
|
|
if (Math.abs(this.moveY) > 60) {
|
|
if (this.like_state == -2) {
|
|
this.itemIndex++;
|
|
this.flagIndex++;
|
|
this.isAutoSwitch = true;
|
|
} else if (this.like_state == 2) {
|
|
this.itemIndex--;
|
|
this.flagIndex--;
|
|
this.isAutoSwitch = false;
|
|
}
|
|
this.changIndex();
|
|
}
|
|
},
|
|
// 自动切换
|
|
changeMaterial() {
|
|
const _this = this;
|
|
clearInterval(_this.timer);
|
|
_this.timer = setInterval(() => {
|
|
_this.duration -= 1;
|
|
if (_this.duration == 0) {
|
|
_this.itemIndex++;
|
|
_this.flagIndex++;
|
|
this.changIndex();
|
|
}
|
|
}, 1000);
|
|
},
|
|
changIndex() {
|
|
const _this = this;
|
|
_this.linkUrl = ''
|
|
if (_this.itemIndex == this.show_materials.length) {
|
|
// clearInterval(_this.timer);
|
|
this.itemIndex = 0;
|
|
this.flagIndex = 0;
|
|
this.contentIndex = 0;
|
|
}
|
|
if (this.itemIndex == -1) {
|
|
this.itemIndex = this.show_materials.length - 1;
|
|
this.contentIndex = this.itemLength.length - 1;
|
|
this.flagIndex = this.itemLength[this.contentIndex];
|
|
}
|
|
if (this.flagIndex == 0) {
|
|
this.contentIndex--;
|
|
this.flagIndex = this.itemLength[this.contentIndex];
|
|
}
|
|
_this.duration = this.show_materials[this.itemIndex].duration;
|
|
_this.linkUrl = this.show_materials[this.itemIndex].deposit_url;
|
|
if (this.show_materials[this.itemIndex].bgm_url) {
|
|
_this.audioSrc = this.show_materials[this.itemIndex].bgm_url;
|
|
_this.audioName = this.show_materials[this.itemIndex].bgm_name;
|
|
} else {
|
|
if (this.contentIndex == this.itemLength.length) {
|
|
this.flagIndex = 0;
|
|
this.contentIndex = 0;
|
|
} else {
|
|
if (this.isAutoSwitch) {
|
|
if (this.flagIndex == this.itemLength[this.contentIndex]) {
|
|
this.flagIndex = 0;
|
|
this.contentIndex++;
|
|
}
|
|
}
|
|
}
|
|
if (this.materialsCont[this.contentIndex].bgm_main) {
|
|
this.audioSrc = this.materialsCont[this.contentIndex].bgm_main;
|
|
this.audioName = this.materialsCont[this.contentIndex].bgm_name;
|
|
console.log('audioSrc', this.audioSrc);
|
|
console.log('audioName', this.audioName);
|
|
}
|
|
}
|
|
innerAudioContext = uni.getBackgroundAudioManager();
|
|
this.playVoice(this.audioSrc);
|
|
if (this.show_materials[this.itemIndex].material_type == 1) {
|
|
innerAudioContext.destroy()
|
|
}
|
|
},
|
|
// 视频
|
|
videoPlayEnd() {
|
|
console.log('end-video')
|
|
this.itemIndex++;
|
|
this.flagIndex++;
|
|
this.changIndex();
|
|
},
|
|
auto() {
|
|
setTimeout(()=>{
|
|
this.autoplay = true;
|
|
},500)
|
|
},
|
|
playEvent(e) {
|
|
console.log("play_video")
|
|
console.log(e);
|
|
let currentId = e.target.id; // 获取当前视频id
|
|
console.log('currentId', currentId);
|
|
this.videoCtx = uni.createVideoContext(currentId);
|
|
// innerAudioContext.destroy()
|
|
// innerAudioContext.stop();
|
|
// innerAudioContext.src = ''
|
|
},
|
|
loading(){
|
|
console.log('play_loading')
|
|
},
|
|
waitingVideo(){
|
|
console.log('waiting-video')
|
|
this.videoCtx.pause()
|
|
},
|
|
timeupdateEvent(event) {
|
|
// this.currentTime = event.detail.currentTime;
|
|
console.log('timeupdateEvent')
|
|
},
|
|
// 禁止拖动进度条快进
|
|
timeUpdate(e) {
|
|
console.log(e)
|
|
var isReady = 1; // 是否开启可以视频快进 1 禁止开启
|
|
//跳转到指定播放位置 initial-time 时间为秒
|
|
let that = this;
|
|
//播放的总时长
|
|
var duration = e.detail.duration;
|
|
//实时播放进度 秒数
|
|
var currentTime = parseInt(e.detail.currentTime);
|
|
//当前视频进度
|
|
// console.log("视频播放到第" + currentTime + "秒")//查看正在播放时间,以秒为单位
|
|
if (that.video_real_time == 0) {
|
|
var jump_time = parseInt(that.initial_time) + parseInt(that.video_real_time);
|
|
} else {
|
|
var jump_time = parseInt(that.video_real_time);
|
|
}
|
|
if (isReady == 1) {
|
|
if (currentTime > jump_time && currentTime - jump_time > 3) {
|
|
// let videoContext = uni.createVideoContext(e.target.id);
|
|
this.videoCtx.pause()
|
|
this.videoCtx.seek(0);
|
|
uni.showToast({
|
|
title: '未完整看完该视频,不能快进',
|
|
icon: 'none',
|
|
duration: 2000
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
that.video_real_time = currentTime; //实时播放进度
|
|
},
|
|
// 音频
|
|
playVoice(src) {
|
|
if (innerAudioContext != undefined) {
|
|
innerAudioContext.stop();
|
|
}
|
|
innerAudioContext = uni.getBackgroundAudioManager();
|
|
// #ifdef APP-PLUS
|
|
innerAudioContext.stop();
|
|
innerAudioContext.src = src;
|
|
console.log('src',src)
|
|
innerAudioContext.autoplay = true;
|
|
innerAudioContext.loop = true;
|
|
innerAudioContext.onPlay(() => {
|
|
this.infoTxt = '';
|
|
this.infoTxt = '开始播放';
|
|
console.log('开始播放');
|
|
innerAudioContext.src = this.audioSrc
|
|
innerAudioContext.seek(0)
|
|
console.log(plus.device.getVolume())
|
|
});
|
|
innerAudioContext.onError(res => {
|
|
console.log(res.errMsg);
|
|
console.log(res.errCode);
|
|
innerAudioContext.src = ''
|
|
// innerAudioContext.stop();
|
|
});
|
|
innerAudioContext.onPause(function() {
|
|
console.log('onPause');
|
|
});
|
|
innerAudioContext.onStop(() => {
|
|
//暂停监听
|
|
this.infoTxt = '停止';
|
|
console.log('停止');
|
|
innerAudioContext.src = ''
|
|
// innerAudioContext.stop();
|
|
});
|
|
innerAudioContext.onEnded(() => {
|
|
this.infoTxt = '音频自然播放结束事件';
|
|
console.log('音频自然播放结束事件');
|
|
// innerAudioContext.src = ''
|
|
// innerAudioContext.destroy()
|
|
console.log(this.itemIndex)
|
|
console.log(this.audioSrc)
|
|
innerAudioContext.src = this.audioSrc
|
|
innerAudioContext.seek(0)
|
|
innerAudioContext.play()
|
|
});
|
|
// #endif
|
|
},
|
|
countdown() {
|
|
this.count = 6;
|
|
const timer = setInterval(() => {
|
|
this.count -= 1;
|
|
if (this.count < 1) {
|
|
clearInterval(timer);
|
|
this.deviceInfoShow = true;
|
|
console.log('倒计时结束');
|
|
}
|
|
}, 1000);
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style scoped>
|
|
.main_container {
|
|
position: relative;
|
|
overflow: hidden;
|
|
background: #000;
|
|
}
|
|
.show-item {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
.show-item .show-img {
|
|
width: 100%;
|
|
height: 100vh;
|
|
object-fit: cover;
|
|
}
|
|
.show-item uni-video {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
.show-video {
|
|
width: 100%;
|
|
height: 100vh;
|
|
}
|
|
.show-audio {
|
|
position: fixed;
|
|
bottom: 79.16rpx;
|
|
right: 46.52rpx;
|
|
width: 159.72rpx;
|
|
height: 152.08rpx;
|
|
background: url(~@/static/images/an-yy.png) no-repeat;
|
|
background-size: cover;
|
|
}
|
|
.show-audio uni-image {
|
|
width: 159.72rpx;
|
|
height: 152.08rpx;
|
|
}
|
|
.local-data {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 50%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
width: 625rpx;
|
|
height: 555.55rpx;
|
|
transform: translate(-50%, -50%);
|
|
font-size: 27.77rpx;
|
|
color: #333;
|
|
border-radius: 27.77rpx;
|
|
background: rgba(255, 255, 255, 0.85);
|
|
}
|
|
.title {
|
|
margin-bottom: 32.63rpx;
|
|
font-size: 56.94rpx;
|
|
text-align: center;
|
|
}
|
|
.data-info {
|
|
padding: 0 83.33rpx;
|
|
margin-bottom: 32.63rpx;
|
|
}
|
|
.count-down {
|
|
position: absolute;
|
|
right: 34.72rpx;
|
|
top: 27.77rpx;
|
|
width: 48.61rpx;
|
|
height: 48.61rpx;
|
|
font-size: 30.55rpx;
|
|
text-align: center;
|
|
line-height: 48.61rpx;
|
|
border: 1px solid #333;
|
|
border-radius: 50%;
|
|
}
|
|
.swiper {
|
|
height: 100vh;
|
|
}
|
|
.item {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
.mask {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
bottom: 0;
|
|
right: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: rgba(0, 0, 0, 0.3);
|
|
z-index: 999;
|
|
}
|
|
.controls-title {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
bottom: 0;
|
|
right: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: rgba(0, 0, 0, 0.3);
|
|
text-align: center;
|
|
color: #ffffff;
|
|
border: 10px solid #fff;
|
|
z-index: 9999;
|
|
}
|
|
</style>
|