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

瀏覽器的五種 Observer,你用過幾種?

系統(tǒng) 瀏覽器
瀏覽器提供了 5 種 Observer 來監(jiān)聽這些變動:MutationObserver、IntersectionObserver、PerformanceObserver、ResizeObserver、ReportingObserver。

網(wǎng)頁開發(fā)中我們經(jīng)常要處理用戶交互,我們會用 addEventListener 添加事件監(jiān)聽器來監(jiān)聽各種用戶操作,比如 click、mousedown、mousemove、input 等,這些都是由用戶直接觸發(fā)的事件。

那么對于一些不是由用戶直接觸發(fā)的事件呢?比如元素從不可見到可見、元素大小的改變、元素的屬性和子節(jié)點的修改等,這類事件如何監(jiān)聽呢?

瀏覽器提供了 5 種 Observer 來監(jiān)聽這些變動:MutationObserver、IntersectionObserver、PerformanceObserver、ResizeObserver、ReportingObserver。

我們分別來看一下:

IntersectionObserver

一個元素從不可見到可見,從可見到不可見,這種變化如何監(jiān)聽呢?

用 IntersectionObserver。

IntersectionObserver 可以監(jiān)聽一個元素和可視區(qū)域相交部分的比例,然后在可視比例達到某個閾值的時候觸發(fā)回調(diào)。

我們準備兩個元素:

<div id="box1">BOX111</div>
<div id="box2">BOX222</div>

加上樣式:

#box1,#box2 {
width: 100px;
height: 100px;
background: blue;
color: #fff;

position: relative;
}
#box1 {
top: 500px;
}
#box2 {
top: 800px;
}

這兩個元素分別在 500 和 800 px 的高度,我們監(jiān)聽它們的可見性的改變。

const intersectionObserver = new IntersectionObserver(
function (entries) {
console.log('info:');
entries.forEach(item => {
console.log(item.target, item.intersectionRatio)
})
}, {
threshold: [0.5, 1]
});

intersectionObserver.observe( document.querySelector('#box1'));
intersectionObserver.observe( document.querySelector('#box2'));

創(chuàng)建一個 IntersectionObserver 對象,監(jiān)聽 box1 和 box2 兩個元素,當可見比例達到 0.5 和 1 的時候觸發(fā)回調(diào)。

瀏覽器跑一下:

可以看到元素 box1 和 box2 在可視范圍達到一半(0.5)和全部(1)的時候分別觸發(fā)了回調(diào)。

這有啥用?

這太有用了,我們在做一些數(shù)據(jù)采集的時候,希望知道某個元素是否是可見的,什么時候可見的,就可以用這個 api 來監(jiān)聽,還有做圖片的懶加載的時候,可以當可視比例達到某個比例再觸發(fā)加載。

除了可以監(jiān)聽元素可見性,還可以監(jiān)聽元素的屬性和子節(jié)點的改變:

MutationObserver

監(jiān)聽一個普通 JS 對象的變化,我們會用 Object.defineProperty 或者 Proxy:

而監(jiān)聽元素的屬性和子節(jié)點的變化,我們可以用 MutationObserver:

MutationObserver 可以監(jiān)聽對元素的屬性的修改、對它的子節(jié)點的增刪改。

我們準備這樣一個盒子:

<div id="box"><button>光</button></div>

加上樣式:

 #box {
width: 100px;
height: 100px;
background: blue;

position: relative;
}

就是這樣的:

我們定時對它做下修改:

setTimeout(() => {
box.style.background = 'red';
},2000);

setTimeout(() => {
const dom = document.createElement('button');
dom.textContent = '東東東';
box.appendChild(dom);
},3000);

setTimeout(() => {
document.querySelectorAll('button')[0].remove();
},5000);

2s 的時候修改背景顏色為紅色,3s 的時候添加一個 button 的子元素,5s 的時候刪除第一個 button。

然后監(jiān)聽它的變化:

const mutationObserver = new MutationObserver((mutationsList) => {
console.log(mutationsList)
});

mutationObserver.observe(box, {
attributes: true,
childList: true
});

創(chuàng)建一個 MutationObserver 對象,監(jiān)聽這個盒子的屬性和子節(jié)點的變化。

瀏覽器跑一下:

