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

客服IM消息列表虛擬滾動(dòng)技術(shù)實(shí)踐

開(kāi)發(fā) 前端
在IM會(huì)話消息列表體驗(yàn)優(yōu)化事項(xiàng)中我們對(duì)“上拉加載”、“下拉加載”、“下拉刷新”的技術(shù)特點(diǎn)和使用場(chǎng)景做了分析,然后對(duì)于下拉加載精確回滾這個(gè)場(chǎng)景,提出了三種解決方案:“定時(shí)器方案”、“等待圖片/視頻資源onload完成方案”、“反向渲染方案”;這三種方案各有利弊,希望能對(duì)讀者帶來(lái)一些啟發(fā)和幫助。?

1、場(chǎng)景分析

在IM系統(tǒng)中,核心事件都是圍繞著“聊天”這個(gè)主題展開(kāi)的,在聊天的過(guò)程中,獲悉用戶(hù)的需求,再通過(guò)系統(tǒng)集成的各種工具,幫助用戶(hù)完成訴求;“聊天”在IM業(yè)務(wù)中就是“會(huì)話消息”,當(dāng)客服與用戶(hù)之間存在大量聊天消息的時(shí)候,如何更好的去加載用戶(hù)歷史消息,提升客服查看消息體驗(yàn),是一個(gè)值得研究的方向。

由于聊天室的特殊布局,歷史消息加載需要用到虛擬滾動(dòng)的方式去實(shí)現(xiàn),如果想要更好的性能,還需要使用虛擬列表技術(shù),而虛擬滾動(dòng)技術(shù)又分為“上拉加載”和“下拉加載”,在移動(dòng)端領(lǐng)域,還需要“下拉刷新”,如何選擇合適的技術(shù)方案是我們接下來(lái)需要討論的問(wèn)題。

2、虛擬滾動(dòng)技術(shù)調(diào)研

虛擬滾動(dòng)技術(shù)的使用場(chǎng)景主要是在布局空間較小,不方便添加分頁(yè)器的頁(yè)面,例如移動(dòng)端列表頁(yè),IM系統(tǒng)左側(cè)進(jìn)線會(huì)話列表,會(huì)話消息列表,右側(cè)功能區(qū)域訂單/商品查詢(xún)列表等。

例如:會(huì)話進(jìn)線列表,商品查詢(xún)列表可以用到上拉加載,會(huì)話消息列表需要用到下拉加載,在移動(dòng)端,頁(yè)面刷新還需要用到下拉刷新。

圖片

下拉加載、上拉加載、下拉刷新方案對(duì)比:

技術(shù)方案

觸發(fā)方式

應(yīng)用場(chǎng)景

技術(shù)特點(diǎn)/難點(diǎn)

下拉加載

滾動(dòng)到頁(yè)面頂部觸發(fā)

會(huì)話消息列表數(shù)據(jù)加載

需要解決回滾定位不準(zhǔn)的問(wèn)題,還需要關(guān)注頁(yè)面圖片/視頻資源的對(duì)滾動(dòng)定位的影響

上拉加載

滾動(dòng)到頁(yè)面底部觸發(fā)

訂單/商品列表數(shù)據(jù)加載,select下拉框,移動(dòng)端列表頁(yè)面

需要計(jì)算滾動(dòng)到頁(yè)面底部,加載滾動(dòng)體驗(yàn)較好,更符合用戶(hù)的視覺(jué)感受

下拉刷新

拖動(dòng)頁(yè)面頂部向下移動(dòng)一定距離觸發(fā)

H5頁(yè)面刷新

需要處理好下拉橡皮筋效果,成功后刷新頁(yè)面

上面對(duì)我們系統(tǒng)中需要用到的加載/刷新技術(shù)做了簡(jiǎn)單的實(shí)現(xiàn)和應(yīng)用場(chǎng)景對(duì)比,其中上拉加載,下拉刷新不作為此次討論的重點(diǎn),且社區(qū)中實(shí)現(xiàn)的方案和博客也較多,我們此次重點(diǎn)討論的是下拉加載在IM會(huì)話消息中的應(yīng)用和體驗(yàn)優(yōu)化。

3、下拉加載在會(huì)話消息的應(yīng)用

