精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Javascript如何實現類似西瓜視頻的視頻隊列自動播放?

開發(fā) 架構
我的第一思路就是監(jiān)聽滾動位置來判斷某個視頻元素是否到達指定區(qū)域內,但是這種方式需要處理的條件很多,比如邊界條件判斷,滾動方向判斷等,而且頻繁觸發(fā)還會出現性能問題。

[[420253]]

前言

去年利用空余時間研究了一下javascript的Intersection Observer API,發(fā)現其有很大的應用場景,比如圖片或者內容的懶加載,視差動畫等。我也在之前的文章中詳細介紹了3種Observer(觀察者)的用法,包括位置監(jiān)聽,dom變化監(jiān)聽以及窗口變化監(jiān)聽,它們有非常多的應用場景,所以很有必要研究明白, 感興趣的可以讀完本片文章之后學習一下(幾個非常有意思的javascript知識點總結).

這里有一個很常見的例子,平時喜歡看短視頻的朋友可能會注意到,我們在瀏覽某視頻頭條時,滾動視頻列表,當某一個視頻滾動到手機的一定位置時(一般可以看成是屏幕中心),該視頻會自動播放,當移出指定區(qū)域后視頻會自動關閉并播放移入指定區(qū)域的下一個視頻,如下:

作為一名好奇心極強的前端工程師,有必要好好研究一下其內部實現。

我的第一思路就是監(jiān)聽滾動位置來判斷某個視頻元素是否到達指定區(qū)域內,但是這種方式需要處理的條件很多,比如邊界條件判斷,滾動方向判斷等,而且頻繁觸發(fā)還會出現性能問題。

好在之前深入研究過Intersection Observer API,發(fā)現可以使用它提供的API,很方便的監(jiān)聽到元素在指定根元素下的位置變化,并做一些自定義操作:

接下來我將利用Intersection Observer提供的api來實現視頻在滾動的過程中自動播放的功能,如果對該api不太熟悉的朋友可以移步

幾個非常有意思的javascript知識點總結

視頻播放插件筆者將使用比較流行的Dplayer,它可以很方便的操作視頻的展現并實現很好的排他性播放控制,并且支持彈幕。

正文

根據以上的介紹我們大致了解了具體的需求,接下來我們就來基于Intersection Observer API實現一下它。思路大致如下圖所示:

具體思路就是我們可以把Intersection Observer的根元素的rootMargin(即根元素的外邊距)設置為如上圖藍色所示區(qū)域,然后當視頻完全進入該區(qū)域內后(也就是thresholds閾值為1時),觸發(fā)當前視頻的播放即可。因為我們使用的是Dplayer,所以我們只要將其配置屬性中的mutex屬性設置為true(為true時會阻止多個播放器同時播放,當前播放器播放時暫停其他播放器)。有關設置rootMargin的知識,可以參考下圖介紹:

rootMargin接收格式如下:"10px 0px 10px 0px",從左到右數字依次代表top(上) right(右) bottom(下) left(左)邊距,當然我們單位也可以使用百分比(%),為正值時代表擴大更元素的邊距范圍,負值代表縮小根元素的邊距范圍,這里我們應該縮小范圍,所以rootMargin我們可以這么設置"-180px 0px -180px 0px",這樣上下的邊距就會縮小,當然大家也可以根據需求設置不同的值。