可以看到在三次變化的時候都監(jiān)聽到了并打印了一些信息:

第一次改變的是 attributes,屬性是 style:

第二次改變的是 childList,添加了一個節(jié)點:

第三次也是改變的 childList,刪除了一個節(jié)點:

都監(jiān)聽到了!

這個可以用來做什么呢?比如文章水印被人通過 devtools 去掉了,那么就可以通過 MutationObserver 監(jiān)聽這個變化,然后重新加上,讓水印去不掉。

當然,還有很多別的用途,這里只是介紹功能。

除了監(jiān)聽元素的可見性、屬性和子節(jié)點的變化,還可以監(jiān)聽大小變化:

ResizeObserver

窗口我們可以用 addEventListener 監(jiān)聽 resize 事件,那元素呢?

元素可以用 ResizeObserver 監(jiān)聽大小的改變,當 width、height 被修改時會觸發(fā)回調(diào)。

我們準備這樣一個元素:

<div id="box"></div>

添加樣式:

#box {
width: 100px;
height: 100px;
background: blue;
}

在 2s 的時候修改它的高度:

const box = document.querySelector('#box');

setTimeout(() => {
box.style.width = '200px';
}, 3000);

然后我們用 ResizeObserver 監(jiān)聽它的變化:

const resizeObserver = new ResizeObserver(entries => {
console.log('當前大小', entries)
});
resizeObserver.observe(box);

在瀏覽器跑一下:

大小變化被監(jiān)聽到了,看下打印的信息:

可以拿到元素和它的位置、尺寸。

這樣我們就實現(xiàn)了對元素的 resize 的監(jiān)聽。

除了元素的大小、可見性、屬性子節(jié)點等變化的監(jiān)聽外,還支持對 performance 錄制行為的監(jiān)聽:

PerformanceObserver

瀏覽器提供了 performance 的 api 用于記錄一些時間點、某個時間段、資源加載的耗時等。

我們希望記錄了 performance 那就馬上上報,可是怎么知道啥時候會記錄 performance 數(shù)據(jù)呢?

用 PeformanceObserver。

PerformanceObserver 用于監(jiān)聽記錄 performance 數(shù)據(jù)的行為,一旦記錄了就會觸發(fā)回調(diào),這樣我們就可以在回調(diào)里把這些數(shù)據(jù)上報。

比如 performance 可以用 mark 方法記錄某個時間點:

performance.mark('registered-observer');

用 measure 方法記錄某個時間段:

performance.measure('button clicked', 'from', 'to');

后兩個個參數(shù)是時間點,不傳代表從開始到現(xiàn)在。

我們可以用 PerformanceObserver 監(jiān)聽它們:

<html>
<body>
<button onclick="measureClick()">Measure</button>

<img src="https://p9-passport.byteacctimg.com/img/user-avatar/4e9e751e2b32fb8afbbf559a296ccbf2~300x300.image" />

<script>
const performanceObserver = new PerformanceObserver(list => {
list.getEntries().forEach(entry => {
console.log(entry);// 上報
})
});
performanceObserver.observe({entryTypes: ['resource', 'mark', 'measure']});

performance.mark('registered-observer');

function measureClick() {
performance.measure('button clicked');
}
</script>
</body>
</html>

創(chuàng)建 PerformanceObserver 對象,監(jiān)聽 mark(時間點)、measure(時間段)、resource(資源加載耗時) 這三種記錄時間的行為。

然后我們用 mark 記錄了某個時間點,點擊 button 的時候用 measure 記錄了某個時間段的數(shù)據(jù),還加載了一個圖片。

當這些記錄行為發(fā)生的時候,希望能觸發(fā)回調(diào),在里面可以上報。

我們在瀏覽器跑一下試試:

可以看到 mark 的時間點記錄、資源加載的耗時、點擊按鈕的 measure 時間段記錄都監(jiān)聽到了。

分別打印了這三種記錄行為的數(shù)據(jù):

mark:

圖片加載:

measure:

用了這些數(shù)據(jù),就可以上報上去做性能分析了。

除了元素、performance 外,瀏覽器還有一個 reporting 的監(jiān)聽:

ReportingObserver

當瀏覽器運行到過時(deprecation)的 api 的時候,會在控制臺打印一個過時的報告:

