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

使用Intersection Observer API實現視頻隊列自動播放

開發 前端
直接利用Intersection Observer提供的api來實現視頻在滾動的過程中自動播放的功能,如果對該api不太熟悉的朋友可以移步?幾個非常有意思的javascript知識點總結視頻播放插件筆者將使用比較流行的Dplayer,它可以很方便的操作視頻的展現并實現很好的排他性播放控制,并且支持彈幕。

?前言

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

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

圖片

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

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

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

圖片

筆者接下來將直接利用Intersection Observer提供的api來實現視頻在滾動的過程中自動播放的功能,如果對該api不太熟悉的朋友可以移步?幾個非常有意思的javascript知識點總結視頻播放插件筆者將使用比較流行的Dplayer,它可以很方便的操作視頻的展現并實現很好的排他性播放控制,并且支持彈幕。

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

圖片

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

圖片

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

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

import React, { useEffect, useState } from 'react'
import VideoItem from 'components/VideoItem'
import styles from './videoList.less'

const data = [
// 視頻列表
]

function VideoList(props) {
useEffect(() => {
let observerVideo = new IntersectionObserver(
(entries, observer) => {
entries.forEach(entry => {
// 當移入指定區域內后,播放視頻
if(entry.intersectionRatio === 1) {
// 一些操作
return
}
// 停止監聽
// observer.unobserve(entry.target);
});
},
{
root: document.getElementById('scrollView'),
rootMargin: '-180px 0px -180px 0px',
threshold: 1
}
);
document.querySelectorAll('.video-item').forEach(video => { observerVideo.observe(video) });
}, [])
return <div className={styles.videoWrap}>
<div className={styles.list} id="scrollView">
{
data.map(item => {
return <VideoItem src={item} groupName="video-item" key={item} />
})
}
</div>
</div>
}

export default VideoList

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

// VideoItem.js
import React, { useRef, useEffect } from 'react';
import DPlayer from 'dplayer';

export default (props) => {
let videoRef = useRef(null)
let dpRef = useRef(null)
let { src, groupName, curPlaySrc } = props
useEffect(() => {
dpRef.current = new DPlayer({
container: videoRef.current,
screenshot: true,
video: {
url: src,
thumbnails: 'logo.png'
},
logo: 'logo.png'
});
}, [])

useEffect(() => {
// 當當當前應該播放的視頻url等于當前視頻組件的src時,播放視頻
if(curPlaySrc === src) {
dpRef.current.play()
}
}, [curPlaySrc])
return <div data-src={src}>
<div ref={videoRef}></div>
</div>
}

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

// ...
function VideoList(props) {
const [curPlaySrc, setCurPlaySrc] = useState('')
useEffect(() => {
let observerVideo = new IntersectionObserver(
(entries, observer) => {
entries.forEach(entry => {
// 當移入指定區域內后,播放視頻
if(entry.intersectionRatio === 1) {
// 設置當前因該播放的視頻url
setCurPlaySrc(entry.target.dataset.src)
return
}
});
},
{
root: document.getElementById('scrollView'),
rootMargin: '-180px 0px -180px 0px',
threshold: 1
}
);
document.querySelectorAll('.video-item').forEach(video => { observerVideo.observe(video) });
}, [])
return <div className={styles.videoWrap}>
<div className={styles.list} id="scrollView">
{
data.map(item => {
return <VideoItem src={item} groupName="video-item" key={item} curPlaySrc={curPlaySrc} />
})
}
</div>
</div>
}

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

圖片

體驗地址

  • 視頻自動播放demo
  • 仿微信朋友圈動態demo

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

2022-03-06 20:02:21

監聽視頻播放

2021-08-30 07:49:32

Javascript西瓜視頻

2022-02-17 14:34:10

viewport項目API

2022-09-22 09:44:39

技術元素

2009-06-02 08:55:43

2017-03-27 09:00:09

Windows 7Windows自動播放

2018-05-18 14:12:41

Chrome 66自動播放

2024-03-14 08:24:25

MediaCodec解碼播放Android

2013-07-01 10:53:05

2011-03-21 10:13:22

Ubuntu自動播放

2009-02-09 09:03:31

自動播放病毒木馬

2021-04-01 08:22:04

微軟Edge瀏覽器

2015-09-01 17:19:02

