| | |
| | | :ref="'video'+index" |
| | | :src="item.videoUrl" |
| | | :autoplay="index === currentIndex" |
| | | :controls="false" |
| | | :controls="isControls" |
| | | :loop="true" |
| | | :object-fit="item.videoFit" |
| | | :enable-progress-gesture="false" |
| | | :show-center-play-btn="false" |
| | | :show-progress="true" |
| | | :show-fullscreen-btn="true" |
| | | :show-progress="false" |
| | | :show-fullscreen-btn="isControls" |
| | | :show-play-btn="isControls" |
| | | :show-mute-btn="false" |
| | | class="video-item" |
| | | |
| | | @fullscreenchange="onFullscreenChange" |
| | | @play="onPlay(item.id, index)" |
| | | @pause="onPause(index)" |
| | | @ended="onEnded(index)" |
| | |
| | | @loadedmetadata="onLoadedMetadata($event)" |
| | | @waiting="videoWaiting(index)" |
| | | ></video> |
| | | <view class="fullscreen-btn"> |
| | | <image |
| | | class="fullscreen-icon" |
| | | :src="isFullScreen ? off_screen : on_screen" |
| | | mode="aspectFit" |
| | | @click="requestFullScreen('video'+index,item)" |
| | | ></image> |
| | | </view> |
| | | <!-- 自定义控制条 --> |
| | | <view |
| | | @touchstart.stop="handleTouchStart" |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <view style="width: 100%; height: 100%;" v-else-if="item.videoContentType === 'img'"> |
| | | <uni-swiper-dot |
| | | :info="item.imgs" |
| | |
| | | <view class="video-info" :style="{bottom: marginBottom + 20 + 'px'}"> |
| | | <view style="width: 100%; position: relative;"> |
| | | <text class="video-author">@{{item.authorName}}</text> |
| | | <text class="iconfont" @click="jumpToSearch" style="position: absolute;right: 45px;"></text> |
| | | <text class="iconfont" @click="jumpToSearch" style="position: absolute;right: 42px;bottom: 50rpx;"></text> |
| | | </view> |
| | | <view style="width: 100%;word-wrap: break-word;white-space: normal;overflow-wrap: break-word;"> |
| | | <text class="video-title">{{item.title}}</text> |
| | |
| | | import { getUserInfo } from "@/api/members"; |
| | | import storage from "@/utils/storage.js"; |
| | | import TopBar from "@/components/TopBar.vue"; |
| | | import { nextTick } from "vue"; |
| | | |
| | | export default { |
| | | components: {TopBar}, |
| | |
| | | }, |
| | | data() { |
| | | return { |
| | | isControls:false, |
| | | on_screen: require('@/pages/tabbar/index/static/on_screen.png'), |
| | | off_screen: require('@/pages/tabbar/index/static/off_screen.png'), |
| | | isFullScreen:false, |
| | | isTouch:false, |
| | | userId :'', |
| | | currentImgIndex: 0, // 播放到第几张图--索引 |
| | |
| | | path: `/pages/tabbar/index/home?videoId=${videoInfo.id}&userId=${userInfo.id}`, |
| | | } |
| | | }, |
| | | methods: { |
| | | methods: { |
| | | requestFullScreen(id,item){ |
| | | console.log(item) |
| | | |
| | | const videoContext = uni.createVideoContext(id, this) |
| | | // 根据视频方向决定全屏方向 |
| | | const direction = this.shouldUseLandscape(item) ? 90 : 0; |
| | | |
| | | // 先暂停视频(避免切换时的声音问题) |
| | | // videoContext.pause(); |
| | | |
| | | // 请求全屏 |
| | | videoContext.requestFullScreen({ |
| | | direction: direction, |
| | | }); |
| | | |
| | | |
| | | }, |
| | | shouldUseLandscape(item) { |
| | | if(item.videoFit === 'cover'){ |
| | | return false |
| | | } |
| | | // 默认横屏(根据业务需求调整) |
| | | return true; |
| | | }, |
| | | // 全屏状态变化事件 |
| | | onFullscreenChange(e) { |
| | | console.log('全屏状态变化:', e.detail.fullScreen) |
| | | if(e.detail.fullScreen){ |
| | | this.isControls = true; |
| | | }else{ |
| | | this.isControls = false; |
| | | } |
| | | }, |
| | | getUserId(){ |
| | | const {id} = uni.getStorageSync('user_info_obj_dev') |
| | | this.userId = id; |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .fullscreen-btn { |
| | | width: 60rpx; |
| | | height: 60rpx; |
| | | border-radius: 50%; |
| | | background-color: rgba(0, 0, 0, 0.4); |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | z-index: 999; |
| | | backdrop-filter: blur(10rpx); |
| | | border: 1rpx solid rgba(255, 255, 255, 0.2); |
| | | margin-top: -90rpx; |
| | | margin-left: 15rpx; |
| | | } |
| | | /* 图标样式 */ |
| | | .fullscreen-icon { |
| | | width: 36rpx; |
| | | height: 36rpx; |
| | | opacity: 0.9; |
| | | } |
| | | ::v-deep .custom-tabbar { |
| | | border-top: none !important; |
| | | } |
| | |
| | | |
| | | .video-item { |
| | | width: 100%; |
| | | height: 100%; |
| | | height: 70%; |
| | | /* object-fit: cover; */ |
| | | } |
| | | .play-icon { |