瀏覽器還會在一些情況下對網(wǎng)頁行為做一些干預(yù)(intervention),比如會把占用 cpu 太多的廣告的 iframe 刪掉:

會在網(wǎng)絡(luò)比較慢的時候把圖片替換為占位圖片,點擊才會加載:

這些干預(yù)都是瀏覽器做的,會在控制臺打印一個報告:

這些干預(yù)或者過時的 api 并不是報錯,所以不能用錯誤監(jiān)聽的方式來拿到,但這些情況對網(wǎng)頁 app 來說可能也是很重要的:

比如我這個網(wǎng)頁就是為了展示廣告的,但瀏覽器一干預(yù)給我把廣告刪掉了,我卻不知道。如果我知道的話或許可以優(yōu)化下 iframe。

比如我這個網(wǎng)頁的圖片很重要,結(jié)果瀏覽器一干預(yù)給我換成占位圖了,我卻不知道。如果我知道的話可能會優(yōu)化下圖片大小。

所以自然也要監(jiān)聽,所以瀏覽器提供了 ReportingObserver 的 api 用來監(jiān)聽這些報告的打印,我們可以拿到這些報告然后上傳。

const reportingObserver = new ReportingObserver((reports, observer) => {
for (const report of reports) {
console.log(report.body);//上報
}
}, {types: ['intervention', 'deprecation']});

reportingObserver.observe();

ReportingObserver 可以監(jiān)聽過時的 api、瀏覽器干預(yù)等報告等的打印,在回調(diào)里上報,這些是錯誤監(jiān)聽無法監(jiān)聽到但對了解網(wǎng)頁運行情況很有用的數(shù)據(jù)。

文中的代碼上傳到了 github:https://github.com/QuarkGluonPlasma/browser-api-exercize

總結(jié)

監(jiān)聽用戶的交互行為,我們會用 addEventListener 來監(jiān)聽 click、mousedown、keydown、input 等事件,但對于元素的變化、performance 的記錄、瀏覽器干預(yù)行為這些不是用戶交互的事件就要用 XxxObserver 的 api 了。

瀏覽器提供了這 5 種 Observer:

  • IntersectionObserver:監(jiān)聽元素可見性變化,常用來做元素顯示的數(shù)據(jù)采集、圖片的懶加載
  • MutationObserver:監(jiān)聽元素屬性和子節(jié)點變化,比如可以用來做去不掉的水印
  • ResizeObserver:監(jiān)聽元素大小變化
  • 還有兩個與元素無關(guān)的:
  • PerformanceObserver:監(jiān)聽 performance 記錄的行為,來上報數(shù)據(jù)
  • ReportingObserver:監(jiān)聽過時的 api、瀏覽器的一些干預(yù)行為的報告,可以讓我們更全面的了解網(wǎng)頁 app 的運行情況

這些 api 相比 addEventListener 添加的交互事件來說用的比較少,但是在特定場景下都是很有用的。

瀏覽器的 5 種 Observer,你用過幾種呢?在什么情況下用到過呢?

責任編輯:姜華 來源: 神光的編程秘籍
相關(guān)推薦

2024-10-30 16:39:45

2019-07-22 13:39:59

Python編輯器開發(fā)

2022-03-28 20:57:31

私有屬性class屬性和方法

2021-12-15 23:10:34

JS Debugger 前端開發(fā)

2024-01-17 13:58:00

算法C#冒泡排序

2020-10-12 09:59:59

AndroidGoogle瀏覽器

2023-11-22 09:45:44

2021-03-03 00:01:30

Redis數(shù)據(jù)結(jié)雙向鏈表

2010-04-05 21:57:14

Netscape瀏覽器

2016-11-11 14:03:01

2020-11-16 07:05:34

瀏覽器請求硬核

2019-04-30 10:00:59

CSS居中前端

2016-06-02 13:22:12

LinuxWeb瀏覽器

2024-03-20 08:06:20

瀏覽器擴展插件iTab

2021-03-08 05:42:26

瀏覽器FirefoxVIA瀏覽器

2021-10-08 08:20:06

LinuxChromium瀏覽器

2011-04-25 11:05:10

javascript

2016-01-05 12:54:52

瀏覽器瀏覽器端緩存

2024-04-24 11:24:43

C#數(shù)據(jù)去重