3.1   會(huì)話消息歷史數(shù)據(jù)下拉加載流程

歷史數(shù)據(jù)拉取會(huì)經(jīng)歷三個(gè)過(guò)程:

  • 用戶(hù)滾動(dòng)消息到頁(yè)頂,觸發(fā)加載機(jī)制,在拉取數(shù)據(jù)的過(guò)程中,頂部展示一個(gè)“數(shù)據(jù)正在加載中”的loading文案,告知用戶(hù)需要等待加載結(jié)果的完成;
  • 數(shù)據(jù)返回之后,會(huì)被置于原數(shù)據(jù)的頂部(array.unshift(newArray)),渲染后原來(lái)的內(nèi)容就會(huì)被新的內(nèi)容壓到頁(yè)面底部;
  • 為了提高用戶(hù)的體驗(yàn),還需要將頁(yè)面滾動(dòng)到滾動(dòng)條最后停留的位置(加載前最后一條消息位置)

圖片

3.2   如何實(shí)現(xiàn)下拉加載

  • 監(jiān)聽(tīng)頁(yè)面scroll事件
// 監(jiān)聽(tīng)會(huì)話消息區(qū)域添加滾動(dòng)監(jiān)聽(tīng)事件
const listenScrollEvent = () => {
chatMsgContainer.value.addEventListener('scroll', scrolHandle)
}


// 滾動(dòng)邏輯處理回調(diào)函數(shù)
const scrolHandle = throttle(event => {
const { scrollHeight, scrollTop } = chatMsgContainer.value || {}
const { target } = event || {}
// 記錄下當(dāng)前會(huì)話滾動(dòng)位置,切換會(huì)話的時(shí)候需要回滾到最后停留的位置
userInfo.value.scrollPosition = scrollHeight - scrollTop || 0
// 超出一屏,滾動(dòng)到頂部,且沒(méi)有拉取完所有的數(shù)據(jù)
if (
target.scrollTop === 0 &&
target.scrollHeight > target.clientHeight &&
!userInfo.value?.isComplete
) {
handleScrollEvent(event) // 拉取歷史消息
}
}, 300)
  • 監(jiān)聽(tīng)數(shù)據(jù)變化執(zhí)行回滾動(dòng)作
// 消息滾動(dòng)
const handleMessageScroll = (len: number, oldLen: number) => {
if (!len) return
let msgScrollTimer = null
let targetDom = null
nextTick(() => {
// 獲取到加載后最后一條數(shù)據(jù)位置
const recentlyMsg = messagePools[len - 1]
// 計(jì)算新加載數(shù)據(jù)條數(shù)
const calcMsgLenDiff = len - oldLen
// 首次加載數(shù)據(jù)的時(shí)候讓滾動(dòng)條滾動(dòng)到最底部
if (len <= LIMIT_MESSAGE) {
// msgid是會(huì)話中的唯一標(biāo)識(shí),可以用此作為唯一ID
targetDom = document.querySelector(recentlyMsg.msgid)
// true 元素的頂部將對(duì)齊到可滾動(dòng)祖先的可見(jiàn)區(qū)域的頂部。對(duì)應(yīng)于scrollIntoViewOptions: {block: "start", inline: "nearest"}
firstDom?.scrollIntoView?.(true)
} else if (calcMsgLenDiff <= 1 && !recentlyMsg?.isHistory) {
// 這里用來(lái)處理用戶(hù)/客服發(fā)送消息滾動(dòng)邏輯
handleUserOrCustomerMsg()
} else if (calcMsgLenDiff >= 1) {
// 拉取歷史消息邏輯
// 獲取到加載前最后一條數(shù)據(jù)位置
const prevLastMsg = messagePools[calcMsgLenDiff - 1]
targetDom = document.querySelector(prevLastMsg.msgid)
targetDom?.scrollIntoView?.()
}
userInfo.value.isShowLoading = false
})
}


// 監(jiān)聽(tīng)會(huì)話消息數(shù)據(jù)變化
watch(
() => messagePools.length,
(len, oldLen) => {
handleMessageScroll(len, oldLen)
},
{
immediate: true
}
)
  • 下拉加載體驗(yàn)優(yōu)化方案及效果