有了以上思路之后我們就可以實現上文動圖所展示的效果了。筆者將采用react來實現,在實現之前我們先準備幾個視頻素材,然后實現列表基本框架:

  1. import React, { useEffect, useState } from 'react' 
  2. import VideoItem from 'components/VideoItem' 
  3. import styles from './videoList.less' 
  4.  
  5. const data = [ 
  6.     // 視頻列表 
  7.  
  8. function VideoList(props) { 
  9.   useEffect(() => { 
  10.     let observerVideo = new IntersectionObserver( 
  11.         (entries, observer) => { 
  12.             entries.forEach(entry => { 
  13.                 // 當移入指定區(qū)域內后,播放視頻 
  14.                 if(entry.intersectionRatio === 1) { 
  15.                     // 一些操作 
  16.                     return 
  17.                 } 
  18.                 // 停止監(jiān)聽 
  19.                 // observer.unobserve(entry.target); 
  20.               }); 
  21.             }, 
  22.             { 
  23.               root: document.getElementById('scrollView'), 
  24.               rootMargin: '-180px 0px -180px 0px'
  25.               threshold: 1 
  26.             } 
  27.         ); 
  28.         document.querySelectorAll('.video-item').forEach(video => { observerVideo.observe(video) }); 
  29.   }, []) 
  30.   return <div className={styles.videoWrap}> 
  31.     <div className={styles.list} id="scrollView"
  32.         { 
  33.             data.map(item => { 
  34.                 return <VideoItem src={item} groupName="video-item" key={item} /> 
  35.             }) 
  36.         } 
  37.     </div> 
  38.   </div> 
  39.  
  40. export default VideoList 

以上代碼中VideoItem組件我們后面會介紹,現在有個問題是我們已經監(jiān)聽到了需要自動播放的視頻元素,但是我們如何通知VideoItem組件讓其播放呢?這里筆者實現思路是給VideoItem添加一個自定義屬性,該屬性的值就是當前video的src,我們在監(jiān)聽到某個視頻元素需要播放時,我們可以獲取到之前設置的自定義屬性,然后作為prop傳給VideoItem,當VideoItem組件監(jiān)聽到該prop變化時,并且等于自身的src,此時則觸發(fā)視頻播放。代碼如下:

  1. // VideoItem.js 
  2. import React, { useRef, useEffect } from 'react'
  3. import DPlayer from 'dplayer'
  4.  
  5. export default (props) => { 
  6.     let videoRef = useRef(null
  7.     let dpRef = useRef(null
  8.     let { src, groupName, curPlaySrc } = props 
  9.     useEffect(() => { 
  10.         dpRef.current = new DPlayer({ 
  11.             container: videoRef.current
  12.             screenshot: true
  13.             video: { 
  14.                 url: src, 
  15.                 thumbnails: 'logo.png' 
  16.             }, 
  17.             logo: 'logo.png' 
  18.         }); 
  19.     }, []) 
  20.  
  21.     useEffect(() => { 
  22.         // 當當當前應該播放的視頻url等于當前視頻組件的src時,播放視頻 
  23.         if(curPlaySrc === src) { 
  24.             dpRef.current.play() 
  25.         } 
  26.     }, [curPlaySrc]) 
  27.     return <div data-src={src}> 
  28.         <div ref={videoRef}></div> 
  29.     </div> 

此時視頻列表頁代碼如下:

  1. // ... 
  2. function VideoList(props) { 
  3.   const [curPlaySrc, setCurPlaySrc] = useState(''
  4.   useEffect(() => { 
  5.     let observerVideo = new IntersectionObserver( 
  6.         (entries, observer) => { 
  7.             entries.forEach(entry => { 
  8.                 // 當移入指定區(qū)域內后,播放視頻 
  9.                 if(entry.intersectionRatio === 1) { 
  10.                     // 設置當前因該播放的視頻url 
  11.                     setCurPlaySrc(entry.target.dataset.src) 
  12.                     return 
  13.                 } 
  14.               }); 
  15.             }, 
  16.             { 
  17.               root: document.getElementById('scrollView'), 
  18.               rootMargin: '-180px 0px -180px 0px'
  19.               threshold: 1 
  20.             } 
  21.         ); 
  22.         document.querySelectorAll('.video-item').forEach(video => { observerVideo.observe(video) }); 
  23.   }, []) 
  24.   return <div className={styles.videoWrap}> 
  25.     <div className={styles.list} id="scrollView"
  26.         { 
  27.             data.map(item => { 
  28.                 return <VideoItem src={item} groupName="video-item" key={item} curPlaySrc={curPlaySrc} /> 
  29.             }) 
  30.         } 
  31.     </div> 
  32.   </div> 

以上步驟即完成了基于指定區(qū)域自動播放視頻的功能,效果如下:

體驗地址

視頻自動播放demo

仿微信朋友圈動態(tài)demo

最后

 

如果想學習更多H5游戲, webpack,node,gulp,css3,javascript,nodeJS,canvas數據可視化等前端知識和實戰(zhàn),歡迎在公號《趣談前端》加入我們的技術群一起學習討論,共同探索前端的邊界。

 

責任編輯:武曉燕 來源: 趣談前端
相關推薦

2022-03-06 20:02:21

監(jiān)聽視頻播放

2022-08-26 12:13:08

APIjavascript視頻

2022-06-21 14:41:38

播放器適配西瓜視頻

2009-06-02 08:55:43

2021-04-01 08:22:04

微軟Edge瀏覽器

2024-03-14 08:24:25

MediaCodec解碼播放Android

2013-07-01 10:53:05

2011-07-20 16:21:20

iPhone 視頻 播放器

2024-08-20 09:59:22

2017-03-27 09:00:09

Windows 7Windows自動播放

2018-05-18 14:12:41

Chrome 66自動播放

2024-01-03 16:39:07

2023-06-02 14:18:55

2011-03-21 10:13:22

Ubuntu自動播放

2020-06-28 14:35:54

OBSWebSockets開源

2009-10-20 10:05:22

Windows 7策略組關閉自動播放

2011-08-03 13:30:08

組策略自動播放

2024-02-05 08:41:08

因果推斷快手短視頻應用

2022-05-17 09:56:09

Voice Over西瓜視頻開發(fā)者

2011-08-10 15:58:58

iPhone視頻
點贊
收藏

51CTO技術棧公眾號

久草综合在线| 你懂的在线播放| 国产极品久久久| 欧美呦呦网站| 日韩一级在线观看| 日韩精品在线观看av| 神马久久精品| 久久99久久99小草精品免视看| 在线日韩欧美视频| 亚洲一区在线不卡| 里番在线播放| 高清在线观看日韩| 欧美激情精品久久久久久大尺度| 日韩三级一区| 亚洲国产精品天堂| 久久av一区二区三区漫画| 99久久久久久久久| 国语自产精品视频在线看8查询8| 国产一区二区日韩| 在线视频欧美一区| 少妇人妻精品一区二区三区| 亚洲永久免费精品| 欧美激情18p| 天天做夜夜爱爱爱| 成人av资源网址| 欧美老女人在线| 久久综合久久色| 在线观看小视频| 国产精品成人一区二区艾草| 国产精选一区二区| 国产美女www爽爽爽| 国产精品毛片在线| 国内精品久久久久久久久| 天海翼在线视频| 久久国产电影| 在线观看精品自拍私拍| 欧美多人猛交狂配| 狠狠一区二区三区| 精品国产髙清在线看国产毛片| www.午夜av| 成人午夜一级| 一本到不卡免费一区二区| 国产资源在线视频| 国产女人18毛片水真多| 亚洲免费一区二区| 97国产suv精品一区二区62| 九九视频免费在线观看| 999精品色在线播放| 爽爽爽爽爽爽爽成人免费观看| 天美星空大象mv在线观看视频| 色视频在线观看| 国产精品久久久一区二区| 午夜精品久久久久久99热软件| 我家有个日本女人| 日韩午夜电影网| 日韩在线观看成人| 久久福利免费视频| 不卡日本视频| 精品国产一区二区三区久久狼黑人 | 黄色软件在线观看| 97久久超碰国产精品| 久久av免费一区| 你懂的视频在线播放| 久久色视频免费观看| 国产精品久久不能| 日韩av免费播放| 蜜桃视频免费观看一区| 亚洲图片在线综合| 精品熟妇无码av免费久久| 日韩免费在线| 欧美人在线视频| 久久高清免费视频| 99成人免费视频| 国产99久久精品一区二区永久免费| 黄色激情视频在线观看| 午夜亚洲视频| 国产精选久久久久久| 国产强伦人妻毛片| 成人毛片老司机大片| 欧美成熟毛茸茸复古| 国产精品成人无码免费| 凹凸av导航大全精品| 精品视频在线播放免| 极品人妻videosss人妻| 永久91嫩草亚洲精品人人| 日韩中文字幕精品视频| 欧美在线视频第一页| 亚洲精选国产| 国产有码一区二区| 秋霞网一区二区| 国产精品美女| 成人黄色免费网站在线观看| 色哟哟中文字幕| 国产精品沙发午睡系列990531| 国产一区二区不卡视频在线观看| 久久精品色图| 亚洲精品成人悠悠色影视| 欧美aⅴ在线观看| 欧美高清免费| 精品国产乱子伦一区| 蜜桃精品一区二区| 欧美三级不卡| 国产精品永久免费观看| 天堂av一区二区三区| 国产午夜亚洲精品午夜鲁丝片| 超碰97人人人人人蜜桃| 国产天堂在线| 五月天亚洲婷婷| www.五月天色| 欧美理论视频| 欧美激情图片区| 中文字幕日本人妻久久久免费| av在线一区二区| 国产精品久久成人免费观看| 桃花岛tv亚洲品质| 欧美大胆人体bbbb| 国产一区二区在线免费播放| 国产精品一区二区三区美女| 久久精品亚洲一区| 日韩三级av在线| 国产精品亚洲成人| 欧美日韩另类丝袜其他| jizz一区二区三区| 日韩亚洲欧美在线| 国产激情av在线| 国产精品magnet| 92看片淫黄大片欧美看国产片 | 欧美精品高清| 亚洲精品美女在线观看播放| 激情小说中文字幕| 国产一区二区三区观看| 一区二区日本| av网址在线| 欧美日韩国产高清一区| 精品少妇人妻一区二区黑料社区| 亚洲经典三级| 韩国成人av| 98色花堂精品视频在线观看| 欧美mv日韩mv亚洲| 妺妺窝人体色www聚色窝仙踪| 美女视频网站黄色亚洲| 水蜜桃一区二区三区| 国产一区二区主播在线| 国产亚洲精品高潮| 这里只有久久精品视频| 久久精品视频免费观看| 亚洲视频在线观看日本a| 成人美女视频| 一本大道久久a久久精品综合| 无码人妻一区二区三区免费n鬼沢| 一级欧洲+日本+国产 | 黄色www网站| 黄色欧美在线| 日本视频久久久| 精品99又大又爽又硬少妇毛片 | 欧美三级一级片| 老汉色老汉首页av亚洲| 欧美有码在线视频| 二区在线观看| 欧美日韩一区久久| 日韩成人短视频| 国产69精品久久99不卡| 欧美国产亚洲一区| 免费国产自久久久久三四区久久| 日韩av手机在线看| 啊v在线视频| 欧美日韩一区视频| 精品国产乱码久久久久久鸭王1| 久久福利资源站| 久久亚洲国产成人精品无码区| 日韩欧美另类中文字幕| 久久久女女女女999久久| 午夜在线观看视频18| 色综合av在线| 久久成人小视频| 成人小视频在线观看| 97视频在线免费| 久久不见久久见国语| 国产精品视频白浆免费视频| 怡红院av在线| 亚洲女人天堂网| 国产又黄又粗又长| 捆绑调教一区二区三区| 国产精品igao激情视频| 成人高潮aa毛片免费| 精品亚洲一区二区三区在线观看 | 美女日韩欧美| 中文字幕亚洲综合久久| 精品国产一级片| 一本一道综合狠狠老| 亚洲精品久久久久久国| 91视频观看视频| 日韩av影视| 黑人一区二区三区| 久久久久国产精品一区| 外国精品视频在线观看 | 久久精品成人一区二区三区蜜臀 | 日本三级韩国三级欧美三级| 精品视频久久久| 性一交一乱一精一晶| 欧美日韩国内自拍| 欧美精品久久久久久久久46p| 26uuu久久天堂性欧美| 男女视频在线观看网站| 久久综合网络一区二区| 国产精品久久在线观看| 性欧美ⅴideo另类hd| 一区二区三欧美| 日韩一级片免费观看| 5月丁香婷婷综合| 国产又粗又猛又黄视频| 亚洲成人综合视频| 成人在线观看高清| 国产亚洲婷婷免费| 亚洲男人在线天堂| 国产成人综合网| 午夜精品久久久内射近拍高清 | 久久久久久久久久久免费| 国产在线超碰| 亚洲精品一区二区三区不| 黄色美女一级片| 亚洲免费观看高清| 亚洲乱码中文字幕久久孕妇黑人| 亚洲欧美亚洲| 一区二区三区四区五区精品 | 2017欧美狠狠色| 亚洲国产精品狼友在线观看| 国产一区二区三区四区五区美女 | 97精品国产99久久久久久免费| 91av视频在线播放| 精精国产xxxx视频在线中文版| 色悠悠国产精品| 高清美女视频一区| 国产亚洲精品久久久久久牛牛| 深夜福利在线观看直播| 日韩欧美国产系列| 国产伦理吴梦梦伦理| 欧美揉bbbbb揉bbbbb| 久久久久久av无码免费看大片| 色丁香久综合在线久综合在线观看| 国产成人无码精品亚洲| 亚洲成人手机在线| 国产精品2020| 午夜激情一区二区| 尤物视频在线观看国产| 午夜视黄欧洲亚洲| 国产九色在线播放九色| 欧美日韩亚洲精品一区二区三区| 日本高清www免费视频| 亚洲影视在线观看| 国产大片aaa| 欧美三级免费观看| 日本午夜视频在线观看| 亚洲va在线va天堂| 国产a∨精品一区二区三区仙踪林| 福利二区91精品bt7086| 可以免费看的av毛片| 色婷婷精品久久二区二区蜜臀av| 日韩 国产 欧美| 91福利在线看| 国产精品国产精品国产| 9191精品国产综合久久久久久 | 麻豆一区二区三| 91精品视频国产| 成人免费黄色大片| a级一a一级在线观看| 国产一区二区你懂的| 人妻有码中文字幕| 激情图片小说一区| 91九色蝌蚪porny| 2020国产精品| 国产精品夜夜夜爽阿娇| 一区二区久久久久| 日韩精品一区二区亚洲av| 色综合久久久网| 夜夜躁狠狠躁日日躁av| 精品少妇一区二区三区日产乱码| 亚洲成人第一区| 亚洲成av人乱码色午夜| 欧美新色视频| 欧美不卡视频一区发布| 2018av在线| 国产成人精品国内自产拍免费看 | 91精品国产综合久久久蜜臀图片| 亚洲av永久纯肉无码精品动漫| 精品亚洲精品福利线在观看| 欧美三级理伦电影| 国产做受高潮69| 久久精品97| 国产伦精品一区二区| 成人在线电影在线观看视频| 国产91在线亚洲| 美女91精品| 欧美69精品久久久久久不卡| 国产亚洲成av人在线观看导航| 麻豆changesxxx国产| 欧美四级电影在线观看| 国产精品国产一区二区三区四区| 日韩一级黄色大片| 中文日本在线观看| 97色在线观看| 日韩精品视频在线看| 日本日本精品二区免费| 在线精品观看| 五月天视频在线观看| 国产成人在线网站| 香蕉成人在线视频| 亚洲一区二区视频在线| 亚洲天堂999| 亚洲另类欧美自拍| 男女在线观看视频| 91久久国产精品| 精品免费在线| 亚洲熟妇无码另类久久久| 国产一区91精品张津瑜| 99自拍偷拍视频| 国产精品久久久久久久久免费樱桃| 国产成人精品a视频一区| 在线不卡一区二区| 91在线看片| 国产精品99久久久久久www| 女同久久另类99精品国产| 超级碰在线观看| 激情综合色综合久久| 欧美成人短视频| 欧洲一区二区三区在线| 四虎影院在线播放| 7777精品视频| 精品人人人人| 国精产品一区一区三区视频| 国产高清一区日本| 极品久久久久久| 51精品久久久久久久蜜臀| 亚洲成人三级| 国产精品美女av| 成人黄色小视频| www.xxx亚洲| 成人免费视频播放| 国产成人在线免费观看视频| 亚洲精品黄网在线观看| 在线观看特色大片免费视频| 琪琪第一精品导航| 亚洲素人在线| 久久精品网站视频| 国产日韩欧美精品在线| 天天干天天操天天操| 一本色道久久88综合亚洲精品ⅰ| 亚洲欧美在线成人| 日韩精品久久一区| 久久97超碰色| 欧美三级在线免费观看| 日韩精品一区二区三区在线观看 | 亚洲大全视频| 午夜免费视频网站| 亚洲一区二区三区小说| 国产av精国产传媒| 久久久久久国产精品三级玉女聊斋| 视频一区日韩精品| 欧美深夜福利视频| 波多野结衣中文字幕一区二区三区| 国产特黄大片aaaa毛片| 日韩毛片中文字幕| 亚洲a∨精品一区二区三区导航| 裸模一区二区三区免费| 久久青草久久| 黄色录像免费观看| 亚洲成人精品视频在线观看| 亚洲天堂电影| 亚洲欧美丝袜| 青青草国产成人a∨下载安卓| 三级视频中文字幕| 亚洲乱码一区二区三区在线观看| 国产 日韩 欧美 综合| 久久久久成人精品| 欧美日韩精品一区二区视频| 久久精品网站视频| 亚洲欧美另类久久久精品| 婷婷伊人综合中文字幕| 国产精品日韩欧美大师| 欧美三级特黄| 91成人破解版| 91精品黄色片免费大全| 午夜伦理福利在线| 一区二区国产日产| 99久久精品免费观看| 在线观看黄色国产| 欧美老肥婆性猛交视频| 少妇久久久久| 一区二区三区四区毛片| 欧美日韩色婷婷| 青青草视频免费在线观看| 日韩免费在线免费观看| 一本一道久久a久久精品蜜桃 | 精品人妻无码一区二区 | 欧美2区3区4区| 久久9精品区-无套内射无码| 伊人夜夜躁av伊人久久| 国际av在线| 国产在线精品一区二区中文 | 黄色成人影院|