2024-04-28 14:49:31

點贊
收藏

51CTO技術(shù)棧公眾號

中文字幕の友人北条麻妃| 播播国产欧美激情| 男女猛烈激情xx00免费视频| 成人毛片视频免费看| 亚洲经典在线| 亚洲天堂免费视频| 色一情一区二区| 精品麻豆一区二区三区| 国产高清精品在线| 欧美一级免费看| 精品无码国产一区二区三区51安| 成人性生活av| 国产精品黄色在线观看| 欧美日精品一区视频| 日韩一区二区三区高清| 欧美日韩在线观看免费| 国产精品22p| 一本一道波多野结衣一区二区| 色播亚洲婷婷| 国产麻豆免费观看| 久久高清免费观看| 不卡伊人av在线播放| 国产精品无码一区二区三| 欧美三级精品| 一级特黄大欧美久久久| 任我爽在线视频精品一| www视频在线| 国产视频一区在线观看一区免费| 在线亚洲国产精品网| 男女性杂交内射妇女bbwxz| 台湾佬中文娱乐久久久| 亚洲欧洲日本在线| 久久亚洲高清| 国产成人免费看一级大黄| 模特精品在线| 欧美极品少妇xxxxx| 成人信息集中地| 宅男在线一区| 精品动漫一区二区三区在线观看| 国产精品久久久久久亚洲影视 | 国产 中文 字幕 日韩 在线| 久久av影院| 精品久久久国产精品999| 日本一区二区三区在线视频| 精品人妻一区二区三区含羞草 | 国产成人综合在线观看| 国产精品国内视频| 欧美特黄aaaaaa| 极品尤物久久久av免费看| 中文字幕日韩精品有码视频| 久久无码人妻精品一区二区三区| 亚洲亚洲一区二区三区| 欧美精品电影在线播放| 国产一区二区视频免费在线观看| 变态调教一区二区三区| 亚洲日本va在线观看| 日韩福利一区二区三区| 日本福利在线观看| 成人国产精品免费网站| 成人在线观看av| 国产av一区二区三区| 另类小说欧美激情| 国产91色在线| 中文字幕在线播| 亚洲一区二区三区免费在线观看| 久久久亚洲欧洲日产国码aⅴ| 日韩黄色免费观看| 一区二区不卡| 久久综合久久八八| 岛国毛片在线观看| 欧美jizzhd精品欧美巨大免费| 俺也去精品视频在线观看| 男女做爰猛烈刺激| 国产欧美日韩一区二区三区四区| 日韩精品中文字| 在线免费观看麻豆| 日韩成人动漫在线观看| 日韩精品视频在线观看免费| 99re这里只有| 亚洲免费专区| 亚洲午夜女主播在线直播| 国产手机在线观看| 成人在线免费视频观看| 日韩中文在线不卡| 美女av免费看| 免费精品国产的网站免费观看| 亚洲美女免费精品视频在线观看| 加勒比一区二区| 残酷重口调教一区二区| 色狠狠av一区二区三区香蕉蜜桃| 国产精品免费人成网站酒店 | 亚洲精品美女久久久久| 国产精品无码午夜福利| 久草在线成人| 最近免费中文字幕视频2019| av激情在线观看| 激情自拍一区| 日韩av电影中文字幕| 天堂av免费在线观看| 久久99久久精品| 成人高清在线观看| 日本一卡二卡四卡精品| 中文字幕av一区二区三区高| 日韩激情久久| www国产在线观看| 国产九色精品成人porny| 亚洲一区二区三区xxx视频| 好男人在线视频www| 久久九九国产精品| 亚洲精品视频一二三| 91黄色在线| 日韩欧美第一页| 特黄视频免费观看| 欧美人与动xxxxz0oz| 9191成人精品久久| 日本泡妞xxxx免费视频软件| 精品三级av在线导航| 一本大道久久加勒比香蕉| 视频国产一区二区| 国产欧美日本| 成人国产亚洲精品a区天堂华泰| 亚洲AV无码国产精品午夜字幕| 欧美日韩福利| 日韩美女免费线视频| 国产又大又长又粗| 成人a免费在线看| 影音先锋亚洲视频| 69av成人| 欧洲精品一区二区三区在线观看| 99热这里只有精品2| 国产在线日韩精品| 欧美激情videos| 中文字幕在线网址| jlzzjlzz亚洲日本少妇| 国产高清免费在线| av高清一区| 亚洲国产成人爱av在线播放| 国产精品精品软件男同| 蜜桃av一区| 国产免费一区二区| 在线观看小视频| 欧美日韩久久不卡| xxxx日本免费| 亚洲自拍另类| 粉嫩av四季av绯色av第一区| 成人影院在线看| 欧美日韩专区在线| 亚洲精品色午夜无码专区日韩| 亚洲视频碰碰| 99re国产| 97影院秋霞午夜在线观看| 欧美色爱综合网| 国产精品密蕾丝袜| 国产精品大片| 99re视频在线观看| 中文在线观看免费| 欧美撒尿777hd撒尿| 国产传媒国产传媒| 欧美日韩黑人| 日本成人精品在线| 日韩二区三区| 欧美午夜激情在线| 国产草草浮力影院| 亚洲激情女人| 国产视频一区二区不卡| 国产99re66在线视频| 日韩欧美aaaaaa| 丝袜美腿小色网| 国产一区二区三区免费| 小说区视频区图片区| 国产91在线播放精品| 在线性视频日韩欧美| 在线免费av网| 国产拍揄自揄精品视频麻豆| 亚洲精品视频导航| 美女视频一区| 俺去啦;欧美日韩| 国产青青草视频| 中文字幕免费不卡| 亚洲怡红院在线| 欧美激情日韩| 国产视频在线观看一区| 美女的胸无遮挡在线观看 | 中文字幕一精品亚洲无线一区| 国产精品传媒在线观看| 日本一区二区三区四区在线视频| 成人黄色一区二区| 99久久夜色精品国产亚洲狼| 成人激情在线播放| 波多野结衣精品| 亚洲欧美制服丝袜| 国产一区二区在线不卡| 一级日本不卡的影视| 黄色a一级视频| 日本不卡的三区四区五区| 视频在线观看成人| www.久久热| 久久久在线观看| 国产在线观看免费网站| 911精品国产一区二区在线| 精品少妇久久久| 久久久精品天堂| 日本黄色一级网站| 米奇777在线欧美播放| 一区二区精品国产| 99re热精品视频| 9.1国产丝袜在线观看| 亚洲成a人v欧美综合天堂麻豆| 精品日韩在线一区| 日韩黄色片网站| 亚洲三级小视频| 欧美成人三级伦在线观看| 奇米四色…亚洲| 久久在线中文字幕| 欧美日韩一区二区三区视频播放| 99r国产精品视频| 亚洲ww精品| 国产精品第10页| 中文字幕在线看片| 性欧美亚洲xxxx乳在线观看| 国产乱色在线观看| 中文字幕av一区| 韩国中文字幕2020精品| 亚洲国产精久久久久久久| 99草在线视频| 6080国产精品一区二区| 中文有码在线播放| 色婷婷av一区二区三区gif| 亚洲久久久久久| 国产一区二区久久| 污视频网址在线观看| 日本午夜一区二区| 亚洲五月天综合| 久久在线精品| 337p粉嫩大胆噜噜噜鲁| 日韩亚洲国产精品| 国产欧美日韩网站| 亚洲国产精品一区制服丝袜| 欧美a级免费视频| 欧美一区二区三区久久精品茉莉花| 亚洲免费精品视频| 青青一区二区三区| 亚洲一区二区三区四区中文| 日韩成人精品一区| 亚洲欧美在线网| 国产精品成人av| av电影一区二区三区| 亚洲国产不卡| 免费特级黄色片| av不卡在线| 国产精品丝袜久久久久久消防器材| 国产日韩欧美三级| 午夜精品久久久内射近拍高清| 鲁大师成人一区二区三区| 日韩av播放器| 免费高清不卡av| 久久久久久久久久一区二区| 国产自产v一区二区三区c| 操人视频免费看| 成人午夜大片免费观看| 搡老熟女老女人一区二区| 91麻豆123| 少妇太紧太爽又黄又硬又爽小说 | 精品国产91乱码一区二区三区 | 久久久成人精品视频| 18videosex性欧美麻豆| 久久久久久国产精品美女| gogo高清在线播放免费| 日本精品免费一区二区三区| 色综合一本到久久亚洲91| 国产在线拍揄自揄视频不卡99| 成人在线视频区| 精品免费二区三区三区高中清不卡| 日韩激情啪啪| 一区二区三区欧美成人| 国产精品v亚洲精品v日韩精品| 精品一区二区中文字幕| 麻豆成人久久精品二区三区小说| 韩国三级丰满少妇高潮| jvid福利写真一区二区三区| 中文字幕在线观看免费高清| 亚洲欧美一区二区三区孕妇| 国产乱码久久久久久| 欧洲一区在线观看| 精品国自产拍在线观看| 亚洲毛片一区二区| 91高清在线观看视频| 4438全国亚洲精品在线观看视频| 欧美日韩女优| av噜噜色噜噜久久| 国产在视频线精品视频www666| 日本a级片在线观看| 先锋影音久久久| 中文字幕第三区| 国产情人综合久久777777| 欧美色图一区二区| 欧美亚洲一区三区| 国模无码一区二区三区| 日韩中文在线中文网三级| 国产乱码精品一区二三赶尸艳谈| 国产日韩在线免费| 秋霞影视一区二区三区| 特级西西444| 另类的小说在线视频另类成人小视频在线 | 国产在线一区二区| 亚洲激情视频小说| 亚洲高清一区二区三区| 亚洲天堂国产精品| 精品亚洲国产成av人片传媒 | 韩国三级在线播放| 中文字幕av资源一区| 欧美 日韩 精品| 欧美精品一区二区高清在线观看| 自拍视频在线免费观看| 51久久精品夜色国产麻豆| 亚洲五码在线| 国产盗摄视频在线观看| 日本vs亚洲vs韩国一区三区二区 | 5278欧美一区二区三区| 欧美国产亚洲精品| 亚洲视频sss| 日本中文字幕不卡| 免费无码一区二区三区| 亚洲香蕉伊在人在线观| av中文字幕免费| 日韩在线观看高清| 国产精品成人国产| 日韩国产高清一区| 日韩国产在线一| caopeng视频| 色欧美乱欧美15图片| 日本天堂影院在线视频| 51ⅴ精品国产91久久久久久| 久久99偷拍| av之家在线观看| 99视频一区二区| 日本道在线观看| 亚洲精品久久久一区二区三区| 牛牛精品视频在线| 国产精品国模大尺度私拍| 国产精品videosex极品| 香蕉视频免费网站| 亚洲aⅴ怡春院| 日韩有码第一页| 91av网站在线播放| 亚洲免费成人av在线| 丁香婷婷激情网| 国产拍欧美日韩视频二区| 在线观看国产一区二区三区| 中文字幕最新精品| 91精品网站在线观看| 99re99热| 高清不卡一区二区| 国产精品自拍视频一区| 亚洲激情中文字幕| 国模冰冰炮一区二区| 水蜜桃一区二区| 国内一区二区在线| 免费在线观看av网址| 日韩av在线免费播放| 在线女人免费视频| 日韩hmxxxx| 国产伦精品一区二区三区视频青涩 | 好吊视频一区二区三区| 2019中文字幕免费视频| 国产一区二区三区网| 91 在线视频观看| 一区二区久久久久久| 人妻少妇精品无码专区久久| 欧美一级高清免费| 99精品在线观看| 日韩Av无码精品| 在线精品视频免费播放| 毛片激情在线观看| 国产精品久久亚洲| 亚洲女同在线| 91香蕉视频污在线观看| 精品久久久久久久久久久久久久久 | 日日夜夜精品免费| 国产成人一区二区三区| 91av精品| 国精产品一区一区三区免费视频| 欧美精选一区二区| 国产精品蜜芽在线观看| 亚洲欧美日韩另类精品一区二区三区| 国产精品99久久久| 亚洲第一网站在线观看| 九九热精品视频| 国产欧美日韩精品高清二区综合区| 波多野结衣在线免费观看| 精品成人乱色一区二区| 三级外国片在线观看视频| 国产精品一区二区不卡视频| 免费欧美在线视频| 国产一级生活片| 色偷偷噜噜噜亚洲男人| 日韩三级毛片| aaaaaaaa毛片| 欧美伊人久久久久久久久影院| 黄视频在线免费看|