如果只是按照上面的方式去處理,當(dāng)頁(yè)面中存在圖片/視頻的情況下,由于圖片/視頻渲染慢于普通文本,在加載圖片/視頻類(lèi)型的消息的時(shí)候,回滾的位置就會(huì)有偏差,不能準(zhǔn)確的回滾到預(yù)期的位置,我們對(duì)以下三種方案進(jìn)行了對(duì)比實(shí)現(xiàn),最終選擇了反向渲染加載的方案,如下:

3.2.1   setTimeout延時(shí)回滾方案

  • 優(yōu)點(diǎn):簡(jiǎn)單易實(shí)現(xiàn),只需要設(shè)置一個(gè)合適的定時(shí)器時(shí)間,對(duì)于大部分場(chǎng)景都能回滾正確;
  • 缺點(diǎn):可靠性較低,資源加載慢的情況下,也會(huì)出現(xiàn)回滾不準(zhǔn)確的情況,且setTimeout會(huì)帶來(lái)頁(yè)面閃爍的問(wèn)題;

// 消息滾動(dòng)
const handleMessageScroll = (len: number, oldLen: number) => {
if (!len) return
let msgScrollTimer = null
let targetDom = null
nextTick(() => {
// 獲取到加載后最后一條數(shù)據(jù)位置
const recentlyMsg = messagePools[len - 1]
// 計(jì)算新加載數(shù)據(jù)條數(shù)
const calcMsgLenDiff = len - oldLen
// 首次加載數(shù)據(jù)的時(shí)候讓滾動(dòng)條滾動(dòng)到最底部
if (len <= LIMIT_MESSAGE) {
...
// 針對(duì)圖片/視頻渲染慢的場(chǎng)景做個(gè)補(bǔ)償
msgScrollTimer = setTimeout(() => {
clearTimeout(msgScrollTimer)
firstDom?.scrollIntoView?.(true)
}, SCROLL_THRESHOLD)
} else if (calcMsgLenDiff <= 1 && !recentlyMsg?.isHistory) {
// 這里用來(lái)處理用戶(hù)/客服發(fā)送消息滾動(dòng)邏輯
handleUserOrCustomerMsg()
} else if (calcMsgLenDiff >= 1) {
// 拉取歷史消息邏輯
// ...
// 針對(duì)圖片/視頻渲染慢的場(chǎng)景做個(gè)補(bǔ)償
msgScrollTimer = setTimeout(() => {
clearTimeout(msgScrollTimer)
targetDom?.scrollIntoView?.()
}, SCROLL_THRESHOLD)
}
userInfo.value.isShowLoading = false
})
}

3.2.2   監(jiān)聽(tīng)img/vedio的onload事件方案

  • 優(yōu)點(diǎn):可以回滾的精準(zhǔn)度較高,沒(méi)有頁(yè)面閃爍的問(wèn)題;
  • 缺點(diǎn):如果不是虛擬列表,每次滾動(dòng)的時(shí)候可能會(huì)有大量的DOM節(jié)點(diǎn)查詢(xún)操作,造成頁(yè)面滾動(dòng)卡頓;
const allImgOrVedioLoaded = async() => {
const imgNodes = document.querySelectorAll('.messageWrapper img') || []
const vedioNodes = document.querySelectorAll('.messageWrapper vedio') || []
const promises = [...imgNodes, ...vedioNodes]
// 等待所有的資源加載完成,無(wú)論成功還是失敗
return await Promise.allSettled(
promises.map(source => {
new Promise(resolve => {
source.addEventListener('load', () => resolve(source))
})
})
)
}
// 消息滾動(dòng)
const handleMessageScroll = (len: number, oldLen: number) => {
if (!len) return
let msgScrollTimer = null
let targetDom = null
nextTick(() => {
...
// 等待img/vedio所有資源加載完成,執(zhí)行回滾操作
allImgOrVedioLoaded().then(() => {
firstDom.scrollIntoView(true)
})
} else if (calcMsgLenDiff <= 1 && !recentlyMsg?.isHistory) {
// 這里用來(lái)處理用戶(hù)/客服發(fā)送消息滾動(dòng)邏輯
handleUserOrCustomerMsg()
} else if (calcMsgLenDiff >= 1) {
// 拉取歷史消息邏輯
// ...
// 等待img/vedio所有資源加載完成,執(zhí)行回滾操作
allImgOrVedioLoaded().then(() => {
targetDom.scrollIntoView()
})
}
userInfo.value.isShowLoading = false
})
}

