精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲国产欧美日韩精品| 久久精品国产亚洲aⅴ| 日韩女优电影在线观看| 日韩五码在线观看| 免费在线性爱视频| 老司机精品视频一区二区三区| www.亚洲男人天堂| 国产ts在线观看| 中文字幕av一区二区三区佐山爱| 中文字幕av一区二区三区高| 91免费电影网站| 亚洲另类欧美日韩| 欧美3p视频| 亚洲成人中文字幕| 亚洲77777| 欧洲性视频在线播放| 欧美激情在线看| 国产精品视频免费一区二区三区| 一级特黄免费视频| 国内精品久久久久国产盗摄免费观看完整版 | 亚洲欧洲激情在线| 女王人厕视频2ⅴk| 日韩高清在线| 亚洲国产日韩a在线播放性色| 日韩女优中文字幕| 婷婷色在线视频| 黄色资源网久久资源365| 日本91av在线播放| 免费一级肉体全黄毛片| 91亚洲国产成人久久精品| 亚洲级视频在线观看免费1级| www.亚洲高清| 日本免费久久| 精品福利免费观看| 国产 欧美 日韩 一区| 视频三区在线| 国产亚洲精品aa| 久久成人资源| 欧美77777| 国产乱码字幕精品高清av| 国产精品成人av性教育| 国产微拍精品一区| 亚洲精品人人| 欧美激情xxxx性bbbb| 青青草华人在线视频| 国产一区二区三区日韩精品| 日韩精品视频观看| 在线观看国产免费视频| 伊人www22综合色| 欧美一区二区三区视频免费| www.久久91| 国产a亚洲精品| 91成人免费电影| 激情综合网婷婷| 日本黄色免费在线| 欧美午夜性色大片在线观看| 国产无限制自拍| h片精品在线观看| 亚洲已满18点击进入久久| 亚洲一区二区三区欧美| 日本美女在线中文版| 国产精品国产三级国产普通话99| 亚洲国产一区二区精品视频| 77导航福利在线| 日本一二三不卡| 亚洲狠狠婷婷综合久久久| 成人精品福利| 中文字幕一区二区三区不卡在线 | 亚洲影院色在线观看免费| 国产精品无码AV| 国产成人无遮挡在线视频| 国产精品.com| 少妇无码一区二区三区| 91亚洲午夜精品久久久久久| 欧美亚洲精品日韩| 国产资源在线观看| 国产精品麻豆欧美日韩ww| 尤物一区二区三区| 成人ww免费完整版在线观看| 一区二区三区日韩| www.成年人视频| 伊人久久综合一区二区| 欧美日韩一区二区三区四区五区| 午夜一级免费视频| 精品五月天堂| 亚洲人成电影在线| 免费中文字幕日韩| 国产午夜精品一区二区三区欧美 | 日韩一区二区三区国产| avove在线播放| 国产精品久久777777毛茸茸| 国产精品69精品一区二区三区| 中文字幕在线2018| 成人免费高清视频| 神马影院我不卡午夜| 岛国成人毛片| 欧美日韩中文字幕在线| 国产精品一区二区小说| 国产suv精品一区| 亚洲无亚洲人成网站77777| 一区二区三区在线播放视频| 欧美天天视频| 国产成人亚洲综合91精品| 国产又粗又猛视频| 91在线视频观看| 超碰成人在线免费观看| 精品国产免费人成网站| 日韩亚洲欧美中文三级| 在线免费观看视频| 影音先锋中文字幕一区| 国产日韩在线免费| 亚洲日本香蕉视频| 亚洲免费三区一区二区| 成人亚洲视频在线观看| 日韩三级av高清片| 在线成人一区二区| 看片网址国产福利av中文字幕| 狠狠色丁香九九婷婷综合五月| 就去色蜜桃综合| 日本精品600av| 欧美精品日韩综合在线| 国产精品无码久久久久一区二区| 黄色亚洲在线| 91视频国产一区| 国产二区视频在线观看| 精品国产成人在线| 日本在线视频播放| 99成人在线视频| 国产精国产精品| 青青久草在线| 五月综合激情婷婷六月色窝| 性欧美在线视频| 日本不卡电影| 国产精品嫩草视频| 国产在线91| 色香蕉久久蜜桃| 成人在线视频免费播放| 黄色日韩精品| 国产伦精品一区| 日韩av激情| 日韩欧美精品三级| 美女的奶胸大爽爽大片| 久久福利资源站| 相泽南亚洲一区二区在线播放| 成人片免费看| 亚洲人成电影在线播放| 无码人妻av一区二区三区波多野| 91农村精品一区二区在线| 日韩av在线播放不卡| 大奶一区二区三区| 国模精品视频一区二区三区| 亚洲xxxx天美| 午夜欧美大尺度福利影院在线看| 精品人妻伦一二三区久| 亚洲毛片视频| 精选一区二区三区四区五区| 欧美sm一区| 亚洲精品视频在线播放| 探花视频在线观看| 久久九九全国免费| 欧美精品成人网| 欧美裸体在线版观看完整版| 国产欧美一区二区三区在线 | 国产69精品久久久久9| 无码精品在线观看| 欧美视频在线观看免费网址| 欧美性猛交xxxx乱| 久久成人免费网| 成人短视频在线观看免费| youjizzjizz亚洲| 97超碰蝌蚪网人人做人人爽| 久久久久久久影视| 欧美日韩第一区日日骚| 欧美日韩在线视频免费| 99久久精品99国产精品 | 国产乱人伦精品一区二区在线观看 | 亚洲女则毛耸耸bbw| 一本色道久久综合一区| 色噜噜狠狠色综合网| 日本午夜精品久久久久| 欧美国产精品日韩| 精品视频一二三| 6080亚洲精品一区二区| 日韩无码精品一区二区三区| 国产视频一区二区在线| 中文字幕一区二区在线观看视频 | 青草青草久热精品视频在线网站| 成人av毛片| 日韩午夜三级在线| 国产99久久久| 亚洲私人黄色宅男| 丝袜美腿中文字幕| 国产精品资源在线看| www.爱色av.com| 天天综合久久| 免费久久一级欧美特大黄| 成人污版视频| 欧美亚洲午夜视频在线观看| 麻豆网站在线免费观看| 日韩精品中文在线观看| 国产熟女一区二区丰满| 日本精品一级二级| 激情五月婷婷在线| 亚洲国产成人自拍| 国产二级一片内射视频播放| 久久国产免费看| 欧美日韩黄色一级片| 欧美黄色大片在线观看| 玛丽玛丽电影原版免费观看1977| avtt久久| 国产精品大片wwwwww| 爱看av在线| 久久久精品久久久| 国产永久免费高清在线观看视频| 亚洲加勒比久久88色综合| 国产成人精品亚洲精品色欲| 欧洲国产伦久久久久久久| 日韩精品成人一区| 一区二区三区日韩欧美| 你懂得在线观看| 国产欧美日韩卡一| 亚洲最大成人网站| 成人教育av在线| 黑人性生活视频| 极品美女销魂一区二区三区免费| 成人免费观看毛片| 中日韩视频在线观看| 男人天堂新网址| 欧美偷拍自拍| 日本一区免费观看| 亚洲小说图片| 精品乱码一区二区三区| 97久久超碰| 岛国一区二区三区高清视频| 精品国产欧美| 91精品中文在线| 亚洲一区有码| 91久久国产综合久久91精品网站| 久久精品国产福利| 国产精品一区二区三| 怡红院成人在线| 国产极品精品在线观看| 欧美韩国亚洲| 国产精品久久久久福利| av成人亚洲| 国产精品三级美女白浆呻吟| 成人av色网站| 国产欧美日韩精品丝袜高跟鞋| 亚洲a∨精品一区二区三区导航| 日本欧美黄网站| 欧美日韩不卡| 国产一区红桃视频| 精品精品视频| 国产激情美女久久久久久吹潮| 成人av资源网址| 精品91免费| 国产一区二区精品福利地址| 亚洲国产精品日韩| 亚洲精品99| 99re6这里有精品热视频| 国产综合欧美| 无码人妻丰满熟妇区毛片18| 欧美96一区二区免费视频| 在线不卡一区二区三区| 国产精品自拍网站| 国产日韩视频一区| 久久婷婷色综合| 91禁男男在线观看| 亚洲美女区一区| 中日韩精品视频在线观看| 色综合久久综合网97色综合| 正在播放亚洲精品| 制服丝袜日韩国产| 日本人妻丰满熟妇久久久久久| 精品爽片免费看久久| 在线观看美女网站大全免费| 欧美另类高清videos| 国产中文在线播放| 国产精品第七影院| 麻豆视频久久| 久久国产精品一区二区三区| 日本久久黄色| 国产黄色片免费在线观看| 日韩国产成人精品| 不卡的一区二区| 久久久天堂av| 黄色片子在线观看| 黄色成人av在线| 一卡二卡三卡在线| 亚洲国产精品va在看黑人| 狠狠色伊人亚洲综合网站l| 久久艳片www.17c.com| 天堂中文在线播放| 亚洲va久久久噜噜噜久久天堂| 香蕉久久夜色精品国产更新时间| 中文字幕久久综合| 亚洲欧美bt| 亚洲熟妇一区二区| 国产精品九色蝌蚪自拍| 日本一级淫片免费放| 欧美美女bb生活片| 三级理论午夜在线观看| 久久综合电影一区| 日本精品裸体写真集在线观看| 粉嫩高清一区二区三区精品视频 | 在线亚洲欧美日韩| 精品美女一区二区三区| 91露出在线| 欧美亚洲激情在线| 一区二区三区高清在线观看| 亚洲欧美日韩在线综合| 一本色道久久综合亚洲精品不卡 | 中文字幕日韩一区二区| 久热这里只有精品6| 欧美xxxx老人做受| 麻豆av在线导航| 国产精品草莓在线免费观看| 欧美交a欧美精品喷水| 三级在线免费观看| 免费观看30秒视频久久| 蜜桃av免费看| 精品动漫一区二区| 日本精品久久久久| 欧美高清电影在线看| 亚洲色图综合| 图片区小说区区亚洲五月| 久久午夜电影| 特级西西人体wwwww| 亚洲国产日韩在线一区模特 | 亚洲欧洲高清在线| 久久男人av资源站| 97在线电影| 午夜亚洲福利| 黄色片子免费看| 亚洲日穴在线视频| 国产裸体无遮挡| 久久精品视频播放| 亚洲免费资源| 熟妇熟女乱妇乱女网站| 久久99国产精品免费| 日本少妇aaa| 337p亚洲精品色噜噜狠狠| 麻豆网站在线免费观看| 91久久久久久久久久久| 亚洲电影在线一区二区三区| 亚洲制服中文字幕| 亚洲视频一区二区在线| 国产精品一区二区av白丝下载| 精品国偷自产在线视频99| **欧美日韩在线| 国产日产欧美一区二区| 国产成人午夜精品5599| 国产精品成人国产乱| 亚洲国产精品va| 日韩av福利| 亚洲精品乱码视频| 精品一二三四区| 国产精品成人免费观看| 精品久久人人做人人爰| 嗯啊主人调教在线播放视频| 麻豆一区区三区四区产品精品蜜桃| 爽好多水快深点欧美视频| 国产综合精品久久久久成人av | 无码精品在线观看| 欧美在线性爱视频 | 中文字幕日韩av综合精品| 亚洲欧美专区| 香港三级日本三级a视频| eeuss国产一区二区三区 | 国产精品夜夜夜爽阿娇| 日韩一区二区免费在线观看| av丝袜在线| 日韩精品一区二区三区色偷偷| 精品午夜一区二区三区在线观看| 青青草精品在线视频| 日韩电影在线观看中文字幕| 777午夜精品电影免费看| 91制片厂免费观看| 99热这里都是精品| 中文字幕在线观看精品| 欧美国产日韩一区二区三区| 精品在线手机视频| 欧美一级视频在线| 亚洲大型综合色站| wwwxxx在线观看| av成人午夜| 日本中文字幕一区二区视频| 欧美国产日韩在线观看成人| 亚洲精品久久久久国产| 日韩第二十一页| 鲁一鲁一鲁一鲁一色| 国产精品毛片大码女人| 日韩一级免费毛片| 国产日韩欧美在线看| 亚洲一区欧美激情| 国产va在线播放| 在线观看久久久久久| 国产精品极品国产中出| 午夜剧场高清版免费观看| 精品日本高清在线播放|