Chrome音頻

2011-08-03 13:30:08

組策略自動播放

2009-11-24 09:01:21

Windows 7自動播放

2009-10-20 10:05:22

Windows 7策略組關閉自動播放

2015-12-15 10:24:33

facebooksdk開發

2009-09-28 08:52:29

Windows 7自動加速自動播放

2010-01-13 08:46:21

Windows 7USB自動播放

2025-08-01 04:10:00

RocketMQ訂單分布式
點贊
收藏

51CTO技術棧公眾號

av片在线免费看| 欧美精品成人一区二区在线观看| 免费一级suv好看的国产网站 | 亚洲午夜精品在线| 免费电影一区| 国产乱码精品一区二三区蜜臂| 在线播放日韩| 夜夜嗨av色综合久久久综合网| 在线视频观看一区二区| 免费在线小视频| 亚洲欧洲三级电影| 久久久久久精| 91精品国产91久久久久久| 手机在线播放av| 精品国产第一福利网站| 亚洲色图丝袜美腿| 日韩高清国产精品| 欧美一级视频免费| 久久国产婷婷国产香蕉| 5278欧美一区二区三区| 无码人妻精品一区二区三区夜夜嗨| 亚瑟一区二区三区四区| 91精品国产综合久久福利软件| 中国丰满人妻videoshd| av免费网站在线| 国产日韩欧美综合一区| 国产一区二区三区四区五区在线 | 三级国产在线观看| 激情婷婷综合| 精品调教chinesegay| 污视频在线观看免费网站| 日本精品在线中文字幕| 天天影视网天天综合色在线播放| 中文字幕免费在线不卡| 你懂的在线网址| 成人h动漫精品| 91传媒免费看| 国产乱码精品一区二区| 毛片一区二区三区| 国产精品久久久久久超碰| 日韩 欧美 精品| 欧美成人69| 久久精品国产一区二区三区| 黄免费在线观看| 精品人妻无码一区二区三区| 欧美1级2级| 午夜精品在线视频一区| 免费特级黄色片| 日韩电影免费观看| 一区二区三区加勒比av| 乱子伦一区二区| 久久99精品久久久久久野外| 国产精品国产三级国产普通话三级| 日韩av大全| 免费在线一级视频| 久久久久亚洲蜜桃| 欧美一区二区三区成人久久片| 日韩av资源| 久久综合狠狠综合久久综合88| 蜜桃狠狠色伊人亚洲综合网站| 亚洲欧美日本在线观看| 香蕉视频网站在线观看| 国产精品一区二区不卡| 99国产视频| 亚洲精品一区二区三区新线路 | 91精品久久久久久久久久入口| 日韩黄色一级视频| 麻豆精品国产传媒mv男同| 成人av.网址在线网站| 99久久亚洲精品日本无码| 国产一区二区在线看| 97久久天天综合色天天综合色hd| 亚洲av无码国产精品久久不卡 | yellow视频在线观看一区二区| 国产成人久久精品77777综合| 国产精品18久久久久| 国产日产欧美一区二区三区 | www.一区二区.com| 成人免费一区二区三区牛牛| 欧美日韩在线第一页| 亚洲中文字幕久久精品无码喷水| 欧美美女福利视频| 精品区一区二区| 国产真实乱人偷精品人妻| 日韩欧美午夜| 久久久久久久久久亚洲| 中文人妻av久久人妻18| 国内国产精品久久| 久久久久久一区| 成人免费高清在线播放| 一区二区欧美精品| 欧美 日韩 国产 激情| 超碰国产精品一区二页| 亚洲国产精品中文| 天美传媒免费在线观看| 在线成人黄色| 国产精品日韩在线观看| 欧洲成人一区二区三区| 国产欧美1区2区3区| 屁屁影院ccyy国产第一页| 亚洲承认视频| 欧美福利电影在线观看| 欧美成人亚洲成人| 欧美特黄aaaaaa| 日韩主播视频在线| 99国产在线观看| 免费一级在线观看播放网址| 中文字幕一区二区视频| 91动漫在线看| 成人性片免费| 国产午夜精品麻豆| 亚洲国产美女视频| 蜜桃伊人久久| 99在线影院| av在线天堂播放| 亚洲国产成人tv| 欧美a v在线播放| 99久久久成人国产精品| 精品视频在线播放免| 日本a级片视频| 国产精品成人久久| 欧美在线资源| 国产精品久久综合av爱欲tv| 午夜在线视频观看| 亚洲欧美色综合| 亚洲人成无码www久久久| 香蕉大人久久国产成人av| 亚洲系列中文字幕| 欧美亚韩一区二区三区| 黑人巨大精品欧美一区| 日韩久久精品一区二区三区| 国产盗摄精品一区二区酒店| 欧美日本在线视频| a天堂中文字幕| 亚洲久久一区| 97久久天天综合色天天综合色hd| 欧美女优在线| 欧美性极品xxxx娇小| 日韩国产在线一区| 潘金莲一级黄色片| 一本一道久久a久久精品蜜桃 | 亚洲天堂免费视频| 黄色小视频在线免费看| 国产精品一区专区| 久久综合婷婷综合| av网址在线| 欧美理论片在线| 国产一级免费片| 欧美精品综合| 成人淫片在线看| 77777影视视频在线观看| 精品福利樱桃av导航| 中文写幕一区二区三区免费观成熟| 青青草国产免费一区二区下载| 欧美在线观看视频| 天堂网www中文在线| 成人深夜福利| 欧美性受xxxx| 激情五月深爱五月| 青青草国产精品97视觉盛宴| 欧美一级日本a级v片| 欧美aa视频| 亚洲欧美另类在线观看| 中文字幕亚洲精品一区| 91在线国产观看| 国内外成人激情视频| 日本成人a网站| 97国产suv精品一区二区62| 国产手机av在线| 亚洲图片欧美视频| 岛国精品资源网站| 国产亚洲亚洲| 欧美久久久久久一卡四| 三上悠亚激情av一区二区三区| 亚洲人成亚洲人成在线观看| 中文字幕+乱码+中文乱码91| av在线第一页| 亚洲v日本v欧美v久久精品| 成年女人免费视频| 99精品国产在热久久| 美国av一区二区三区| **在线精品| 久久不射电影网| 亚洲精品一级片| 欧美视频在线观看免费| 色婷婷国产精品免| 韩国欧美国产1区| 中文字幕乱码一区二区三区| 精品三级av在线导航| 欧美在线亚洲一区| 3p视频在线观看| 日韩免费视频线观看| 日本一级片免费看| 果冻天美麻豆一区二区国产| 国产成人综合在线播放| 宅男av一区二区三区| 99a精品视频在线观看| 午夜精品福利电影| 黄色片在线免费观看| 欧美色老头old∨ideo| 小泽玛利亚一区二区免费| 国产成人免费视频一区| 日本在线xxx| 婷婷综合在线| 国产伦精品一区二区三区视频孕妇 | 妖精视频成人观看www| 欧美精品一区二区三区四区五区| 成人18视频在线观看| 久久久久久久久中文字幕| 欧美一二三区| 成人va天堂| 亚洲天堂影视av| 黄色片一区二区三区| 日本福利一区二区| 色在线观看视频| 久久婷婷一区二区三区| 91人妻一区二区三区| 午夜在线一区| 成人性免费视频| 99久久99热这里只有精品 | 少妇黄色一级片| 91精品一区二区三区综合| 欧美成熟毛茸茸复古| 精品一区二区三区四区五区 | 欧美极品jizzhd欧美18| eeuss国产一区二区三区| 国产精品v日韩精品v在线观看| 天堂网视频在线| 2020国产精品自拍| 91视频免费入口| 免费精品视频最新在线| 精品视频免费在线播放| 在线国产一区二区| 2025韩国大尺度电影| 国产一区二区观看| 黄色99视频| 1204国产成人精品视频| 国产日韩精品电影| 免费一区二区三区四区| 日本成人免费在线| 国产理论在线| 欧美成人久久久| 黄网址在线观看| 亚洲视频自拍偷拍| 国产毛片在线| 亚洲欧美国产一本综合首页| 刘亦菲久久免费一区二区| 欧美一区二区三区四区在线观看| 中文av免费观看| 九色成人搞黄网站| 欧美激情一二区| 成人三级网址| 日韩中文在线不卡| 91社区在线| 在线不卡国产精品| 久草中文在线观看| 久久精品国产亚洲7777| 日本最新在线视频| 精品国产视频在线| 三区四区在线视频| 久久精品在线视频| 天天在线视频色| 一本色道久久综合亚洲精品小说 | av在线播放成人| 一级少妇精品久久久久久久| 国产成人午夜视频| 日本久久久久久久久久久| www.中文字幕久久久| 亚洲网在线观看| av资源网站在线观看| 在线国产精品播放| 免费在线观看av| 久久影视免费观看| 国产精品69xx| 91po在线观看91精品国产性色| 蜜桃麻豆影像在线观看| 欧美在线一区二区三区四| 欧美xx视频| 成人黄色av网站| 日韩区欧美区| av成人观看| 四虎影视精品| 亚洲高清123| 91精品婷婷色在线观看| 日韩黄色片在线| 久久亚洲不卡| 天堂在线中文在线| 国产精品一区二区久久不卡| 天天插天天射天天干| 国产日产欧美一区| 九色综合日本| 日本一级理论片在线大全| 欧美精品videosex极品1| 最新欧美色图| 国产精品中文字幕在线观看| 成人激情自拍| 日本一区精品| 91精品高清| 无码中文字幕色专区| 日韩影院在线观看| 日本一级大毛片a一| 成人在线视频一区二区| 无码人妻精品一区二区三应用大全| 欧美国产日韩一二三区| 人妻久久一区二区| 一区二区三区欧美日韩| 中文字幕亚洲乱码熟女1区2区| 色综合天天性综合| 欧美一级免费片| 综合激情国产一区| 波多野结衣精品| 国产一区红桃视频| 欧美美女啪啪| 91免费视频黄| 久久婷婷影院| 日韩电影中文字幕一区| 亚洲av无码国产精品久久不卡| 亚洲视频777| 日韩av激情| 国产玖玖精品视频| 欧美黑人做爰爽爽爽| 三年中文高清在线观看第6集 | 欧美乱妇高清无乱码| av网站在线免费看推荐| 国产精品主播视频| 天堂俺去俺来也www久久婷婷| 超碰97免费观看| 蜜桃一区二区三区在线观看| 韩国av中国字幕| 中文字幕一区免费在线观看 | 毛片网站在线| 久久人人爽人人| 欧美成人一级| 亚洲人成网站在线观看播放| 翔田千里一区二区| 人妻激情偷乱频一区二区三区| 中文字幕一区二区三区精华液| 亚洲国产精品毛片| 日产精品一区二区| 久久精品99国产| 成人av中文字幕| 欧美三级 欧美一级| 欧美日韩一卡二卡三卡| av影片在线看| 国产精品va在线| 九热爱视频精品视频| 欧美啪啪免费视频| 国产iv一区二区三区| 久草国产在线视频| 日韩欧美一区在线| av免费在线观看网址| 99se婷婷在线视频观看| 亚洲女同另类| 五月天婷婷影视| 日韩一区在线播放| 五月天婷婷久久| 亚洲精品美女久久久| av中文字幕在线看| 波多野结衣一区二区三区在线观看 | 久久成人在线| 丰满少妇一区二区三区| 天天综合色天天综合色h| 黄页网站在线看| 日韩极品在线观看| 男人天堂av电影| 日韩欧美一区二区三区| 日本视频在线观看一区二区三区| 91精品国产91久久久| 久久99国产精品视频| 人妻丰满熟妇av无码区app| 国产日韩精品久久久| 成年人视频免费| 色诱女教师一区二区三区| 伊人亚洲精品| 国产911在线观看| www.激情成人| 国产一级18片视频| 亚洲欧美资源在线| 99蜜月精品久久91| 欧美一区二区三区综合| 成人综合激情网| 日韩三级小视频| 亚洲男人的天堂网站| 欧美精选视频一区二区| 这里只有精品66| 国产凹凸在线观看一区二区| 精品欧美一区二区三区免费观看 | 在线视频你懂得| 在线国产欧美| 欧美日韩国产精品一区二区三区四区| 亚欧无线一线二线三线区别| 久久激情视频| 一女三黑人理论片在线 | 久久精品国产亚洲av无码娇色| 亚洲精品一区二区三区蜜桃下载 | 国产a∨精品一区二区三区不卡| 日韩免费视频| 老熟妇精品一区二区三区| 色婷婷综合在线| a级网站在线播放|