微信小程序中視頻的顯示與隱藏功能
更新時間:2022年10月11日 11:39:39 作者:hello-old-gang
這篇文章主要介紹了微信小程序中視頻的顯示與隱藏,思路大概是定義一個標(biāo)記變量,控制視頻的播放與暫停,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
在微信小程序中實現(xiàn)視頻的播放與暫停
需求:
- 視頻列表中只能有一個視頻在播放
- 點擊視頻實現(xiàn)播放與暫停功能
- 加載完成顯示圖片,點擊后變?yōu)橐曨l播放
- 從上次播放的位置進行播放
思路:
- 定義一個標(biāo)記變量,控制視頻的播放與暫停
- true => 本次問播放
- false => 本次為暫停
- 每次點擊后,更新data中視頻的id值
- 聲明一個數(shù)組,用于存放播放視頻的id和播放時間
{ vid:xxx, currentTime:xxx }
事件的流程圖
代碼實現(xiàn):
靜態(tài)
<!-- 使用scroll-view組件 --> <scroll-view class="scroll_video" enable-flex scroll-y> <view class="scroll_videoList_item" wx:for="{{videoList}}" wx:key="index"> <!-- 注意這個id是標(biāo)簽屬性, 點擊視頻標(biāo)簽,事件的回調(diào) event屬性會獲取到這個id值 item.data.vid == vid => 點擊獲取到id bindtimeupdate:視頻的進度條發(fā)生變化時觸發(fā) 通過event.detail.currentTime獲取播放的時間(詳見官網(wǎng)) --> <video src="{{item.data.urlInfo.url}}" id="{{item.data.vid}}" class="scroll_video_item" wx:if="{{vid == item.data.vid ? isPlay? true : false :false}}" bindtap="clickVideo" poster="{{item.data.coverUrl}}" bindtimeupdate="handlerUpdate" ></video> <!-- 視頻加載的時候使用圖片代替,點擊時切換為視頻 --> <image id="{{item.data.vid}}" class="scroll_img_item" src="{{item.data.coverUrl}}" bindtap="clickVideo" wx:else ></image> </view> </scroll-view>
邏輯:
//頁面中使用到的數(shù)據(jù) data: { // 保存點擊的nav id clickId: '', // 保存視頻的數(shù)據(jù) videoList: [], // 保存點擊的視頻的id vid: '', // 控制視頻是否播放 isPlay: true, //為true =>這一次為播放,為false => 這一次為暫停 }, //視頻的播放與暫停 clickVideo(event) { // 獲取用戶點擊視頻的id // console.log(event.currentTarget.id); let vid = event.currentTarget.id // 創(chuàng)建視頻的上下文與video組件進行一一關(guān)聯(lián) if (!this.player) { // 沒有視頻的上下文,創(chuàng)建一個 this.player = wx.createVideoContext(vid) // 播放視頻 this.player.play() // 存儲這次點擊的視頻的id this.setData({ vid }) } else { // 有視頻上下文了 if (vid != this.data.vid) { // 說明再次點擊的是其他的視頻 // 暫停上一個視頻 -> 創(chuàng)建一個新的視頻上下文 -> 播放這個視頻 this.player.pause() this.player = wx.createVideoContext(vid) this.player.play() this.setData({ isPlay: true,//只要id不同,都是暫停上一次,播放這一次!!! vid }) } else { // 說明第二次點擊的是正在播放的視頻 if(this.data.isPlay){ // 上一次的為播放,這一次需要暫停 this.player.pause() // 修改狀態(tài) this.setData({ isPlay:false, }) }else { // 上一次為暫停,這一次需要播放 this.player.play() this.setData({ isPlay:true, }) } } } }, // 視頻播放的時間 handlerUpdate(event) { const { videoUpdataTime } = this.data // 定義一個存儲視頻id和時間的對象 const updateTime = { vid: event.currentTarget.id, currentTime: event.detail.currentTime, } // 如果數(shù)組里有時間,則更新時間,如果沒有事件,則添加這個對象 let updateItem = videoUpdataTime.find(item => item.vid == updateTime.vid) if (updateItem) { // 有,更新時間 updateItem.currentTime = event.detail.currentTime } else { // 沒有,添加整個對象 videoUpdataTime.push(updateTime) } // 更新數(shù)據(jù) this.setData({ videoUpdataTime, }) },
總結(jié):
- 沒有思路的時候,可以畫一個流程圖,不要空想 ??
- 多看文檔!多看文檔!多看文檔!重要的事情說三遍
- 需要注意的是,如果在微信開發(fā)者工具中測試有bug,但是代碼檢查不出問題,試試真機測試,會有意想不到的結(jié)果 ??
到此這篇關(guān)于微信小程序中視頻的顯示與隱藏的文章就介紹到這了,更多相關(guān)微信小程序顯示與隱藏內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript將數(shù)組轉(zhuǎn)換成CSV格式的方法
這篇文章主要介紹了JavaScript將數(shù)組轉(zhuǎn)換成CSV格式的方法,實例分析了javascript使用valueOf方法將數(shù)組值轉(zhuǎn)換為csv格式字符串的技巧,非常具有實用價值,需要的朋友可以參考下2015-03-03ES6基礎(chǔ)之?dāng)?shù)組和對象的拓展實例詳解
這篇文章主要介紹了ES6基礎(chǔ)之?dāng)?shù)組和對象的拓展,結(jié)合實例形式詳細(xì)分析了ES6數(shù)組和對象拓展運算符、拓展方法的使用及相關(guān)操作技巧,需要的朋友可以參考下2019-08-08JavaScript canvas實現(xiàn)俄羅斯方塊游戲
這篇文章主要為大家詳細(xì)介紹了JavaScript canvas實現(xiàn)俄羅斯方塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07