From 4e9d7c0e363d313a273700865afb8b0d665e6c69 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期三, 18 六月 2025 14:11:23 +0800 Subject: [PATCH] 视频相关页面优化、功能bug --- /dev/null | 144 ------------- components/dropdown-menu.vue | 2 pages.json | 6 pages/video/video-play.vue | 433 +++++++++++++++++++++++++++++++------- pages/tabbar/index/home.vue | 2 pages/video/home-page.vue | 44 ++-- 6 files changed, 370 insertions(+), 261 deletions(-) diff --git a/components/dropdown-menu.vue b/components/dropdown-menu.vue index 6dee7c9..066a6d6 100644 --- a/components/dropdown-menu.vue +++ b/components/dropdown-menu.vue @@ -149,7 +149,7 @@ .dropdown-menu { position: absolute; - left: 0; + left: -50rpx; display: inline-block; white-space: nowrap; background-color: #fff; diff --git a/pages.json b/pages.json index ea4a9f3..71ab3f6 100644 --- a/pages.json +++ b/pages.json @@ -26,12 +26,6 @@ "navigationStyle": "custom" // 闅愯棌椤堕儴瀵艰埅鏍� } }, - // { - // "path": "pages/tabbar/index/home1", - // "style": { - // "navigationBarTitleText": "" - // } - // }, { "path": "pages/tabbar/home/index", "style": { diff --git a/pages/tabbar/index/home.vue b/pages/tabbar/index/home.vue index df33ed7..ade53fe 100644 --- a/pages/tabbar/index/home.vue +++ b/pages/tabbar/index/home.vue @@ -916,7 +916,7 @@ .video-info { width: 70%; position: absolute; - bottom: 70px; + bottom: 20px; left: 20px; color: #f8f8f8; z-index: 10; diff --git a/pages/tabbar/index/home1.vue b/pages/tabbar/index/home1.vue deleted file mode 100644 index 1a5edcc..0000000 --- a/pages/tabbar/index/home1.vue +++ /dev/null @@ -1,144 +0,0 @@ -<template> - <!-- 鑷畾涔夋帶鍒舵潯 --> - <view - @touchstart="handleTouchStart" - @touchmove="handleTouchMove" - @touchend="handleTouchEnd" - class="container"> - <!-- 杩涘害鏉� - 鏁翠釜鍖哄煙鍙嫋鍔� --> - <view class="process-warp" :style="{ opacity: showProcess ? 1 : 0 }"> - <!-- 鏄剧ず褰撳墠杩涘害 --> - <view class="progress-text">{{ hasPlayTime }}/{{formartDuration}}</view> - <view - class="progress-bar" - id="progressBar" - > - - <!-- 宸插~鍏呴儴鍒� --> - <view class="progress-fill" :style="{ width: progress + '%' }"></view> - </view> - </view> - </view> -</template> - -<script> -export default { - data() { - return { - startX: 0, - progress: 0, // 瑙嗛杩涘害 - startProgress : 0, // 寮�濮嬫粦鍔ㄦ椂鐨勮繘搴� - barLeft: 0, // 杩涘害鏉″乏杈圭晫浣嶇疆 - barWidth: 0, // 杩涘害鏉″搴� - isDragging: false, // 鏄惁姝e湪鎷栧姩 - processHidenTimer: null, // 杩涘害鏉¢殣钘忓畾鏃跺櫒 - showProcess: false, // 鏄惁鏄剧ず杩涘害鏉� - }; - }, - mounted() { - // 鑾峰彇杩涘害鏉$殑灏哄鍜屼綅缃俊鎭� - this.getBarRect(); - }, - methods: { - // 鑾峰彇杩涘害鏉$殑浣嶇疆鍜屽昂瀵� - getBarRect() { - const query = uni.createSelectorQuery().in(this); - query.select('#progressBar').boundingClientRect(rect => { - if (rect) { - this.barLeft = rect.left; - this.barWidth = rect.width; - } - }).exec(); - }, - - // 瑙︽懜寮�濮� - handleTouchStart(e) { - this.isDragging = true; - this.showProcess = true; - this.startProgress = this.progress; // 璁板綍寮�濮嬫椂鐨勮繘搴� - this.startX = e.touches[0].pageX; - console.log("璁板綍寮�濮嬫椂鐨勮繘搴�", this.startProgress); - this.videoContexts[this.currentIndex].pause() - // this.updateProgress(e); - }, - - // 瑙︽懜绉诲姩 - handleTouchMove(e) { - if (!this.isDragging || !this.barWidth) return; - clearTimeout(this.processHidenTimer) - this.videoContexts[this.currentIndex].pause() - this.updateProgress(e); - }, - - // 瑙︽懜缁撴潫 - 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() - this.processHidenTimer = setTimeout(() => { - this.showProcess = false; - }, 1000); - }, - - // 鏇存柊杩涘害 - updateProgress(e) { - // 鑾峰彇褰撳墠瑙︽懜鐐筙鍧愭爣 - const currentX = e.touches[0].pageX; - - // 璁$畻婊戝姩璺濈(鍍忕礌) - const deltaX = currentX - this.startX; - - // 灏嗗儚绱犺窛绂昏浆鎹负杩涘害澧為噺 - const deltaProgress = (deltaX / this.barWidth) * 100; - console.log("杩涘害澧為噺", deltaProgress); - // 璁$畻鏂拌繘搴� = 寮�濮嬫椂鐨勮繘搴� + 婊戝姩澧為噺 - let newProgress = this.startProgress + deltaProgress; - - // 闄愬埗鑼冨洿鍦�0-100涔嬮棿 - newProgress = Math.max(0, Math.min(100, newProgress)); - - this.progress = newProgress; - } - } -}; -</script> - -<style> -.container { - display: flex; - flex-direction: column; - align-items: center; - position: absolute; - bottom: 0; - width: 100%; - } - - .progress-bar { - position: relative; - width: 100%; - height: 16px; - background-color: #eee; - overflow: hidden; - } - - .progress-fill { - position: absolute; - left: 0; - top: 0; - height: 100%; - background-color: lightgray; - transition: width 0.1s; - } - .process-warp { - width: 100%; - display: flex; - flex-direction: column; - align-items: center; - } - .progress-text { - margin-top: 10px; - font-size: 14px; - color: #666; - } -</style> \ No newline at end of file diff --git a/pages/video/home-page.vue b/pages/video/home-page.vue index 1e29861..76ca651 100644 --- a/pages/video/home-page.vue +++ b/pages/video/home-page.vue @@ -61,12 +61,13 @@ <!-- 瑙嗛鍒楄〃 --> <scroll-view class="video-list" scroll-y :show-scrollbar="false" @scrolltolower="getPage" v-show="currentTab === 'works' && videoList.length > 0"> + <view class="video-container"> <view class="video-item" v-for="(item, index) in videoList" :key="item.id" > - <image class="video-cover" @click="playAuthorVideo(index)" :src="item.coverUrl" mode="aspectFill"></image> + <image class="video-cover" @click="playAuthorVideo(index)" :src="item.videoContentType === 'video' ? item.coverUrl : item.imgs[0]" mode="aspectFill"></image> <view class="video-info"> <view class="video-stats"> <view class="stat"> @@ -83,6 +84,7 @@ </view> </view> </view> + </view> </view> </scroll-view> <scroll-view class="video-list" scroll-y :show-scrollbar="false" @scrolltolower="getPage" v-show="currentTab === 'likes' && collectVideoList.length > 0"> @@ -93,7 +95,7 @@ :key="item.id" @click="playCollectVideo(index)" > - <image class="video-cover" :src="item.coverUrl" mode="aspectFill"></image> + <image class="video-cover" :src="item.videoContentType === 'video' ? item.coverUrl : item.imgs[0]" mode="aspectFill"></image> <view class="video-info"> <view class="video-stats"> <view class="stat"> @@ -301,7 +303,7 @@ }); }, // 鎾斁鏀惰棌瑙嗛 - playAuthorVideo(index) { + playCollectVideo(index) { const playInfo = { videoList: this.collectVideoList, nomore: this.nomoreCollectVideo, @@ -460,16 +462,21 @@ } .video-list { - width: calc(100% - 20rpx); - padding: 0 10rpx; - height: calc(100vh - 554rpx); - background-color: #fff; + width: 100%; + padding: 0 10rpx; + height: calc(100vh - 554rpx); + background-color: #fff; +} + +.video-container { + display: flex; + flex-wrap: wrap; + justify-content: space-between; } .video-item { - width: 50%; - padding: 10rpx; - box-sizing: border-box; + width: 49%; + margin-bottom: 20rpx; position: relative; } @@ -481,15 +488,12 @@ } .video-info { - display: flex; - height: 60rpx; - align-items: center; - font-size: 24rpx; - width: 100%; - padding-right: 20rpx; - box-sizing: border-box; position: absolute; - bottom: 20rpx; + bottom: 10rpx; + left: 0; + right: 0; + padding: 0 10rpx; + box-sizing: border-box; } .video-title { @@ -569,8 +573,4 @@ } } -.video-container { - display: flex; - flex-wrap: wrap -} </style> \ No newline at end of file diff --git a/pages/video/video-play.vue b/pages/video/video-play.vue index d98f74e..4cf61c2 100644 --- a/pages/video/video-play.vue +++ b/pages/video/video-play.vue @@ -9,89 +9,141 @@ @change="onSwiperChange" > <swiper-item v-for="(item, index) in videoList" :key="item.id"> - <!-- 鎾斁鎸夐挳锛堜粎褰撹棰戞殏鍋滄椂鏄剧ず锛� --> - <view - class="play-icon" - @click="togglePlay(index)" - v-if="!currentVideoIsPlaying" - > - <image src="/static/video/play.png" style="width: 45px;height: 45px" mode="aspectFit"></image> - </view> - <video - :id="'video'+index" - :ref="'video'+index" - :src="item.videoUrl" - :autoplay="currentIndex === index" - :controls="false" - :loop="true" - :object-fit="item.objectFit" - class="video-item" - @play="onPlay(item.id, index)" - @pause="onPause(index)" - @ended="onEnded(index)" - @click="togglePlay(index)" - @timeupdate="onTimeUpdate($event)" - ></video> - - <!-- 鎮寕鍟嗗搧閾炬帴灞� --> - <view class="goods-link-warp"> - <view class="goods-link"> - <view class="goods-container"> - <!-- 鍟嗗搧鍥剧墖 --> - <image class="goods-image" :src="item.goods.imageUrl" mode="aspectFill"></image> - - <!-- 鍟嗗搧淇℃伅 --> - <view class="goods-info"> - <text class="goods-name">{{item.goods.name}}</text> - <view class="price-section"> - <text class="current-price">楼{{item.goods.price}}</text> - <text class="original-price" v-if="item.goods.originalPrice">楼{{item.goods.originalPrice}}</text> - </view> - <text class="sales-count">{{item.goods.saleNum}}浜哄凡璐�</text> - </view> - - <!-- 璐拱鎸夐挳 --> - <view class="buy-button"> - <text>璐拱</text> - </view> - </view> - </view> - </view> - - - <!-- 瑙嗛淇℃伅灞� --> - <view class="video-info"> - <view> - <text class="video-author">@{{item.authorName}}</text> - </view> - <view style="width: 100%;word-wrap: break-word;white-space: normal;overflow-wrap: break-word;"> - <text class="video-title">{{item.title}}</text> - <text class="video-tag" v-for="(tag, index) in item.tagList" :key="tag.id">#{{tag.tagName}}</text> - </view> - </view> - - <!-- 鍙充晶浜掑姩鎸夐挳 --> - <view class="action-buttons"> - <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 style="width: 100%;height: 100%;" v-if="item.videoContentType === 'video'"> + <!-- 鎾斁鎸夐挳锛堜粎褰撹棰戞殏鍋滄椂鏄剧ず锛� --> + <view + class="play-icon" + @click="togglePlay(index)" + v-if="!currentVideoIsPlaying" + > + <image src="/static/video/play.png" style="width: 45px;height: 45px" mode="aspectFit"></image> + </view> + <video + :id="'video'+index" + :ref="'video'+index" + :src="item.videoUrl" + :autoplay="currentIndex === index" + :controls="false" + :loop="true" + :object-fit="item.objectFit" + :enable-progress-gesture="false" + class="video-item" + @play="onPlay(item.id, index)" + @pause="onPause(index)" + @ended="onEnded(index)" + @click="togglePlay(index)" + @timeupdate="onTimeUpdate($event)" + @loadedmetadata="onLoadedMetadata($event)" + + ></video> + <!-- 鑷畾涔夋帶鍒舵潯 --> + <view + @touchstart="handleTouchStart" + @touchmove="handleTouchMove" + @touchend="handleTouchEnd" + class="container"> + <!-- 杩涘害鏉� - 鏁翠釜鍖哄煙鍙嫋鍔� --> + <view class="process-warp" :style="{ opacity: showProcess ? 1 : 0 }"> + <!-- 鏄剧ず褰撳墠杩涘害 --> + <view class="progress-text">{{ hasPlayTime }}/{{formartDuration}}</view> + <view + class="progress-bar" + id="progressBar" + > + + <!-- 宸插~鍏呴儴鍒� --> + <view class="progress-fill" :style="{ width: progress + '%' }"></view> + </view> + </view> + </view> + </view> + <view style="width: 100%; height: 100%;" v-else-if="item.videoContentType === 'img'"> + <uni-swiper-dot + :info="item.imgs" + :current="currentImgIndex" + mode="round" + style="width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;" + :dots-styles="{width: 24, bottom: 24,selectedBackgroundColor: 'green', backgroundColor: 'gray'}" + > + <swiper class="swiper-box" @change="imgChange" :autoplay="true" :interval="3000"> + <swiper-item v-for="img in item.imgs" :key="img"> + <view class="swiper-item"> + <!-- 璋冩暣 image 鏍峰紡锛屼娇鍏跺眳涓笖鎸夋瘮渚嬬缉鏀� --> + <image + :src="img" + mode="aspectFit" + style="width: 100%; height: 100%; display: block; margin: 0 auto;" + ></image> + </view> + </swiper-item> + </swiper> + </uni-swiper-dot> + </view> + + + <!-- 鎮寕鍟嗗搧閾炬帴灞� --> + <view class="goods-link-warp" v-if="item.goodsList.length > 0"> + <view class="goods-link"> + <swiper @change="goodsChange" :autoplay="true" :interval="4000" style="height: 120rpx;"> + <swiper-item v-for="goods in item.goodsList" :key="goods.goodsId"> + <view class="goods-container" @click="jumpToPay(item.id)"> + <!-- 鍟嗗搧鍥剧墖 --> + <image class="goods-image" :src="goods.thumbnail" mode="aspectFill"></image> + + <!-- 鍟嗗搧淇℃伅 --> + <view class="goods-info"> + <text class="goods-name">{{goods.goodsName}}</text> + <view class="price-section"> + <text class="current-price">楼{{goods.price}}</text> + <text class="original-price" v-if="goods.originalPrice">楼{{goods.originalPrice}}</text> + </view> + </view> + </view> + </swiper-item> + </swiper> + </view> + </view> + + + <!-- 瑙嗛淇℃伅灞� --> + <view class="video-info"> + <view> + <text class="video-author">@{{item.authorName}}</text> + </view> + <view style="width: 100%;word-wrap: break-word;white-space: normal;overflow-wrap: break-word;"> + <text class="video-title">{{item.title}}</text> + <text class="video-tag" v-for="(tag, index) in item.tagList" :key="tag.id">#{{tag.tagName}}</text> + </view> </view> - <view class="action-item" @click="showComments(item)"> - <text class="iconfont"></text> - <text style="font-size: 10px;font-weight: lighter;">{{item.commentNum}}</text> + + <!-- 鍙充晶浜掑姩鎸夐挳 --> + <view class="action-buttons"> + <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="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> - </view> - - </swiper-item> - </swiper> + + </swiper-item> + </swiper> <!-- 璇勮寮圭獥 --> <uni-popup ref="commentPopup" type="bottom" :is-mask-click="true" @maskClick="closeCommentPopup"> @@ -178,9 +230,29 @@ <script> import { getRecommendVideos, savePlayRecord, subscribe, getVideoComments, addVideoComment, thubmsUpComment, cancelThubmsUpComment } from "@/api/video.js"; import { changeCollect } from "@/api/collect.js"; +import { saveShare } from "@/api/share.js"; +import storage from "@/utils/storage.js"; export default { + computed: { + hasPlayTime() { + return this.sliderFormatTime(this.progress > 0 ? this.duration * this.progress / 100 : 0); + } + }, data() { return { + currentImgIndex: 0, // 鎾斁鍒扮鍑犲紶鍥�--绱㈠紩 + currentGoodsIndex: 0, // 鎾斁鍒扮鍑犱釜鍟嗗搧--绱㈠紩 + currentTime: 0, + formartDuration: '', + duration: 0, + startX: 0, + progress: 0, // 瑙嗛杩涘害 + startProgress : 0, // 寮�濮嬫粦鍔ㄦ椂鐨勮繘搴� + barLeft: 0, // 杩涘害鏉″乏杈圭晫浣嶇疆 + barWidth: 0, // 杩涘害鏉″搴� + isDragging: false, // 鏄惁姝e湪鎷栧姩 + processHidenTimer: null, // 杩涘害鏉¢殣钘忓畾鏃跺櫒 + showProcess: false, // 鏄惁鏄剧ず杩涘害鏉� videoNoMore: false, // 鏄惁杩樻湁鏇村瑙嗛 commentNoMore: false, // 鏄惁杩樻湁鏇村璇勮 commentQuery: { @@ -253,6 +325,7 @@ const playInfo = uni.getStorageSync("playInfo", playInfo); if(playInfo) { this.videoList = playInfo.videoList; + console.log("鎷垮埌鏁版嵁浜�",playInfo); this.videoQuery.pageNumber = playInfo.pageNumber; this.videoNoMore = playInfo.nomore; this.videoQuery.authorId = option.authorId; @@ -267,7 +340,51 @@ // 鍒濆鍖栬棰戜笂涓嬫枃 this.initVideoContexts(); }, + onShareAppMessage(e) { + const userInfo = storage.getUserInfo(); + if(!userInfo) { + console.log("鏈櫥褰曚笉鑳藉垎浜�"); + return + } + const videoInfo = e.target.dataset.obj; + // 淇濆瓨鍒嗕韩璁板綍 + const data = { + shareType: 'video', + refId: videoInfo.id, + shareUser: userInfo.id + } + saveShare(data) + return { + title: videoInfo.title, + path: `/pages/tabbar/index/home?videoId=${videoInfo.id}&userId=${userInfo.id}`, + imageUrl: videoInfo.coverUrl + } + }, methods: { + // 鐐瑰嚮鍟嗗搧璺宠浆 + jumpToPay(videoId) { + uni.navigateTo({ + url: '/pages/video/video-goods-detail?videoId=' + videoId + }); + }, + // 杞挱鍥惧彉鍖� + imgChange(e) { + this.currentImgIndex = e.detail.current; + }, + // 鍟嗗搧杞挱鍥惧彉鍖� + goodsChange(e) { + this.currentGoodsIndex = e.detail.current; + }, + // 鑾峰彇杩涘害鏉$殑浣嶇疆鍜屽昂瀵� + getBarRect() { + const query = uni.createSelectorQuery().in(this); + query.select('#progressBar').boundingClientRect(rect => { + if (rect) { + this.barLeft = rect.left; + this.barWidth = rect.width; + } + }).exec(); + }, // 璺宠浆涓汉涓婚〉 jumpToHomePage(authorId) { uni.navigateTo({ @@ -364,6 +481,12 @@ const input = this.$refs.commentInput; if (input) input.focus(); }); + }, + // 杩涘害鏉℃椂闂存牸寮忓寲 (00:00) + sliderFormatTime(seconds) { + const mins = Math.floor(seconds / 60); + const secs = Math.floor(seconds % 60); + return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; }, // 鏍煎紡鍖栨椂闂� formatTime(time) { @@ -561,6 +684,67 @@ this.videoContexts[this.currentIndex].play(); } }, + + // 鑾峰彇杩涘害鏉$殑浣嶇疆鍜屽昂瀵� + getBarRect() { + const query = uni.createSelectorQuery().in(this); + query.select('#progressBar').boundingClientRect(rect => { + if (rect) { + this.barLeft = rect.left; + this.barWidth = rect.width; + } + }).exec(); + }, + + // 瑙︽懜寮�濮� + handleTouchStart(e) { + this.isDragging = true; + this.showProcess = true; + this.startProgress = this.progress; // 璁板綍寮�濮嬫椂鐨勮繘搴� + this.startX = e.touches[0].pageX; + console.log("璁板綍寮�濮嬫椂鐨勮繘搴�", this.startProgress); + this.videoContexts[this.currentIndex].pause() + // this.updateProgress(e); + }, + + // 瑙︽懜绉诲姩 + handleTouchMove(e) { + if (!this.isDragging || !this.barWidth) return; + clearTimeout(this.processHidenTimer) + this.videoContexts[this.currentIndex].pause() + this.updateProgress(e); + }, + + // 瑙︽懜缁撴潫 + 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() + this.processHidenTimer = setTimeout(() => { + this.showProcess = false; + }, 1000); + }, + + // 鏇存柊杩涘害 + updateProgress(e) { + // 鑾峰彇褰撳墠瑙︽懜鐐筙鍧愭爣 + const currentX = e.touches[0].pageX; + + // 璁$畻婊戝姩璺濈(鍍忕礌) + const deltaX = currentX - this.startX; + + // 灏嗗儚绱犺窛绂昏浆鎹负杩涘害澧為噺 + const deltaProgress = (deltaX / this.barWidth) * 100; + console.log("杩涘害澧為噺", deltaProgress); + // 璁$畻鏂拌繘搴� = 寮�濮嬫椂鐨勮繘搴� + 婊戝姩澧為噺 + let newProgress = this.startProgress + deltaProgress; + + // 闄愬埗鑼冨洿鍦�0-100涔嬮棿 + newProgress = Math.max(0, Math.min(100, newProgress)); + + this.progress = newProgress; + }, // 鏀惰棌/鍙栨秷鏀惰棌 toggleCollect(item, index) { @@ -594,9 +778,15 @@ }, // 瑙嗛鎾斁浜嬩欢 onPlay(id, index) { - console.log(id, index, "瑙﹀彂鎾斁"); + this.getBarRect() + this.progress = 0 if(index === this.currentIndex) { this.currentVideoIsPlaying = true; + if(! this.duration) { + // 璁剧疆褰撳墠鎾斁瑙嗛鐨勬�绘椂闀� + this.duration = this.videoList[this.currentIndex].videoDuration; + this.formartDuration = this.sliderFormatTime(this.duration); + } } else { this.currentVideoIsPlaying = false; return @@ -632,8 +822,15 @@ // 璁板綍鎾斁鏃堕暱 onTimeUpdate(e) { this.playRecord.playAt = e.detail.currentTime + this.currentTime = e.detail.currentTime; + this.progress = (e.detail.currentTime / this.duration) * 100 }, - + // 鑾峰彇瑙嗛鎬绘椂闀� + onLoadedMetadata(e) { + // this.duration = e.detail.duration; + // this.formartDuration = this.sliderFormatTime(this.duration); + // console.log("瑙嗛鎬绘椂闀�", this.duration); + }, // 淇濆瓨鎾斁璁板綍 async savePlayRecord() { console.log(Date.now(), this.playRecord.startPlayTime, this.totalHidenTime); @@ -669,7 +866,7 @@ .video-swiper { width: 100%; - height: 100%; + height: calc(100% - 20rpx); } .video-item { @@ -691,7 +888,7 @@ .video-info { width: 70%; position: absolute; - bottom: 70px; + bottom: 20px; left: 20px; color: #f8f8f8; z-index: 10; @@ -765,6 +962,7 @@ } .goods-link { position: relative; + width: 450rpx; margin: 20rpx 0; padding: 12rpx; background-color: rgba(255, 255, 255, 0.9); @@ -773,6 +971,7 @@ } .goods-container { + width: 100%; display: flex; align-items: center; } @@ -795,11 +994,13 @@ font-size: 28rpx; color: #333; font-weight: bold; - display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; - overflow: hidden; margin-bottom: 8rpx; + width: 280rpx; /* 闇�瑕佹寚瀹氬搴� */ + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } .price-section { @@ -1025,4 +1226,62 @@ .thumbs-num { margin-left: 4rpx; } + .container { + display: flex; + flex-direction: column; + align-items: center; + position: absolute; + bottom: 0; + width: 100%; + } + + .progress-bar { + position: relative; + width: 100%; + height: 16px; + background-color: #eee; + overflow: hidden; + } + + .progress-fill { + position: absolute; + left: 0; + top: 0; + height: 100%; + background-color: lightgray; + transition: width 0.1s; + } + .process-warp { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + } + .progress-text { + margin-top: 10px; + font-size: 14px; + color: #666; + } + .swiper-box { + width: 100%; + height: 1200rpx; + } + .swiper-item { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; + } + .custom-share-btn { + font-size: unset; + background: none; + padding: 0; + margin: 0; + line-height: normal; + border: none; + } + .custom-share-btn::after { + border: none; + } </style> \ No newline at end of file -- Gitblit v1.8.0