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

正在播放木下凛凛xv99| 午夜一区二区三区免费| 黄在线免费观看| 国产精品538一区二区在线| 久久99久久99精品免观看粉嫩 | 四虎亚洲成人| 99久久伊人久久99| 国产精品色悠悠| 黄色一级视频免费| 九色精品国产蝌蚪| 日韩免费看网站| 日韩中文字幕免费在线| 少女频道在线观看免费播放电视剧| 成人精品一区二区三区四区| 国产精品户外野外| 久久久久久久9999| 日本一本不卡| www.日韩在线| 日本道色综合久久影院| 好吊色视频在线观看| 免费一区二区三区视频导航| 日韩一区二区精品在线观看| 免费激情视频在线观看| a级片免费在线观看| 国产精品国产三级国产aⅴ中文 | 97精品人妻一区二区三区在线| 好吊一区二区三区| xxxxx成人.com| aa片在线观看视频在线播放| 精品国产乱码一区二区三区| 91搞黄在线观看| 亚洲一区二区三区av无码| jzzjzzjzz亚洲成熟少妇| 99久久精品免费精品国产| 成人亚洲激情网| 日韩精选在线观看| 国产美女精品| 久久久免费在线观看| 日韩在线不卡av| 欧美天天综合| 亚洲欧美国产精品久久久久久久 | 四虎影视成人精品国库在线观看| 大桥未久av一区二区三区| 欧美这里只有精品| 日本精品600av| 亚洲男人的天堂在线aⅴ视频| 日韩福利一区二区三区| 清纯唯美亚洲色图| 91香蕉国产在线观看软件| 国产成人免费电影| 99热这里只有精| 国产精品自拍在线| 999热视频| 精品乱子伦一区二区| 国产精品亚洲综合一区在线观看| 国产一区视频在线| 亚洲综合精品视频| 久久99精品一区二区三区三区| 国产精品wwwwww| 亚洲婷婷久久综合| 日本在线不卡视频一二三区| 国产精欧美一区二区三区| 黄色一级视频免费看| 久久久水蜜桃av免费网站| 欧美在线性爱视频| www.久久精品视频| 日韩精品免费专区| 国产在线观看一区二区三区| 一二三区中文字幕| 国产一区视频网站| 91九色极品视频| 国产刺激高潮av| 大桥未久av一区二区三区中文| 福利视频久久| 亚洲欧美日韩精品永久在线| 久久久久国产精品免费免费搜索| 日韩精品一区二区三区四区五区 | jizzjizz国产精品喷水| 欧美aa在线| 日本久久一区二区三区| 午夜久久久精品| 国产亚洲高清一区| 亚洲精品久久久久中文字幕二区| 中文人妻一区二区三区| 成人一级毛片| 欧美日韩成人网| 少妇一级淫片免费放中国| 日韩av电影一区| 亚洲最大福利视频网| 午夜在线视频免费| 国产精品久久久久久久岛一牛影视| 日本黄xxxxxxxxx100| 精品极品在线| 欧美日韩免费视频| 女性生殖扒开酷刑vk| 国产成人精品三级高清久久91| 日日狠狠久久偷偷四色综合免费 | 牛牛热在线视频| 亚洲欧洲www| 久无码久无码av无码| 欧美第一视频| 日韩一区二区三区视频| 亚洲第一成人网站| 午夜欧美在线| 欧美一级高清免费播放| 国产精品伦一区二区三区| 91在线视频播放| 久久综合久久综合亚洲| 69p69国产精品| 国产精品嫩草69影院| 亚洲自拍电影| 欧美成人中文字幕在线| 精品免费囯产一区二区三区| 国产一区999| 免费成人深夜夜行视频| 在线视频中文字幕第一页| 在线免费观看日韩欧美| 又色又爽又黄18网站| 清纯唯美亚洲综合一区| 97在线观看视频国产| 国产免费一区二区三区免费视频| 91网站黄www| 久久久久久av无码免费网站下载| 日韩天堂在线| 日韩av在线天堂网| 久草网在线观看| 蜜桃视频一区二区三区| 欧美大香线蕉线伊人久久国产精品| 老司机精品影院| 欧美影视一区在线| 性少妇bbw张开| 日韩视频一区| 99porn视频在线| 麻豆传媒在线免费看| 欧美伊人久久久久久午夜久久久久| 三叶草欧洲码在线| 激情综合自拍| 99在线视频播放| 黄网址在线观看| 欧美日韩一区不卡| 调教驯服丰满美艳麻麻在线视频| 亚洲国产日韩欧美一区二区三区| 91蜜桃网站免费观看| 黄网站在线免费看| 欧美疯狂做受xxxx富婆| 久久久久久成人网| 蜜桃av噜噜一区| 亚洲国产精品123| 电影亚洲一区| 国产一区av在线| 激情网站在线观看| 日本一区二区视频在线观看| 青青草成人免费在线视频| 北条麻妃一区二区三区在线观看| 欧美精品在线免费播放| 精品久久久久中文慕人妻| 亚洲美女精品一区| 国产chinesehd精品露脸| 最新国产精品| 国产精品三区在线| 国产传媒av在线| 日韩风俗一区 二区| 日韩欧美大片在线观看| 99精品视频在线播放观看| 国产中文字幕免费观看| 亚洲桃色综合影院| 国产精品v片在线观看不卡| h网站在线免费观看| 欧美美女视频在线观看| 国产一区二区播放| 风间由美一区二区三区在线观看| 欧美精品卡一卡二| 国产精品一区二区av日韩在线 | 韩国成人在线| 日韩中文字幕久久| 99久久精品国产色欲| 亚洲国产精品久久人人爱蜜臀| 天天插天天射天天干| 视频一区视频二区在线观看| 亚洲丰满在线| 日韩在线亚洲| 欧美专区在线播放| 色综合久久影院| 欧美tickling挠脚心丨vk| 中文字幕第15页| 国产精品每日更新| 岛国av免费观看| 视频一区国产视频| 精品嫩模一区二区三区| 希岛爱理av免费一区二区| 国产剧情久久久久久| 17videosex性欧美| 中文字幕亚洲欧美日韩2019| 国产成人精品a视频| 欧美色道久久88综合亚洲精品| 久久精品成人av| 国产精品中文字幕日韩精品 | 激情文学综合插| 9色porny| 久久精品国产大片免费观看| 国产伦精品一区二区三区照片| а√天堂资源国产精品| 欧美精品videosex牲欧美| 高清在线观看av| 亚洲成人激情在线| 亚洲熟女乱色一区二区三区久久久| 一区二区三区四区不卡在线 | 亚洲嫩草精品久久| 国精产品一区一区三区免费视频| 激情亚洲综合在线| 亚洲精品乱码久久久久久自慰| 中文字幕午夜精品一区二区三区| 欧美日韩精品综合| 91精品国产乱码久久久竹菊| 国产精品色视频| 最近高清中文在线字幕在线观看1| 久久精品国产2020观看福利| 欧美日韩国产中文字幕在线| 欧美tickling挠脚心丨vk| 91在线你懂的| 欧美中文字幕一区二区三区亚洲| 日本系列第一页| 亚洲精品水蜜桃| 国产精品久久国产精麻豆96堂| 99久久777色| 精品无码人妻少妇久久久久久| 久久99精品久久久久久久久久久久| 国产成人无码一二三区视频| 国一区二区在线观看| 在线成人av电影| 日韩精品久久| 婷婷四房综合激情五月| 在线观看欧美理论a影院| 精品国产一区二区三区免费| 中文字幕区一区二区三| 91在线直播亚洲| 国产精品18| 91久久精品一区| 日本成人在线网站| 国产精品综合网站| 99久久久国产精品免费调教网站| 国产成人97精品免费看片| 涩涩视频在线免费看| 91精品国产91久久久久久最新| 98色花堂精品视频在线观看| 久久久视频精品| 老牛影视精品| 欧美在线激情网| 亚洲精品国产精品国产| 欧洲永久精品大片ww免费漫画| 国产无遮挡裸体视频在线观看| 海角国产乱辈乱精品视频| 黄网av在线| 91chinesevideo永久地址| 美女高潮在线观看| 日本精品久久久久久久| 桃花岛成人影院| 国产精品亚洲第一区| 欧洲美女精品免费观看视频| 国产日韩视频在线观看| 视频欧美精品| 成人xxxxx色| 老牛精品亚洲成av人片| 玛丽玛丽电影原版免费观看1977| 日本成人7777| 日韩国产欧美精品| 欧美国产小视频| 91免费版看片| 亚洲欧美日韩一区在线观看| 情侣黄网站免费看| 免费成人美女在线观看| 亚洲欧美日韩一二三区| 成人免费av网站| 免费成人深夜夜行p站| 欧美韩日一区二区三区| 色欲人妻综合网| 亚洲午夜久久久久久久久电影网 | 鲁大师私人影院在线观看| 久久综合九色欧美综合狠狠| 欧美黄色高清视频| 亚洲精品中文在线| 韩国av中文字幕| 欧美三级视频在线观看| 国产黄色av网站| 日韩h在线观看| 在线观看h片| 久久久久久伊人| 成人国产精品一区二区免费麻豆 | 日本成年人网址| 久久99精品久久久久久| 星空大象在线观看免费播放| 国产女主播视频一区二区| 欧美色图亚洲天堂| 色偷偷久久一区二区三区| 国产不卡精品视频| 亚洲性视频网站| 成人性生交大片免费看在线播放| 国产精品99久久99久久久二8| 麻豆精品久久| 日本一区视频在线观看| 国产精品v一区二区三区| 欧美一级特黄a| gogogo免费视频观看亚洲一| 亚洲欧美综合7777色婷婷| 精品久久久久久久久久| 国产探花精品一区二区| 亚洲性av在线| xxx.xxx欧美| 成人xxxx视频| 久久99精品久久久久久园产越南| 99中文字幕在线观看| 青青青伊人色综合久久| 精品中文字幕在线播放| 亚洲精品国久久99热| 国产字幕在线观看| 日韩av一区二区在线| 182tv在线播放| 国产日韩精品电影| 精品不卡一区| 日本福利视频在线| 成人免费av资源| 欧美高清视频一区二区三区| 欧美视频一二三区| 日本aaa在线观看| 午夜免费在线观看精品视频| 日韩欧美久久| 最新不卡av| 久久精品国产秦先生| 老牛影视av老牛影视av| 欧美日韩激情视频| 神马午夜一区二区| 高清欧美性猛交xxxx| 亚洲精品视频一二三区| 国产树林野战在线播放| 老司机精品视频导航| 国产三级黄色片| 在线免费av一区| 黄网站在线观看| 国产91精品网站| 最新国产一区| 成人午夜视频免费在线观看| 91在线丨porny丨国产| 国偷自拍第113页| 日韩av最新在线| 另类激情视频| 欧美自拍资源在线| 日韩中文字幕亚洲一区二区va在线| 国产 中文 字幕 日韩 在线| 亚洲va欧美va人人爽| 国模无码一区二区三区| 国产做受高潮69| 欧美日韩直播| 情侣黄网站免费看| 中文字幕免费不卡| 国产精品羞羞答答在线| 另类图片亚洲另类| 亚洲专区**| 国产精品一线二线三线| 91免费版在线| 精品国产乱子伦| 在线国产精品视频| 91麻豆精品| 日韩国产小视频| 97久久精品人人澡人人爽| 无码人妻av一区二区三区波多野| 伊人伊成久久人综合网站| 日韩av黄色| 中文字幕人妻熟女人妻洋洋| k8久久久一区二区三区| 天堂а√在线中文在线新版| 一区二区欧美久久| 97久久中文字幕| 人妻无码久久一区二区三区免费| 91亚洲精华国产精华精华液| 亚洲欧美日韩激情| 久久久成人精品视频| 欧美日韩导航| 亚洲一区在线不卡| 一区二区三区免费看视频| 天天操天天射天天| 国产精品视频免费观看www| 欧美成人日本| 成人免费网站黄| 欧美一区二区三区免费观看视频| 1234区中文字幕在线观看| 日本三级中国三级99人妇网站| 老色鬼精品视频在线观看播放| 中文字幕第28页| 国产亚洲aⅴaaaaaa毛片| 精品精品视频| 日韩a在线播放| 亚洲欧美日韩一区二区 | 91精品国产色综合久久不卡粉嫩| 91免费国产精品| 久久久久久久久99精品| 99久久久无码国产精品免费| 欧美中文字幕第一页| 中文字幕一区二区三区乱码图片 | 国语自产精品视频在线看抢先版图片| 欧美三级美国一级|