定時(shí)器/onload方案下拉加載回滾流程圖:

圖片

3.2.3   反向渲染加載方案

前面我們有提到過(guò)“上拉加載”,當(dāng)滾動(dòng)到底部加載新的一頁(yè)的數(shù)據(jù),數(shù)據(jù)從底部添加,無(wú)需執(zhí)行回滾動(dòng)作,整體的體驗(yàn)更加流暢自然。

既然“上拉加載”有這么多好處,那我們可不可以使用這樣的方式來(lái)模仿我們的“下拉加載”呢?顯然是可以的,我們頁(yè)面布局在使用flex布局的情況下,可以反轉(zhuǎn)主軸,這樣我們就可以像“上拉加載”一樣,觸發(fā)到頁(yè)面底部的時(shí)候,就去拉取新的歷史數(shù)據(jù),且反向渲染只是數(shù)據(jù)的反轉(zhuǎn),并不會(huì)帶來(lái)視覺(jué)上的反轉(zhuǎn);

display: flex;
flex-direction: column-reverse;

圖片

圖片

3.3   帶來(lái)的效果

圖片

4、總結(jié)

在IM應(yīng)用中,會(huì)話消息列表扮演著很重要的角色,是用戶(hù)與客服溝通結(jié)果最終呈現(xiàn)的地方,所以想要提升頁(yè)面的加載性能和用戶(hù)體驗(yàn),下拉加載性能和體驗(yàn)一直是一個(gè)重要的指標(biāo),當(dāng)然對(duì)于大列表組件最好結(jié)合使用虛擬列表技術(shù),盡量少的DOM渲染和盡量精準(zhǔn)的滾動(dòng)效果才能給客服帶來(lái)最極致的體驗(yàn)。

最后做個(gè)總結(jié):在IM會(huì)話消息列表體驗(yàn)優(yōu)化事項(xiàng)中我們對(duì)“上拉加載”、“下拉加載”、“下拉刷新”的技術(shù)特點(diǎn)和使用場(chǎng)景做了分析,然后對(duì)于下拉加載精確回滾這個(gè)場(chǎng)景,提出了三種解決方案:“定時(shí)器方案”、“等待圖片/視頻資源onload完成方案”、“反向渲染方案”;這三種方案各有利弊,希望能對(duì)讀者帶來(lái)一些啟發(fā)和幫助。


責(zé)任編輯:武曉燕 來(lái)源: 得物技術(shù)
相關(guān)推薦

2023-02-01 18:33:44

得物商家客服

2024-08-22 14:21:26

2023-10-16 18:39:22

2023-12-07 19:48:42

2015-06-10 15:36:47

環(huán)信移動(dòng)客服

2022-12-02 18:45:06

SOP機(jī)器人技術(shù)

2024-12-03 11:59:53

2024-02-01 08:00:00

百川大模型角色大模型

2012-02-09 15:39:38

思科虛擬化技術(shù)醫(yī)療行業(yè)

2021-09-18 09:53:48

京東客服IM消息消息處理

2024-10-14 08:09:08

2017-11-23 09:23:05

消息推送系統(tǒng)存儲(chǔ)

2024-08-22 18:49:23

2024-04-25 14:27:32

順序消息事務(wù)消息

2023-07-04 15:56:08

DevOps開(kāi)發(fā)測(cè)試

2021-12-10 10:29:07

在線客服系統(tǒng)

2024-09-18 08:25:46

2023-12-30 13:47:48

Redis消息隊(duì)列機(jī)制

2023-12-22 10:04:34

攜程負(fù)載均衡引擎

2014-06-24 09:47:33

虛擬運(yùn)營(yíng)商170
點(diǎn)贊
收藏

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

