From dcb2bf9882dd4c6b1108d7bfccef431d0c555d2c Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 03 七月 2025 16:09:39 +0800
Subject: [PATCH] 横向视频
---
pages/kitchen/KitchenVideo.vue | 300 +++++++++++++++++++++++++++++++++--------------------------
1 files changed, 166 insertions(+), 134 deletions(-)
diff --git a/pages/kitchen/KitchenVideo.vue b/pages/kitchen/KitchenVideo.vue
index fe07b72..8bafd83 100644
--- a/pages/kitchen/KitchenVideo.vue
+++ b/pages/kitchen/KitchenVideo.vue
@@ -56,6 +56,7 @@
@touchstart.stop="handleTouchStart"
@touchmove.stop="handleTouchMove"
@touchend.stop="handleTouchEnd"
+ :style="{bottom: marginBottom + 'px'}"
class="container">
<!-- 杩涘害鏉� - 鏁翠釜鍖哄煙鍙嫋鍔� -->
<view class="process-warp" :style="{ opacity: showProcess ? 1 : 0 }">
@@ -121,7 +122,7 @@
<!-- 瑙嗛淇℃伅灞� -->
- <view class="video-info">
+ <view class="video-info" :style="{bottom: marginBottom + 20 + 'px'}">
<view>
<text class="video-author">@{{item.authorName}}</text>
</view>
@@ -133,29 +134,33 @@
<!-- 鍙充晶浜掑姩鎸夐挳 -->
<view class="action-buttons" v-if="false">
- <view class="avatar-container">
- <image class="avatar" @click="jumpToHomePage(item.authorId)" :src="item.authorAvatar" mode="aspectFill"></image>
- <!-- 鍏虫敞鍥炬爣 - 浣跨敤缁濆瀹氫綅 -->
- <view v-if="!item.subscribeThisAuthor" class="follow-icon" @click="subscribeAuth(index, item.authorId)">
- <text class="iconfont"></text>
- </view>
- </view>
- <view class="action-item" @click="toggleCollect(item, index)">
- <text class="iconfont" v-if="item.collected"></text>
- <text class="iconfont" v-else></text>
- <text style="font-size: 10px;font-weight: lighter;">{{item.collectNum}}</text>
- </view>
+ <view class="avatar-container">
+ <image class="avatar" @click="jumpToHomePage(item.authorId)" :src="item.authorAvatar" mode="aspectFill"></image>
+ <!-- 鍏虫敞鍥炬爣 - 浣跨敤缁濆瀹氫綅 -->
+ <view v-if="!item.subscribeThisAuthor" class="follow-icon" @click="subscribeAuth(index, item.authorId)">
+ <text class="iconfont"></text>
+ </view>
+ </view>
+ <view class="action-item" @click="toggleThumbsUp(item, index)">
+ <text class="iconfont" v-if="item.thumbsUp"></text>
+ <text class="iconfont" v-else></text>
+ <text style="font-size: 10px;font-weight: lighter;">{{item.thumbsUpNum}}</text>
+ </view>
<view class="action-item" @click="showComments(item)">
- <text class="iconfont"></text>
- <text style="font-size: 10px;font-weight: lighter;">{{item.commentNum}}</text>
- </view>
- <view class="action-item">
- <button open-type="share" class="custom-share-btn" :data-obj="item">
- <text class="iconfont"></text>
- </button>
-
- </view>
- </view>
+ <text class="iconfont"></text>
+ <text style="font-size: 10px;font-weight: lighter;">{{item.commentNum}}</text>
+ </view>
+ <view class="action-item" @click="toggleCollect(item, index)">
+ <text class="iconfont" v-if="item.collected"></text>
+ <text class="iconfont" v-else></text>
+ <text style="font-size: 10px;font-weight: lighter;">{{item.collectNum}}</text>
+ </view>
+ <view class="action-item">
+ <button open-type="share" class="custom-share-btn" :data-obj="item">
+ <text class="iconfont"></text>
+ </button>
+ </view>
+ </view>
</swiper-item>
</swiper>
@@ -247,7 +252,7 @@
</scroll-view>
</uni-drawer>
<view v-if="videoList.length===0" style="display: flex;align-items: center;justify-content: center;background-color: #fff;height: 100%">褰撳墠娌℃湁鍙互鏌ョ湅鐨勮棰�</view>
-
+
<custom-tabbar bgColor="#ffffff" selected="kitchen"></custom-tabbar>
</view>
</template>
@@ -261,7 +266,8 @@
getVideoComments,
addVideoComment,
thubmsUpComment,
- cancelThubmsUpComment
+ cancelThubmsUpComment,
+ changeThumbsUp
} from "@/api/video.js";
import {
changeCollect
@@ -341,15 +347,14 @@
startY: 0,
endY: 0
},
-
- videoContexts: [], // 瑙嗛涓婁笅鏂囧璞¢泦鍚�
loading: false, // 鏄惁姝e湪鍔犺浇
videoQuery: {
pageNumber: 1,
pageSize: 6,
videoFrom: 'recommend',
videoType: 'cook'
- }
+ },
+ marginBottom: 0 // 搴曢儴瀹夊叏鍖哄煙
}
},
onShow() {
@@ -365,15 +370,12 @@
this.startHidenTime = Date.now()
},
onLoad() {
- // 鑾峰彇鐘舵�佹爮楂樺害
- const systemInfo = uni.getSystemInfoSync();
- this.buttonHeight = systemInfo.statusBarHeight;
- this.getKitchenTypeList();
- this.loadVideos();
- },
- onReady() {
- // 鍒濆鍖栬棰戜笂涓嬫枃
- this.initVideoContexts();
+ this.marginBottom = uni.getSystemInfoSync().safeAreaInsets.bottom
+ // 鑾峰彇鐘舵�佹爮楂樺害
+ const systemInfo = uni.getSystemInfoSync();
+ this.buttonHeight = systemInfo.statusBarHeight;
+ this.getKitchenTypeList();
+ this.loadVideos();
},
methods: {
async chooseCategory(id) {
@@ -383,7 +385,7 @@
this.videoQuery.kitchenTypeId = id;
this.videoLoading = false;
this.currentIndex = 0;
-
+
await this.loadVideos()
},
getKitchenTypeList() {
@@ -655,14 +657,6 @@
}
})
},
- // 鍒濆鍖栬棰戜笂涓嬫枃
- initVideoContexts() {
- this.videoContexts = this.videoList.map((_, index) => {
- let videoContent = uni.createVideoContext(`video${index}`, this);
- return videoContent;
- });
- },
-
// 鍔犺浇瑙嗛鏁版嵁
async loadVideos() {
console.log(this.loading, this.videoNoMore,this.videoQuery)
@@ -683,9 +677,6 @@
),
];
}
- this.$nextTick(() => {
- this.initVideoContexts();
- });
this.loading = false;
if (res.data.data.length < this.videoQuery.pageSize) {
this.videoNoMore = true;
@@ -698,29 +689,75 @@
// 婊戝姩鍒囨崲瑙嗛
onSwiperChange(e) {
+ this.videoLoading = false
// 濡傛灉瑙嗛澶勪簬鏆傚仠鐘舵�佸線涓嬪埛瑙嗛锛岄偅涔堥渶瑕佸啀璁$畻涓�娆℃殏鍋滄椂闂�
- if (!this.currentVideoIsPlaying) {
- if (this.startPauseTime !== 0) {
- const duration = Date.now() - this.startPauseTime
- this.totalPauseTime += duration
- }
+ if(!this.currentVideoIsPlaying) {
+ if(this.startPauseTime !== 0) {
+ const duration = Date.now() - this.startPauseTime
+ this.totalPauseTime += duration
+ }
}
// 淇濆瓨涓婁竴涓棰戠殑鎾斁璁板綍
this.savePlayRecord()
const oldIndex = this.currentIndex;
this.currentIndex = e.detail.current;
-
+ const videoContext = uni.createVideoContext(`video${oldIndex}`, this);
// 鏆傚仠涓婁竴涓棰�
- if (this.videoContexts[oldIndex]) {
- this.videoContexts[oldIndex].pause();
- }
-
+ videoContext.pause();
this.startPauseTime = 0;
+
+ // 璁剧疆褰撳墠鎾斁瑙嗛鐨勬�绘椂闀�
+ this.duration = this.videoList[this.currentIndex].videoDuration;
+ this.formartDuration = this.sliderFormatTime(this.duration);
+
// 鎾斁褰撳墠瑙嗛
- if (this.videoContexts[this.currentIndex]) {
- this.videoContexts[this.currentIndex].play();
- }
+ const videoContext1 = uni.createVideoContext(`video${this.currentIndex}`, this);
+ videoContext1.play()
+ // 濡傛灉鍓╀綑瑙嗛涓嶈冻锛岃Е鍙戣姹傝幏鍙栨洿澶氳棰�
+ if (this.videoList.length - 1 < this.currentIndex + this.videoLiveOffset) {
+ this.loadVideos()
+ }
},
+
+ // 寮�濮嬭Е鎽�
+ handleSwiperStart(e) {
+ console.log("寮�濮嬭Е鎽�", e);
+ this.touchXY.startX = e.touches[0].pageX
+ this.touchXY.startY = e.touches[0].pageY
+ },
+ // 瑙︽懜涓�
+ handleSwiperMove(e) {
+ this.touchXY.endX = e.touches[0].pageX
+ this.touchXY.endY = e.touches[0].pageY
+ },
+ // 缁撴潫瑙︽懜
+ handleSwiperEnd(item) {
+ // 闃叉婊戝姩婊氬姩鏉′篃瑙﹀彂璺宠浆
+ if (this.showProcess) {
+ return
+ }
+ const diffX = this.touchXY.endX - this.touchXY.startX
+ const diffY = this.touchXY.endY - this.touchXY.startY
+
+ // 鍒ゆ柇鏄惁鏄í鍚戞粦鍔紙X杞村彉鍖栧ぇ浜嶻杞村彉鍖栵級
+ if (Math.abs(diffX) > Math.abs(diffY)) {
+ if (diffX > 0) {
+ console.log('鍙虫粦')
+ if (item.goodsList && item.goodsList.length > 0) {
+ this.jumpToPay(item.id)
+ }
+ } else {
+ console.log('宸︽粦')
+ }
+ }
+ // 閲嶇疆鍧愭爣
+ this.touchXY = {
+ startX: 0,
+ endX: 0,
+ startY: 0,
+ endY: 0
+ }
+ },
// 鏀惰棌/鍙栨秷鏀惰棌
toggleCollect(item, index) {
@@ -744,6 +781,28 @@
}
})
},
+ // 鐐硅禐/鍙栨秷鐐硅禐
+ toggleThumbsUp(item, index) {
+ let data = {
+ refId: item.id,
+ thumbsUpType: 'video'
+ }
+ const beforeThumbsUp = item.thumbsUp
+ const beforeThumbsUpNum = item.thumbsUpNum
+ if(item.thumbsUp) {
+ this.videoList[index].thumbsUp = false
+ this.videoList[index].thumbsUpNum -= 1
+ } else {
+ this.videoList[index].thumbsUp = true
+ this.videoList[index].thumbsUpNum += 1
+ }
+ changeThumbsUp(data).then(res => {
+ if(res.data.code !== 200) {
+ this.videoList[index].thumbsUp = beforeThumbsUp
+ this.videoList[index].thumbsUpNum = beforeThumbsUpNum
+ }
+ })
+ },
// 鍗曞嚮灞忓箷锛氭殏鍋滄垨缁х画鎾斁
togglePlay(index) {
console.log("鍗曞嚮瑙嗛", index);
@@ -801,7 +860,7 @@
onTimeUpdate(e) {
this.videoLoading = false
this.playRecord.playAt = e.detail.currentTime;
-
+
this.currentTime = e.detail.currentTime;
this.progress = (e.detail.currentTime / this.duration) * 100
},
@@ -812,53 +871,15 @@
this.startProgress = this.progress; // 璁板綍寮�濮嬫椂鐨勮繘搴�
this.startX = e.touches[0].pageX;
console.log("璁板綍寮�濮嬫椂鐨勮繘搴�", this.startProgress);
- this.videoContexts[this.currentIndex].pause()
+ const videoContext = uni.createVideoContext(`video${this.currentIndex}`, this);
+ videoContext.pause()
// this.updateProgress(e);
},
- // 寮�濮嬭Е鎽�
- handleSwiperStart(e) {
- console.log("寮�濮嬭Е鎽�", e);
- this.touchXY.startX = e.touches[0].pageX
- this.touchXY.startY = e.touches[0].pageY
- },
- // 瑙︽懜涓�
- handleSwiperMove(e) {
- this.touchXY.endX = e.touches[0].pageX
- this.touchXY.endY = e.touches[0].pageY
- },
- // 缁撴潫瑙︽懜
- handleSwiperEnd(item) {
- // 闃叉婊戝姩婊氬姩鏉′篃瑙﹀彂璺宠浆
- if (this.showProcess) {
- return
- }
- const diffX = this.touchXY.endX - this.touchXY.startX
- const diffY = this.touchXY.endY - this.touchXY.startY
- // 鍒ゆ柇鏄惁鏄í鍚戞粦鍔紙X杞村彉鍖栧ぇ浜嶻杞村彉鍖栵級
- if (Math.abs(diffX) > Math.abs(diffY)) {
- if (diffX > 0) {
- console.log('鍙虫粦')
- if (item.goodsList && item.goodsList.length > 0) {
- this.jumpToPay(item.id)
- }
- } else {
- console.log('宸︽粦')
- }
- }
- // 閲嶇疆鍧愭爣
- this.touchXY = {
- startX: 0,
- endX: 0,
- startY: 0,
- endY: 0
- }
- },
// 瑙︽懜绉诲姩
handleTouchMove(e) {
if (!this.isDragging || !this.barWidth) return;
clearTimeout(this.processHidenTimer)
- this.videoContexts[this.currentIndex].pause()
this.updateProgress(e);
},
@@ -866,31 +887,31 @@
handleTouchEnd() {
this.isDragging = false;
console.log("婊戝姩缁撴潫", this.duration * this.progress);
- this.videoContexts[this.currentIndex].seek(this.duration * this.progress / 100)
- this.videoContexts[this.currentIndex].play()
+ const videoContext = uni.createVideoContext(`video${this.currentIndex}`, this);
+ videoContext.seek(this.duration * this.progress / 100)
+ videoContext.play()
this.processHidenTimer = setTimeout(() => {
- this.showProcess = false;
- }, 1000);
+ this.showProcess = false;
+ }, 1000);
},
// 鏇存柊杩涘害
updateProgress(e) {
- // 鑾峰彇褰撳墠瑙︽懜鐐筙鍧愭爣
- const currentX = e.touches[0].pageX;
+ // 鑾峰彇褰撳墠瑙︽懜鐐筙鍧愭爣
+ const currentX = e.touches[0].pageX;
- // 璁$畻婊戝姩璺濈(鍍忕礌)
- const deltaX = currentX - this.startX;
+ // 璁$畻婊戝姩璺濈(鍍忕礌)
+ const deltaX = currentX - this.startX;
- // 灏嗗儚绱犺窛绂昏浆鎹负杩涘害澧為噺
- const deltaProgress = (deltaX / this.barWidth) * 100;
- console.log("杩涘害澧為噺", deltaProgress);
- // 璁$畻鏂拌繘搴� = 寮�濮嬫椂鐨勮繘搴� + 婊戝姩澧為噺
- let newProgress = this.startProgress + deltaProgress;
+ // 灏嗗儚绱犺窛绂昏浆鎹负杩涘害澧為噺
+ const deltaProgress = (deltaX / this.barWidth) * 100;
+ // 璁$畻鏂拌繘搴� = 寮�濮嬫椂鐨勮繘搴� + 婊戝姩澧為噺
+ let newProgress = this.startProgress + deltaProgress;
- // 闄愬埗鑼冨洿鍦�0-100涔嬮棿
- newProgress = Math.max(0, Math.min(100, newProgress));
+ // 闄愬埗鑼冨洿鍦�0-100涔嬮棿
+ newProgress = Math.max(0, Math.min(100, newProgress));
- this.progress = newProgress;
+ this.progress = newProgress;
},
// 瑙嗛缂撳啿
videoWaiting(index) {
@@ -901,9 +922,9 @@
},
// 鑾峰彇瑙嗛鎬绘椂闀�
onLoadedMetadata(e) {
- this.duration = e.detail.duration;
- this.formartDuration.push(this.sliderFormatTime(this.duration));
- console.log("瑙嗛鎬绘椂闀�", this.duration);
+ // this.duration = e.detail.duration;
+ // this.formartDuration.push(this.sliderFormatTime(this.duration));
+ // console.log("瑙嗛鎬绘椂闀�", this.duration);
},
// 淇濆瓨鎾斁璁板綍
async savePlayRecord() {
@@ -963,7 +984,6 @@
.video-item {
width: 100%;
height: 100%;
- object-fit: cover;
}
.play-icon {
@@ -1383,7 +1403,7 @@
.progress-text {
margin-top: 10px;
font-size: 14px;
- color: #666;
+ color: #fff;
}
.swiper-box {
@@ -1410,18 +1430,18 @@
}
.typeNavigationItem {
- padding: 24rpx;
- font-size: 28rpx;
- color: black;
- margin-top: 10rpx;
- border-radius: 12rpx;
- border: 1rpx solid gray;
+ padding: 24rpx;
+ font-size: 28rpx;
+ color: black;
+ margin-top: 10rpx;
}
+
.typeNavigationItemCheck {
- background-color: #42b993;
- color: #fff;
- border: 0;
+ color: #ef321e;
+ font-size: 32rpx;
+ font-weight: bold;
+ border: 0;
}
.container ::v-deep .navigationLeft .uni-drawer__content {
@@ -1430,4 +1450,16 @@
background-color: lightpink !important;
}
-</style>
\ No newline at end of file
+
+.custom-share-btn {
+ font-size: unset;
+ background: none;
+ padding: 0;
+ margin: 0;
+ line-height: normal;
+ border: none;
+}
+.custom-share-btn::after {
+ border: none;
+}
+</style>
--
Gitblit v1.8.0