小程序類似抖音視頻整屏切換

更新

現在已經更新了github地址和效果gif,可在文章最后查看。如果我的代碼對你有用,請幫我隨手star一下。

需求

最近在項目中需要加一個功能,在小程序中將已有的短視頻功能,按照抖音的方式來瀏覽,整屏,可上下滑動切換視頻,并添加上滑下滑的動畫。

思路

1.在video標簽上添加時間監聽。 2.如果1無法成功,就在video上面罩一層 cover-view,在cover-view上添加時間監聽。 3.如果上面兩種方法都不行,用小程序的onPageScroll頁面處理函數來監聽頁面的滾動。 4.上述三種方法都不行的話,用canvas在video上面罩一層,監聽滾動事件。

嘗試

現在video標簽上添加了觸摸事件的監聽,但是無法成功監聽到觸摸事件。 因為video 是原生組件,層級較高,所以嘗試在上面罩一層cover-view,并監聽滾動事件,但是同樣無法監聽。

前面兩種方法不行,我就采用了onPageScroll來監聽頁面是否發生滾動。這個方法會拿到當前頁面在垂直方向已滾動的距離。scrollindex用來控制滾動,totalNum是滾動的總數,部分代碼如下

在ios上可以滿足需求,能上下滾動,也能加上動畫,但是在安卓上卻不能動,嘗試著在頁面json文件中配置滾動相關,但都沒辦法,所以這個方法也不行了。

最后只有canvas這一個辦法了,在video組件上面定位一個canvas,在上面添加時間監聽,這是發現成功了,可以在控制臺看到打印出來的監聽 console。

實現

wxml:下面是wxml代碼,主要思路就是讓video寬高等于屏幕,點贊評論分享等功能,用cover-view定位到視頻上方,在將canvas定位到video上面滾動時滾動的是封面圖案,video標簽只有一個,滾動更改video的src。

wxss:都是一些定位相關的樣式沒有特殊的樣式就不貼圖了。不過做的時候這里有個坑,產品希望添加無限的向下滑動視頻,可以無限加載,所以最開始我才用的是animation動畫,對每一屏根據手指向上或者向下添加動畫,這樣做的話就無法做到,后來發現可以使用小程序的api,wx.createAnimation()在js中實現。

js:onload的時候this.animation = wx.createAnimation();用于切換時創建動畫。

需要監聽的滾動事件

js主要做的是判斷滾動方向,給wxml通過微信提供的animation方法來動態添加動畫,這樣就可以實現無限加載的需求了。scrollTop的作用是用來調整video標簽位置,因為現在滾動的時候添加滾動的事視頻的封面圖不是視頻本身,需要隱藏視頻,假如用wx:if;哎控制的話,會導致視頻隱藏在展現之后無法監聽之前添加的事件。

效果

在真機上可以生效,在手機上錄了視頻不知道怎么傳上來,轉gif也沒找到在mac怎么轉。。。

更新上來了gif,不過gif感覺稍微有點卡頓,沒手機上流暢。手機ios也是比安卓的流暢很多。但是都比這個圖片流暢。。。而且現在視頻地址都掛了,所以一直轉圈緩沖,沒辦法播放只剩下這個圖片了,正常緩沖結束后是會播放的。

最后

弄了好久弄出來的,真機和模擬器的效果差異很大,最好在真機測試。目前也不知道有沒有更好的辦法,菜鳥前端一個~

補充

github地址:github.com/xuguoyii/wx…

轉載于:https://juejin.im/post/5bea9075f265da611f073ce3

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450251.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450251.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450251.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Coding For Fun 32小時:充滿創造、激情、團結的編程馬拉松

摘要:Coding for Fun大賽是2012中國軟件開發者大會(SDCC)的重要環節。由六名黑馬學員組成的“天翼二隊”,經過32小時的“血拼”,憑大賽作品“語音控”,獲得了本次大賽的“最佳設計獎”。本文是該隊隊員的參…

centos6.8安裝oracle12C 詳細步驟講解

2019獨角獸企業重金招聘Python工程師標準>>> centos6.8安裝oracle12C 詳細步驟講解 安裝前環境配置 1 root身份安裝依賴包 [rootdlp ~]# yum -y install binutils compat-libcap1 compat-libstdc-33 compat-libstdc-33.i686 gcc gcc-c glibc glibc.i686 glibc-deve…

解決 springboot 項目:找不到或無法加載主類

Spring Boot下無法加載主類 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 我什么也沒有改,啟動服務報錯如題:找不到或無法加載主類 解決:什么也不…

管理好你的愿望,人生將另一個樣

別讓欲望控制了你欲望是人的本性。人生在世,誰都會有欲望。物欲、食欲、情欲、發財欲、求知欲……欲望是消防隊也無法撲滅的火。作為人,我們不能消除欲望,也不能讓欲望漫無邊際地增長,所以,我們應該把握好欲望的尺度&a…