久久影院午夜精品| 人人妻人人澡人人爽精品日本| 国产成人精品999在线观看| 日本道在线观看一区二区| 午夜精品区一区二区三| 99在线精品视频免费观看20| 在线精品一区| 在线精品高清中文字幕| 日本中文字幕有码| 日韩欧美精品一区二区综合视频| 亚洲天堂a在线| 久久久99爱| 国产精品国产精品国产专区| 国产精品嫩草99av在线| 日韩中文字幕视频在线| 欧美做受喷浆在线观看| 成人短视频软件网站大全app| 激情成人中文字幕| 日本丰满少妇黄大片在线观看| 免费观看黄一级视频| 久久国产精品72免费观看| 97色在线播放视频| 九九热最新地址| 综合亚洲自拍| 日韩欧美精品三级| 亚洲一区二区三区四区五区xx| 欧美亚洲系列| 亚洲欧洲日韩综合一区二区| 久热这里只精品99re8久| 99久久免费国产精精品| 欧美96一区二区免费视频| 国产综合在线看| 成人免费视频网站入口::| 欧美精品一区二区三区精品| 亚洲国产精品高清久久久| 手机精品视频在线| 亚洲狼人综合| 欧美在线免费观看视频| 日本免费一级视频| а√在线中文网新版地址在线| 综合分类小说区另类春色亚洲小说欧美 | 亚洲五月婷婷| 久久久国产精品亚洲一区| 国产综合精品久久久久成人av| 欧美亚洲国产日韩| 亚洲第一中文字幕| 日本久久久久久久久久| 亚洲福利合集| 日韩欧美久久一区| 国产乱国产乱老熟300部视频| 亚洲国产伊人| 欧美日韩国产高清一区| 男女视频在线看| 成人免费在线观看视频| 欧美图片一区二区三区| 高清一区二区视频| 国产麻豆一区| 欧美日韩久久一区| 夜夜夜夜夜夜操| japansex久久高清精品| 欧美乱妇23p| 中文字幕一区久久| 高清一区二区| 精品粉嫩aⅴ一区二区三区四区| 丰满少妇中文字幕| 一区二区三区欧洲区| 精品国产凹凸成av人网站| 中文字幕第九页| 神马久久av| 中文字幕av一区二区三区谷原希美| 四虎永久免费在线观看| 精品freesex老太交| 中文字幕日韩av综合精品| 无码人中文字幕| 中文字幕亚洲综合久久五月天色无吗''| 久久精品亚洲一区| 亚洲av鲁丝一区二区三区| 黄色在线一区| 欧美一级高清免费播放| 午夜一区二区三区四区| 久久精品国产亚洲一区二区三区| 成人免费视频网| 成人免费公开视频| 国产日韩欧美精品在线| 椎名由奈jux491在线播放 | 亚洲国产成人av好男人在线观看| 国产欧美久久久久| 亚洲精华液一区二区三区| 欧美视频一区二区在线观看| 日本美女视频一区| 成人精品毛片| 国产亚洲欧美视频| 久久精品黄色片| 亚洲综合电影一区二区三区| 国产精品普通话| 可以免费看毛片的网站| 国产丝袜在线精品| japanese在线播放| 欧美电影免费观看网站| 在线不卡a资源高清| 日本五十肥熟交尾| 久久亚洲精品中文字幕蜜潮电影| 色综合久久悠悠| 成人黄色免费网| 成人av资源在线| 亚洲精品欧洲精品| 国产乱码午夜在线视频| 欧美疯狂做受xxxx富婆| 日韩一级视频在线观看| 综合天天久久| 国产成人鲁鲁免费视频a| 亚洲国产欧美另类| 亚洲国产经典视频| 黄色免费视频大全| 久久中文字幕一区二区| 亚洲最大在线视频| 午夜影院在线看| 国产精品99久久久| 亚洲午夜久久久影院伊人| 182在线视频观看| 6080日韩午夜伦伦午夜伦| 国产色视频一区二区三区qq号| 你懂的亚洲视频| 国产精品日韩欧美综合| 天堂а√在线8种子蜜桃视频| 亚洲精品伦理在线| 亚洲另类第一页| 精品久久不卡| 欧美在线视频播放| 天堂av手机版| 亚洲综合自拍偷拍| ass极品水嫩小美女ass| 91蜜臀精品国产自偷在线 | 高清一区二区中文字幕| 国产一区二区三区在线视频| 黄色在线观看国产| 成人av电影在线播放| 国产黄色激情视频| 亚洲性视频在线| 久久久精品视频成人| 在线观看色网站| 日本一区二区三区四区在线视频 | 在线能看的av网址| 亚洲黄色在线看| 日韩精品一区三区| 成人av网站免费观看| 精品少妇在线视频| 国产精品qvod| 国内精品久久久久久久久| 国产草草影院ccyycom| 亚洲欧洲三级电影| 国产探花在线观看视频| 伊人成综合网| 成人国产一区二区| 国内老司机av在线| 亚洲激情视频网站| 东京热一区二区三区四区| 91在线观看免费视频| 色综合av综合无码综合网站| 色婷婷av一区二区三区丝袜美腿| 91av在线影院| 黄色影院在线播放| 欧美午夜精品一区二区蜜桃| 精品一区二区三区蜜桃在线| 免费一级欧美片在线观看| 亚洲国产日韩美| 警花av一区二区三区| 欧美高清第一页| 乱精品一区字幕二区| 精品久久久久久久久国产字幕| 亚洲av无码一区二区三区网址 | japan高清日本乱xxxxx| 伊人成人在线| 欧美高清性xxxxhd| 色综合久久久| 欧美激情亚洲综合一区| 三级在线观看| 欧美高清视频www夜色资源网| 少妇被躁爽到高潮无码文| 成人综合在线视频| 精品视频无码一区二区三区| 国产乱码精品一区二区三区四区| 国产在线一区二区三区| 国精产品一区一区三区mba下载| 日韩av在线高清| 中文字幕在线观看欧美| 一区二区视频在线| 国产特黄级aaaaa片免| 久久91精品久久久久久秒播| 欧美久久在线观看| 国产欧美高清视频在线| 91久久爱成人| 希岛爱理一区二区三区av高清| 久久九九免费视频| 香蕉久久一区二区三区| 欧美男人的天堂一二区| 日本一区二区不卡在线| 中文字幕精品一区二区精品绿巨人 | 中文字幕亚洲一区| 亚洲欧美另类一区| 欧美色男人天堂| 日本网站在线播放| 亚洲卡通动漫在线| 亚洲精品91在线| av电影一区二区| 中文字幕亚洲影院| 久久不射2019中文字幕| 成人国产一区二区三区| 精品国产乱码久久久久久蜜坠欲下 | 精品国产乱码久久久久久1区二区| 亚洲一区二区动漫| 男人天堂网站在线| 久久国产成人精品| 欧美一区二区三区四区五区六区| 日本一区二区三区电影免费观看| 国产精品www网站| 九色porny丨首页入口在线| 美女少妇精品视频| 欧美黑人激情| 亚洲日本欧美中文幕| 日韩在线观看视频一区二区三区| 在线播放91灌醉迷j高跟美女| 欧美a视频在线观看| 亚洲电影中文字幕在线观看| 成人做爰视频网站| 欧美国产一区二区| 国产精品高清无码在线观看| 成人avav影音| 性欧美18—19sex性高清| 国产在线视频不卡二| 日本超碰在线观看| 欧美日韩国产精品专区| 91精品国产九九九久久久亚洲| bbbbbbbbbbb在线视频| 精品人伦一区二区色婷婷| 中文字幕永久在线视频| 懂色aⅴ精品一区二区三区蜜月| 九九九久久久久| 日韩毛片一二三区| 美国一级黄色录像| 亚洲国产精品精华液ab| 亚洲成人黄色av| 久久综合网色—综合色88| 中国黄色片视频| 不卡高清视频专区| 欧美xxxxx精品| 91天堂素人约啪| 少妇大叫太粗太大爽一区二区| av动漫一区二区| 好吊日免费视频| 久久精品一区二区| 特级西西www444人体聚色| 国产欧美日韩三级| 中文字幕第二区| 国产精品大尺度| 成人免费视频网站入口::| 亚洲乱码日产精品bd| 欧美又粗又大又长| 亚欧色一区w666天堂| 国产无遮挡又黄又爽在线观看| 亚洲成av人**亚洲成av**| 日韩一区二区视频在线| 在线看不卡av| 97成人免费视频| 日韩美女视频在线| 五月天婷婷在线播放| 国产一区二区久久精品| 日本在线视频观看| 色综合久久88色综合天天看泰| 欧美激情成人动漫| 2018日韩中文字幕| 91另类视频| 亚洲综合在线小说| 欧美一区 二区| 亚洲精品国产精品国自产| 91久久国产| 日本中文字幕网址| 免费精品视频最新在线| 永久av免费在线观看| 不卡av免费在线观看| 国产一二三四五区| 亚洲精品一二三| 国产又黄又猛又粗又爽| 精品婷婷伊人一区三区三| www.日韩高清| 精品无人区太爽高潮在线播放| www亚洲人| 欧美激情按摩在线| 亚洲四虎影院| 成人午夜影院在线观看| 日韩精品社区| 一区二区三区精品国产| 激情文学一区| 亚洲综合激情视频| 99久久婷婷国产综合精品| 国产性猛交xx乱| 午夜精品福利一区二区蜜股av| 日韩乱码一区二区三区| 欧美不卡一区二区三区四区| 男人天堂亚洲二区| 美女视频黄免费的亚洲男人天堂| 在线成人av观看| 91成人伦理在线电影| 精品视频免费在线观看| 韩日视频在线观看| 美国三级日本三级久久99| 国产精品一区二区人妻喷水| 国产精品国产a级| 久久久久久久久久久影院| 91精品国产品国语在线不卡| 国产小视频在线| 久久久久久久久久久久久久久久久久av | 中文字幕日本精品| 黄色在线免费观看网站| 91在线中文字幕| 欧美系列电影免费观看| 欧美网站免费观看| 国产成人综合网站| 天天做夜夜爱爱爱| 91官网在线观看| 青青草超碰在线| 77777亚洲午夜久久多人| 免费观看性欧美大片无片| 亚洲aⅴ天堂av在线电影软件| 亚洲免费黄色| 性生交大片免费看l| 亚洲天堂免费看| 一级做a爱片性色毛片| 国产亚洲精品美女久久久| 欧美亚洲日本精品| 国产精品麻豆免费版| 你懂的国产精品永久在线| 免费av不卡在线| 国产精品每日更新在线播放网址| 男人日女人网站| 亚洲免费一在线| 自拍偷拍欧美视频| 久久精品日韩精品| 久久国产精品99国产| 自拍偷拍中文字幕| 色又黄又爽网站www久久| 三级在线观看| 国产成人精品在线| 欧美日韩在线网站| 色多多视频在线播放| 国产精品女主播av| 中文字幕人妻丝袜乱一区三区| 亚洲午夜国产成人av电影男同| 女生影院久久| 日本精品一区二区三区不卡无字幕 | 久久九九国产精品怡红院 | 国产欧美综合精品一区二区| 欧美三级在线| 久久久老熟女一区二区三区91| 亚洲最大成人综合| 五月色婷婷综合| 国产成人综合精品| 日韩夫妻性生活xx| 中文字幕精品一区二区三区在线| 亚洲欧洲成人自拍| 精品国自产在线观看| 欧美精品999| 少妇一区二区三区| 天天操天天摸天天爽| 17c精品麻豆一区二区免费| 国产三级按摩推拿按摩| 欧美国产日韩免费| 精品欧美午夜寂寞影院| 欧美女人性生活视频| 国产日韩v精品一区二区| 在线免费看av的网站| 欧美xxxx14xxxxx性爽| 97精品久久| 九色porny91| 综合精品久久久| 婷婷丁香花五月天| 国产97在线视频| 亚洲成人二区| 久久人人爽人人爽人人片| 欧美日韩精品系列| 国模私拍视频在线播放| 欧美精品二区三区四区免费看视频 | 欧美激情精品久久久久久久变态| 精品精品国产毛片在线看| 黄色一级一级片| 亚洲女人小视频在线观看| 天天干天天舔天天射| 国产精品中文字幕久久久| 在线欧美三区| 在线观看亚洲大片短视频| 精品欧美乱码久久久久久1区2区| 日韩深夜视频| 日本福利视频导航| 91麻豆免费看片| 97人妻人人澡人人爽人人精品 | 99精品视频99| 日韩视频在线免费观看| 青草久久视频| 国产乱女淫av麻豆国产| 色呦呦网站一区|