25 模塊和包

今日內容 import from xxx import xxxx 金庸 1. 導入模塊的執行的步驟 2. 自定義模塊 3. 自定義包(難點) 一個表達式 -> 一條語句 -> 語句塊 -> 函數 -> 類 -> 模塊 -> 包 -> 項目 包就是我們的文件夾, 包內可以寫很…

【許曉笛】 EOS 智能合約案例解析(2)

詳解 EOS 智能合約的 cpp 文件 之前的文章介紹了 eosio.token 智能合約的 hpp 文件,這次向大家介紹 eosio.token.cpp 文件,cpp 文件即 C 代碼文件,智能合約所有的業務邏輯內容都是在 cpp 文件中實現的。 eosio.token.cpp 文件地址&#xff1a…

java 中 transient關鍵字

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 java語言的關鍵字,變量修飾符,如果用transient聲明一個實例變量,當對象存儲時,它的值不需…

java中int轉成String位數不足前面補零

java中int轉成String位數不足前面補零 轉載自:http://ych0108.iteye.com/blog/2174134java中int轉String位數不夠前面補零 String.format("%010d", 25); //25為int型 10代表前面要補的字符 10代表字符串長度 d表示參數為整數類型 今天想將int 轉String 位…

Oops! the requested resource is not found!

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 情況一:調用 dubbo 服務失敗,報錯如題:Oops! the requested resource is not found! 原因很簡單&am…

django URL路由基礎

URL是Web服務的入口,用戶通過瀏覽器發送過來的任何請求,都是發送到一個指定的URL地址,然后被響應。 在Django項目中編寫路由,就是向外暴露我們接收哪些URL的請求,除此之外的任何URL都不被處理,也沒有返回。…

Linux在超級計算機領域一統天下

摘要:在世界超級計算機排行榜500強榜單中,基于Linux的超級計算機占據了462個席位,比率高達92%。基于Windows的超級計算機僅有2個席位,份額為0.4%。中國基于Windows的超級計算機Magic Cube排名94位,澳大利亞基于Windows…

Qtum量子鏈漏洞賞金計劃正式開啟

本次Qtum量子鏈賞金計劃為了更好的借助社區的力量參與到QTUM主網及周邊應用的開發建設中,讓QTUM持續地保持安全、高效的運行,同時能滿足更多用戶的需求。Bug分級與獎勵體系1、如果已經有類似的Issue或者Qtum團隊已經知道并在解決該問題的情況將不適用于該…

.SpelEvaluationException: EL1008E: Property or field ‘cache_department_list_Tree‘ cannot be found

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 報錯如題: .SpelEvaluationException: EL1008E: Property or field cache_department_list_Tree cannot be found on object…

修過的一個android framework原生系統代碼bug

“坑”描述: 在對我們自己研發的一款android終端進行camera拍照壓力測試時,發現當拍照張數達到幾萬張時,查看內存占用情況,發現內存泄露。 填“坑”: frameworks/base/core/jni/android/graphics/YuvToJpegEncoder.…

Koa項目搭建過程詳細記錄

2019獨角獸企業重金招聘Python工程師標準>>> Java中的Spring MVC加MyBatis基本上已成為Java Web的標配。Node JS上對應的有Koa、Express、Mongoose、Sequelize等。Koa一定程度上可以說是Express的升級版。許多Node JS項目已開始使用非關系型數據庫(MongoDB)。Sequel…

商業項目中代碼質量是否重要?

這是一篇比較老的 文章,但是文中的這些問題在現在仍然普遍存在。代碼質量的高低與商業產品的優劣是否有直接的影響?開發者Frank Sommers在文中給出了他的看法。文章內容如下。在大多數商業項目中,代碼質量并不被看重,因為大部分情…

Class is not a root resource. It, or one of its interfaces must be annotated with @Path:

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 報錯如題: Class is not a root resource. It, or one of its interfaces must be annotated with Path:XXXX 這是一個dub…

Equation漏洞混淆利用分析總結(下)

樣本三 如下所示在該樣本中,使用了Ole10Native的流,因此沒有equative head,默認讀取紅框中的4位長度。之后的metf head為01. 可以看到metf head的長度為01時,直接進入到if判斷中(該if中的函數實際是一個異常處理函數,但…

閑扯工程師的版本管理概念

如果你所在的公司還在通過qq給客戶發sdk升級包等,你可以考慮換一家公司了。

resource fork, Finder information, or similar detr

1.關閉當前項目和Xcode 2.打開終端或者iterm cd ~/Library/Developer/Xcode/DerivedData/ 3. xattr -rc . 4.重新打開項目 5.如果不行那你就再試試其他的辦法吧,我就是這樣弄好的 如果有需要裝系統的話可以看一下我自己封裝的系統,原裝系統無精簡&#x…