黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

瀏覽:14日期:2022-10-01 15:36:26
前言

手動(dòng)封裝一個(gè)類(lèi)似Iview中的Split組件,可將一片區(qū)域,分割為可以拖拽調(diào)整寬度或高度的兩部分區(qū)域,最終效果如下:

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

開(kāi)始基礎(chǔ)布局

在vue工程中創(chuàng)建SplitPane組件,引入頁(yè)面使用。

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

<template> <div class='page'> <SplitPane /> </div></template><script>import SplitPane from ’./components/split-pane’export default { components: { SplitPane }, data() { return {} }}</script><style scoped lang='scss'>.page { height: 100%; padding: 10px; background: #000;}</style>

// split-pane.vue<template> <div class='split-pane'> split </div></template><script>export default { data() { return {} }}</script><style scoped lang='scss'>.split-pane { background: palegreen; height: 100%;}</style>

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

SplitPane組件由三部分組成:區(qū)域1,區(qū)域2,以及滑動(dòng)器。添加這三個(gè)元素,并分別添加class名,注意.pane為區(qū)域1和區(qū)域2共用。

<template><div class='split-pane'> <div class='pane pane-one'></div> <div class='pane-trigger'></div> <div class='pane pane-two'></div> </div></template>

將容器設(shè)置為flex布局,區(qū)域2的flex屬性設(shè)為1,則區(qū)域2會(huì)根據(jù)區(qū)域1的寬度變化自適應(yīng)。

<style scoped lang='scss'>.split-pane { background: palegreen; height: 100%; display: flex; .pane-one { width: 50%; background: palevioletred; } .pane-trigger { width: 10px; height: 100%; background: palegoldenrod; } .pane-two { flex: 1; background: turquoise; }}</style>

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

可以看到設(shè)置區(qū)域1的寬度變化就是實(shí)現(xiàn)該組件的核心點(diǎn)。

除了橫向還要支持縱向布局,所以給組件添加一個(gè)direction屬性,該屬性由外部傳入,值為row 或 column,與父元素的flex-direction屬性綁定。

<template> <div :style='{ flexDirection: direction }'> <div class='pane pane-one'></div> <div class='pane-trigger'></div> <div class='pane pane-two'></div> </div></template><script>export default { props: { direction: { type: String, default: ’row’ } }, data() { return {} }}</script>

在橫向布局中,區(qū)域1設(shè)置width:50%,滑動(dòng)器設(shè)置width:10px,而變?yōu)榭v向布局后這兩個(gè)width應(yīng)該變?yōu)閔eight。所以刪除style中這兩個(gè)width設(shè)置,添加一個(gè)lengthType計(jì)算屬性,根據(jù)不同的direction在行內(nèi)樣式中給這兩個(gè)元素分別設(shè)置寬高。

<template> <div :style='{ flexDirection: direction }'> <div :style='lengthType + ’:50%’'></div> <div :style='lengthType + ’:10px’'></div> <div class='pane pane-two'></div> </div></template>computed: { lengthType() { return this.direction === ’row’ ? ’width’ : ’height’ } }

同時(shí)在橫向布局中,區(qū)域1,區(qū)域2,滑動(dòng)器的height都為100%,在縱向布局下都應(yīng)該改為width: 100%。所以刪除原本的height設(shè)置,將direction綁定為容器的一個(gè)class,根據(jù)該class設(shè)置三個(gè)子元素兩種情況下100%的屬性。

<template> <div : :style='{ flexDirection: direction }'> <div :style='lengthType + ’:50%’'></div> <div :style='lengthType + ’:10px’'></div> <div class='pane pane-two'></div> </div></template><script>export default { props: { direction: { type: String, default: ’row’ } }, data() { return {} }, computed: { lengthType() { return this.direction === ’row’ ? ’width’ : ’height’ } }}</script><style scoped lang='scss'>.split-pane { background: palegreen; height: 100%; display: flex; &.row { .pane { height: 100%; } .pane-trigger { height: 100%; } } &.column { .pane { width: 100%; } .pane-trigger { width: 100%; } } .pane-one { background: palevioletred; } .pane-trigger { background: palegoldenrod; } .pane-two { flex: 1; background: turquoise; }}</style>

此時(shí)如果在頁(yè)面中給組件傳入direction='column',可以看到已經(jīng)變?yōu)榭v向

<template> <div class='page'> <SplitPane direction='column' /> </div></template>數(shù)據(jù)綁定

當(dāng)前區(qū)域1的寬(高)度和滑動(dòng)器的寬(高)度都是在樣式中寫(xiě)死的,需要變?yōu)樵趈s中綁定才能進(jìn)行操作,首先將能用于計(jì)算的數(shù)字放在data中

data() { return { paneLengthPercent: 50, // 區(qū)域1寬度 (%) triggerLength: 10 // 滑動(dòng)器寬度 (px) }}

然后通過(guò)computed返回兩個(gè)樣式中需要的字符串,同時(shí)為了保證滑動(dòng)器在區(qū)域1和區(qū)域2的正中間,區(qū)域1的寬度應(yīng)該減去滑動(dòng)器寬度的一半。

computed: { lengthType() { return this.direction === ’row’ ? ’width’ : ’height’ }, paneLengthValue() { return `calc(${this.paneLengthPercent}% - ${this.triggerLength / 2 + ’px’})` }, triggerLengthValue() { return this.triggerLength + ’px’ } }

最后綁定在模板中

<template> <div : :style='{ flexDirection: direction }'> <div :style='lengthType + ’:’ + paneLengthValue'></div> <div :style='lengthType + ’:’ + triggerLengthValue'></div> <div class='pane pane-two'></div> </div></template>

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

事件綁定

想象一下拖拽滑動(dòng)器的過(guò)程,第一步是在滑動(dòng)器上按下鼠標(biāo),給滑動(dòng)器添加mousedown事件

<div : @mousedown='handleMouseDown'></div>

按下鼠標(biāo)后開(kāi)始滑動(dòng),應(yīng)該監(jiān)聽(tīng)mousemove事件,但注意不是在滑動(dòng)器上,而是在整個(gè)文檔上監(jiān)聽(tīng),因?yàn)槭髽?biāo)有可能滑動(dòng)到頁(yè)面任何位置。當(dāng)用戶(hù)松開(kāi)鼠標(biāo)時(shí),應(yīng)該取消對(duì)整個(gè)文檔mousemove的監(jiān)聽(tīng),所以在鼠標(biāo)按下的那一刻,應(yīng)該對(duì)document添加兩個(gè)事件:鼠標(biāo)移動(dòng)和鼠標(biāo)松開(kāi)

methods: { // 按下滑動(dòng)器 handleMouseDown(e) { document.addEventListener(’mousemove’, this.handleMouseMove) document.addEventListener(’mouseup’, this.handleMouseUp) }, // 按下滑動(dòng)器后移動(dòng)鼠標(biāo) handleMouseMove(e) { console.log(’拖動(dòng)中’) }, // 松開(kāi)滑動(dòng)器 handleMouseUp() { document.removeEventListener(’mousemove’, this.handleMouseMove) } }

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

我們實(shí)際要控制的是區(qū)域1的寬度,讓區(qū)域1的寬度等于當(dāng)前鼠標(biāo)距容器左邊的距離,也就是如果鼠標(biāo)移動(dòng)到下圖的圓圈位置,讓區(qū)域1的寬度等于中間的長(zhǎng)度:

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

這個(gè)長(zhǎng)度可以根據(jù)當(dāng)前鼠標(biāo)距頁(yè)面最左邊的距離減去容器距頁(yè)面最左邊的距離算出,也就是綠色長(zhǎng)度等于紅色減藍(lán)色:

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

給容器添加ref為了獲取容器的dom信息

...<div ref='splitPane' : :style='{ flexDirection: direction }'>...

如果打印ref的getBoundingClientRect()可以看到如下信息:

console.log(this.$refs.splitPane.getBoundingClientRect())

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

其中l(wèi)eft代表容器距離頁(yè)面左側(cè)的距離,width代表容器的寬度。通過(guò)鼠標(biāo)事件對(duì)象event的pageX可以獲得當(dāng)前鼠標(biāo)距頁(yè)面左側(cè)的距離,則我們要求的鼠標(biāo)距容器左側(cè)距離就可以算出來(lái)了。最后用這個(gè)距離除以容器寬度乘上100,就得到了這個(gè)距離的百分比數(shù)值,賦值給paneLengthPercent。

// 按下滑動(dòng)器后移動(dòng)鼠標(biāo) handleMouseMove(e) { const clientRect = this.$refs.splitPane.getBoundingClientRect() const offset = e.pageX - clientRect.left const paneLengthPercent = (offset / clientRect.width) * 100 this.paneLengthPercent = paneLengthPercent },

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

兼容縱向布局。

// 按下滑動(dòng)器后移動(dòng)鼠標(biāo) handleMouseMove(e) { const clientRect = this.$refs.splitPane.getBoundingClientRect() let paneLengthPercent = 0 if (this.direction === ’row’) { const offset = e.pageX - clientRect.left paneLengthPercent = (offset / clientRect.width) * 100 } else { const offset = e.pageY - clientRect.top paneLengthPercent = (offset / clientRect.height) * 100 } this.paneLengthPercent = paneLengthPercent },優(yōu)化

此時(shí)看上去需求已經(jīng)完成,但作為一個(gè)通用組件還有幾個(gè)要優(yōu)化的地方。

優(yōu)化一 抖動(dòng)問(wèn)題

把滑動(dòng)器寬度設(shè)置大一些后可以發(fā)現(xiàn)一個(gè)抖動(dòng)問(wèn)題如下:

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

在滑動(dòng)器兩側(cè)按下后輕輕移動(dòng)就會(huì)出現(xiàn)大幅偏移,因?yàn)楝F(xiàn)在的計(jì)算邏輯始終認(rèn)為鼠標(biāo)在滑動(dòng)器的正中間,沒(méi)有把滑動(dòng)器寬度考慮進(jìn)去。

在dota中定義一個(gè)當(dāng)前鼠標(biāo)距滑動(dòng)器左(頂)側(cè)偏移量

data() { return { paneLengthPercent: 50, // 區(qū)域1寬度 (%) triggerLength: 100, // 滑動(dòng)器寬度 (px) triggerLeftOffset: 0 // 鼠標(biāo)距滑動(dòng)器左(頂)側(cè)偏移量 } }

這個(gè)值等于鼠標(biāo)距頁(yè)面左側(cè)距離減去滑動(dòng)器距頁(yè)面左側(cè)距離(通過(guò)e.srcElement.getBoundingClientRect()),在每次滑動(dòng)器被按下時(shí)進(jìn)行賦值,也要區(qū)分橫向/縱向布局:紅 - 藍(lán) = 綠

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

// 按下滑動(dòng)器 handleMouseDown(e) { document.addEventListener(’mousemove’, this.handleMouseMove) document.addEventListener(’mouseup’, this.handleMouseUp) if (this.direction === ’row’) { this.triggerLeftOffset = e.pageX - e.srcElement.getBoundingClientRect().left } else { this.triggerLeftOffset = e.pageY - e.srcElement.getBoundingClientRect().top } },

有了這個(gè)triggerLeftOffset,設(shè)置區(qū)域1的寬度時(shí)就應(yīng)該變成:鼠標(biāo)距容器左側(cè)距離 減去 鼠標(biāo)距滑動(dòng)器左側(cè)的距離(triggerLeftOffset) 再加上滑動(dòng)器寬度的一半。這樣就相當(dāng)于把鼠標(biāo)又定位回了滑動(dòng)器正中間。

// 按下滑動(dòng)器后移動(dòng)鼠標(biāo) handleMouseMove(e) { const clientRect = this.$refs.splitPane.getBoundingClientRect() let paneLengthPercent = 0 if (this.direction === ’row’) { const offset = e.pageX - clientRect.left - this.triggerLeftOffset + this.triggerLength / 2 paneLengthPercent = (offset / clientRect.width) * 100 } else { const offset = e.pageY - clientRect.top - this.triggerLeftOffset + this.triggerLength / 2 paneLengthPercent = (offset / clientRect.height) * 100 } this.paneLengthPercent = paneLengthPercent },

此時(shí)不再有抖動(dòng)問(wèn)題

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

優(yōu)化二 鼠標(biāo)樣式

鼠標(biāo)在滑動(dòng)器上經(jīng)過(guò)時(shí)應(yīng)該改變樣式告訴用戶(hù)可以拖動(dòng),分別在橫向布局與縱向布局的滑動(dòng)器css中添加鼠標(biāo)樣式變化。

<style scoped lang='scss'>.split-pane { background: palegreen; height: 100%; display: flex; &.row { .pane { height: 100%; } .pane-trigger { height: 100%; cursor: col-resize; // 這里 } } &.column { .pane { width: 100%; } .pane-trigger { width: 100%; cursor: row-resize; // 這里 } } .pane-one { background: palevioletred; } .pane-trigger { background: palegoldenrod; } .pane-two { flex: 1; background: turquoise; }}</style>

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

優(yōu)化三 滑動(dòng)限制

作為一個(gè)通用組件,應(yīng)該向外部提供設(shè)置滑動(dòng)最小與最大距離的限制功能,接收min與max兩個(gè)props。

props: { direction: { type: String, default: ’row’ }, min: { type: Number, default: 10 }, max: { type: Number, default: 90 } },

在handleMouseMove加入判斷:

// 按下滑動(dòng)器后移動(dòng)鼠標(biāo) handleMouseMove(e) { const clientRect = this.$refs.splitPane.getBoundingClientRect() let paneLengthPercent = 0 if (this.direction === ’row’) { const offset = e.pageX - clientRect.left - this.triggerLeftOffset + this.triggerLength / 2 paneLengthPercent = (offset / clientRect.width) * 100 } else { const offset = e.pageY - clientRect.top - this.triggerLeftOffset + this.triggerLength / 2 paneLengthPercent = (offset / clientRect.height) * 100 } if (paneLengthPercent < this.min) { paneLengthPercent = this.min } if (paneLengthPercent > this.max) { paneLengthPercent = this.max } this.paneLengthPercent = paneLengthPercent }

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

優(yōu)化四 面板默認(rèn)寬度和滑動(dòng)器寬度

還是作為一個(gè)通用組件,面板初始化比例與滑動(dòng)器寬度應(yīng)該也由外部使用者決定。將data中的paneLengthPercent 和 triggerLength轉(zhuǎn)移到props中,從外部接收。

props: { direction: { type: String, default: ’row’ }, min: { type: Number, default: 10 }, max: { type: Number, default: 90 }, paneLengthPercent: { type: Number, default: 50 }, triggerLength: { type: Number, default: 10 } }, data() { return { triggerLeftOffset: 0 // 鼠標(biāo)距滑動(dòng)器左(頂)側(cè)偏移量 } },

在頁(yè)面中則需傳入paneLengthPercent,注意paneLengthPercent必須是一個(gè)定義在data中的數(shù)據(jù),并且要加上.sync修飾符,因?yàn)檫@個(gè)值要?jiǎng)討B(tài)修改。

// page.vue<template> <div class='page'> <SplitPane direction='row' :paneLengthPercent.sync='paneLengthPercent' /> </div></template>... data() { return { paneLengthPercent: 30 } }...

然后在組件中handleMouseMove中通過(guò)this.$emit觸發(fā)事件的方式修改paneLengthPercent值。

// 按下滑動(dòng)器后移動(dòng)鼠標(biāo) handleMouseMove(e) { const clientRect = this.$refs.splitPane.getBoundingClientRect() let paneLengthPercent = 0 if (this.direction === ’row’) { const offset = e.pageX - clientRect.left - this.triggerLeftOffset + this.triggerLength / 2 paneLengthPercent = (offset / clientRect.width) * 100 } else { const offset = e.pageY - clientRect.top - this.triggerLeftOffset + this.triggerLength / 2 paneLengthPercent = (offset / clientRect.height) * 100 } if (paneLengthPercent < this.min) { paneLengthPercent = this.min } if (paneLengthPercent > this.max) { paneLengthPercent = this.max } this.$emit(’update:paneLengthPercent’, paneLengthPercent) // 這里 },

此時(shí)組件的要素信息都可以通過(guò)外部的props控制了。

優(yōu)化五 插槽

作為一個(gè)容器組件不能添加內(nèi)容不是等于白費(fèi),分別給兩個(gè)區(qū)域添加兩個(gè)具名插槽。

<template> <div ref='splitPane' : :style='{ flexDirection: direction }'> <div :style='lengthType + ’:’ + paneLengthValue'> <slot name='one'></slot> </div> <div : @mousedown='handleMouseDown'> </div> <div class='pane pane-two'> <slot name='two'></slot> </div> </div></template>優(yōu)化六 禁止選中

在拖動(dòng)過(guò)程中,如果區(qū)域中有文字內(nèi)容可能會(huì)出現(xiàn)選中文字的情況,給滑動(dòng)器添加禁止選中效果。

... .pane-trigger { user-select: none; background: palegoldenrod; }...結(jié)束組件完整代碼

保留各背景色僅為了文章展示需要,實(shí)際使用中刪除

<template> <div ref='splitPane' : :style='{ flexDirection: direction }'> <div :style='lengthType + ’:’ + paneLengthValue'> <slot name='one'></slot> </div> <div : @mousedown='handleMouseDown' ></div> <div class='pane pane-two'> <slot name='two'></slot> </div> </div></template><script>export default { props: { direction: { type: String, default: ’row’ }, min: { type: Number, default: 10 }, max: { type: Number, default: 90 }, paneLengthPercent: { type: Number, default: 50 }, triggerLength: { type: Number, default: 10 } }, data() { return { triggerLeftOffset: 0 // 鼠標(biāo)距滑動(dòng)器左(頂)側(cè)偏移量 } }, computed: { lengthType() { return this.direction === ’row’ ? ’width’ : ’height’ }, paneLengthValue() { return `calc(${this.paneLengthPercent}% - ${this.triggerLength / 2 + ’px’})` }, triggerLengthValue() { return this.triggerLength + ’px’ } }, methods: { // 按下滑動(dòng)器 handleMouseDown(e) { document.addEventListener(’mousemove’, this.handleMouseMove) document.addEventListener(’mouseup’, this.handleMouseUp) if (this.direction === ’row’) { this.triggerLeftOffset = e.pageX - e.srcElement.getBoundingClientRect().left } else { this.triggerLeftOffset = e.pageY - e.srcElement.getBoundingClientRect().top } }, // 按下滑動(dòng)器后移動(dòng)鼠標(biāo) handleMouseMove(e) { const clientRect = this.$refs.splitPane.getBoundingClientRect() let paneLengthPercent = 0 if (this.direction === ’row’) { const offset = e.pageX - clientRect.left - this.triggerLeftOffset + this.triggerLength / 2 paneLengthPercent = (offset / clientRect.width) * 100 } else { const offset = e.pageY - clientRect.top - this.triggerLeftOffset + this.triggerLength / 2 paneLengthPercent = (offset / clientRect.height) * 100 } if (paneLengthPercent < this.min) { paneLengthPercent = this.min } if (paneLengthPercent > this.max) { paneLengthPercent = this.max } this.$emit(’update:paneLengthPercent’, paneLengthPercent) }, // 松開(kāi)滑動(dòng)器 handleMouseUp() { document.removeEventListener(’mousemove’, this.handleMouseMove) } }}</script><style scoped lang='scss'>.split-pane { background: palegreen; height: 100%; display: flex; &.row { .pane { height: 100%; } .pane-trigger { height: 100%; cursor: col-resize; } } &.column { .pane { width: 100%; } .pane-trigger { width: 100%; cursor: row-resize; } } .pane-one { background: palevioletred; } .pane-trigger { user-select: none; background: palegoldenrod; } .pane-two { flex: 1; background: turquoise; }}</style>組件使用示例

保留各背景色僅為了文章展示需要,實(shí)際使用中刪除

<template> <div class='page'> <SplitPane direction='column' :min='20' :max='80' :triggerLength='20' :paneLengthPercent.sync='paneLengthPercent' > <template v-slot:one> <div> 區(qū)域一 </div> </template> <template v-slot:two> <div> 區(qū)域二 </div> </template> </SplitPane> </div></template><script>import SplitPane from ’./components/split-pane’export default { components: { SplitPane }, data() { return { paneLengthPercent: 30 } }}</script><style scoped lang='scss'>.page { height: 100%; padding: 10px; background: #000;}</style>

vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件

到此這篇關(guān)于vue使用Split封裝通用拖拽滑動(dòng)分隔面板組件 的文章就介紹到這了,更多相關(guān)vue 拖拽滑動(dòng)分隔面板 內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 国产在线 | 中文 | 亚洲精品一品区二品区三品区 | 最新国产黄色网址 | 国产丝袜一区视频在线观看 | 国产伦a视频| 超碰人人人人人人人 | 午夜性爽 | 狼人av在线| 欧美综合成人 | 中文字幕av一区中文字幕天堂 | 亚洲国产精品精 | 成人男同av在线观 | av资源网址| 亚洲精品丝袜字幕一区 | 成年视频在线观看 | 久久激情网站 | 美女100%视频免费观看 | 国产98在线 | 免费、 | www.视频一区| 欧美午夜一区二区福利视频 | 国产女人18毛片水真多18精品 | 精品国产乱码久久久久久竹菊影视 | 涩涩涩在线视频 | 韩国毛片一区二区三区 | 96成人爽a毛片一区二区 | 青青草伊人久久 | 国产永久免费无遮挡 | 国产乱码精品一区二三区蜜臂 | av二区在线| 亚洲熟伦熟女新五十路熟妇 | 欧美xxxx做受性欧美88 | 在线免费日本 | 日韩久久免费视频 | 对白脏话肉麻粗话av | 亚洲图片一区二区 | 婷婷六月综合网 | 一区二区在线观看免费视频 | 亚洲精品网站在线播放gif | 久久99国产视频 | 久久国语对白 | 涩涩屋导航福利av导航 | 国产精品视频一区二区三区四区国 | 麻豆精品a∨在线观看 | www成人国产高清内射 | 午夜国产在线观看 | 日韩三级免费观看 | 久久久久久久一区 | 精品国产片一区二区三区 | 国产精品久久久久久久久久10秀 | 亚洲成人网络 | 日韩在线观看视频网站 | 69大片视频免费观看视频 | 亚洲精品一区 | 特黄特色大片免费播放 | 国产av成人一区二区三区 | 国产妇女乱码一区二区三区 | 性猛交富婆xxxx乱大 | 婷婷伊人五月色噜噜精品一区 | 中国少妇内射xxxhd | 国产又粗又猛又黄又爽性视频 | 成人av小说| 新天堂av| 日本黄页网站免费观看 | 国产大片黄在线观看私人影院 | 国产乱码久久久久 | www色国产| 国产精品久久久久久久白丝制服 | 翔田千里一区二区 | 中文区中文字幕免费看 | 成年女人18级毛片毛片免费 | 欧美在线视频不卡 | 中文字幕伊人 | 国产大学生呻吟对白精彩在线 | 精品啪啪 | 91欧美精品午夜性色福利在线 | 欧美色欧美亚洲高清在线视频 | 日日操狠狠操 | 91精品欧美一区二区三区 | 国产又粗又猛又爽又黄的视频文字 | 色哟哟一区二区三区精华液 | 国产黄色免费网站 | 亚洲成成品牛牛 | 色五月丁香五月综合五月 | 久久久999国产精品 久久久999精品视频 | 日本精品一区二区三区视频 | 在线视频网 | 亚洲欧美激情精品一区二区 | 91精品国产福利一区二区三区 | 日本不卡中文字幕 | 精品一区二区三区四区外站 | zzzwww在线看片免费 | 电车痴汉在线观看 | 亚洲国产精品无码专区影院 | 国产黄色片网站 | 国产精品丝袜美腿一区二区三区 | 精品国产黄色 | 高清国产一区二区三区四区五区 | 96久久| 中文字幕一区二区三区精彩视频 | 亚洲精品毛片一区二区三区 | 九色在线 | 日本不卡一二三 | 东南亚末成年videos | 成人18免费观看的动漫 | 永久看看免费大片 | 中日av乱码一区二区三区乱码 | 国产偷窥熟女精品视频大全 | 国产精品久久久久久久久久三级 | 炕上如狼似虎的呻吟声 | 800av免费在线观看 | 国产精品欧美久久久久久 | 久久精品美乳 | 色8久久人人97超碰香蕉987 | 91p在线观看 | 亚洲 欧美 另类 综合 偷拍 | 国产美女一区二区三区在线观看 | 亚洲人成亚洲人成在线观看 | 色先锋av资源中文字幕 | 1000部无遮挡拍拍拍免费视频观看 | 看全色黄大色黄大片 视频 欧美深度肠交惨叫 | 日本欧美一级片 | 果冻传媒18禁免费视频 | 日本高潮69ⅹxxx视频 | 亚洲国产va | 中文字幕_第2页_高清免费在线 | 女同久久另类69精品国产 | 亚洲国产精品成人一区二区在线 | 久久精品亚洲精品国产欧美kt∨ | 一区二区在线 | 欧洲 | 嫩草免费视频 | 午夜福利国产精品久久 | 奇米影视亚洲 | 国产又黄又爽刺激片 | 国模一二区 | 久久99精品国产麻豆不卡 | 97干在线 | 芭乐视频色 | av卡一卡二 | 丰满人妻在公车被猛烈进入电影 | 甄宓高h荡肉呻吟np 正在播放国产老头老太色公园 | 国产乱xxxxx987国语对白 | 丝袜 亚洲 欧美 日韩 综合 | 久久精品国产一区二区三区肥胖 | 成人精品视频99在线观看免费 | 亚洲va欧美va国产综合先锋 | 国产一级片播放 | 久久成年片色大黄全免费网站 | 亚洲国产精品一区二区久久恐怖片 | 91麻豆成人 | 奇米一区二区三区四区久久 | 欧美乱淫视频 | 日本伊人色综合网 | 一区二区三区四区蜜桃 | 日韩欧美xxxx | 国产精品一区二区久久精品爱微奶 | 朝鲜交性又色又爽又黄 | 欧美性色黄大片a级毛片视频 | 婷婷激情综合网 | 国产精品人妻一区二区高 | 黄一区二区三区 | 无套内谢大学处破女www小说 | 国产精品久久久久久久久久久久久久久 | 日韩中文在线视频 | 国产性一乱一性一伧的解决方法 | 黑人好猛厉害爽受不了好大撑 | 国产国产小嫩模无套内谢 | 日日躁狠狠躁夜夜躁av中文字幕 | 四虎影视在线播免费观看 | 久久久久久久麻豆 | 国产福利专区 | 国产毛片一区二区精品 | 激情五月激情综合 | 久久久美女视频 | 91视频88av| 日本久久久久久科技有限公司 | 久久久久久高潮国产精品视 | 亚洲欧美一级久久精品国产特黄 | 黄色自拍视频 | 欧美日韩精品中文字幕 | 国产精品免费无遮挡无码永久视频 | 亚洲中文字幕av无码专区 | 成人欧美日韩一区二区三区 | 亚洲最大福利网站 | 丁香啪啪综合成人亚洲小说 | 国产精品日本一区二区不卡视频 | 大尺度做爰床戏呻吟2046 | 在线天堂资源www在线中文 | 久久久久有精品国产麻豆 | av福利在线播放 | 国产麻豆剧传媒精品国产av | 男人全程不遮挡撒尿视频 | 国产精品对白久久久久粗 | 人人插人人插 | 成人免费在线播放 | 亚洲爆乳无码专区www | 欧美激情亚洲 | 欧美一区二区三区网站 | 女教师少妇高潮免费 | 一级中文字幕 | 亚洲va久久久噜噜噜久久天堂 | 中国孕妇变态孕交xxxx | 国产精品久久久久久久久免费相片 | 国产成人av网站 | 久久不见久久见免费视频7 18禁黄久久久aaa片广濑美月 | 在线观看亚洲国产 | 欧美激情一二三 | 95香蕉视频 | 免费毛片网站在线观看 | 粉嫩av国产一区二区三区 | 亚洲精品久久久蜜臀 | 国产后进极品圆润翘臀在后面玩 | 亚洲男同视频网站 | 国产精品久久久久婷婷二区次 | 国产猛男猛女超爽免费视频 | 香蕉视频网址 | 四虎影视www在线播放 | 伊人精品久久久大香线蕉 | 国内精品自在自线 | 亚洲乱亚洲乱妇小说网 | 亚洲自拍色图 | 国产国产精品人在线视 | 不卡视频在线观看 | 啦啦啦中文在线视频免费观看 | 成人亚洲精品国产www | 午夜福利伦伦电影理论片在线观看 | 色哟哟国产最新 | 欧美性猛交ⅹxx乱大交 | 色综久久综合桃花网 | 国产黄色片视频 | 国产99久久久久久免费看 | 国产一级做a爱片在线看免 国产一级做a爰片久久毛片男 | 黄色免费网站视频 | 国产精品51麻豆cm传媒的特点 | 成人女人看片免费视频放人 | 免费视频91蜜桃 | 日本系列 1页 亚洲系列 | 45分钟免费真人视频 | 在线v片免费观看视频 | 欧洲精品码一区二区三区免费看 | 精品无人乱码一区二区三区的优势 | 久久久久香蕉国产线看观看伊 | 久久精品99国产精品日本 | 亚洲欧洲日韩一区二区三区 | 青青草视频播放器 | 在线视频区 | 人妻一本久道久久综合久久鬼色 | 色综合久久综合 | 丰满少妇人妻无码 | 7mav视频| 国产肉体xxxx裸体视频 | 欧美高清在线一区 | 加勒比久久综合网天天 | 成人免费乱码大片a毛片软件 | 亚洲欧美综合区自拍另类 | 在线性视频 | 人与嘼交av免费 | 精品熟女碰碰人人a久久 | 一区二区三区www | 国产美女在线播放 | 稀缺呦国内精品呦 | 大j8福利视频导航 | 老妇高潮潮喷到猛进猛出 | 欧美性受极品xxxx喷水 | 女性向av片在线观看免费 | 亚洲色图欧美日韩 | 国产香蕉av | 日本精品4080yy私人影院 | 91成人精品一区二区三区四区 | 欧美一级在线观看 | 永久免费网站直接看 | 久久国产精品精品国产 | 精品www| 在线久操 | 大肉大捧一进一出好爽视频 | 最近中文在线观看 | 日日碰狠狠躁久久躁蜜桃 | 成人动漫久久 | 亚洲青草视频 | 人妻精油按摩bd高清中文字幕 | 久久成熟 | 亚洲综合另类小说色区一 | 日日碰狠狠躁久久躁 | 丰满人妻翻云覆雨呻吟视频 | 91九色丨porny丨丰满6 | 超碰最新在线 | 国产成人久久av免费高清蜜臀 | 亚洲色成人网站www永久男男 | 骚视频在线观看 | 黑人巨茎大战俄罗斯美女 | 国产伦精品一区二区三区在线观看 | 精品免费在线视频 | 国产精品系列在线 | 最新日本中文字幕 | 人人妻人人添人人爽欧美一区 | 日本三级欧美三级 | 精品国产一区二区三区久久 | 亚洲最新在线观看 | 中文字幕av亚洲精品一部二部 | 国产九色| 网站一区二区 | 自拍偷拍视频网站 | 日本欧美在线视频 | 国产伦精品一区二区三区视频金莲 | 日本做爰吃奶全过程免 | 国产夫妻自拍小视频 | 久久久久久久久99精品大 | 国产精品一区二区久久精品爱微奶 | 久久亚洲精品成人无码网站 | 风韵多水的老熟妇 | 无码人妻丰满熟妇区毛片 | 国产网红主播一区二区三区 | 综合网在线 | 欧美综合亚洲图片综合区 | 污污视频网站在线免费观看 | 国产香蕉视频在线播放 | 久久久久久久久久免费视频 | 中文字幕一区二区在线播放 | 尤物视频在线观看免费 | 秋霞特色aa大片 | 91av视频| 国产精品女教师av久久 | 九色视频国产 | av网站免费在线看 | 国色天香一卡2卡三卡4卡乱码 | 国产狂喷潮在线观看 | 国产又黄又硬又湿又黄的故事 | 亚洲日韩乱码中文字幕 | 日本xxxxwwwww | 日韩欧美超碰 | 我想看一级黄色片 | 4hu四虎永久在线影院 | y11111少妇| 成人免费在线观看网站 | 成人免费毛片aaaaaa片 | 乱码精品国产成人观看免费 | 国产亚洲精品美女久久久久 | 亚洲不卡视频在线 | 一级aa毛片 | 亚洲男人的天堂av手机在线观看 | 96国产视频| 正在播放国产老头老太色公园 | 亚洲 另类 在线 欧美 制服 | 黄色毛片网站 | 美女视频黄8视频大全 | 精品人妻少妇一区二区三区 | 一卡二卡三卡视频 | 黄色日韩 | 国产69精品久久久久男男系列 | 色播在线播放 | av在线男人天堂 | 色欧美在线视频 | 中文字幕在线观看一区二区 | 女人与拘做受全过程免费视频 | 久久久国产精华液 | 三a级做爰| 深夜福利在线播放 | 亚洲码国产精品高潮在线 | 99精品国产99久久久久久51 | 日本激情一区 | 99在线观看免费视频 | 国产精品爱久久久久久久 | 日韩亚洲一区二区三区 | 精品免费在线观看 | 中文字幕精品一区二区2021年 | 国产精品久久久久久久久借妻 | 亚洲精品美女久久久久99 | 中文www天堂 | 国产在线观看免费麻豆 | 日韩免费影视 | 日韩人妻无码精品-专区 | 黄色片免费观看视频 | 女同舌吻互慰一区二区 | 中文字幕国内自拍 | 国产伦精品一区二区三区综合网 | 欧美做爰爽爽爽爽爽爽 | 四虎影视大全 | 一级免费片 | 国产嫩草在线观看视频 | 色porny真实丨海角社区 | 女男羞羞视频网站免费 | 色狠狠一区二区三区香蕉 | 国产精品视频一 | 免费又黄又粗又爽大片69 | 免费丰满少妇毛片高清视频 | 少妇又紧又色又爽又刺激视频 | 男女黄色网| 久久爽久久爽久久av东京爽 | 欧美专区在线 | 欧美视频一区二区在线观看 | 国产精品欧美激情在线 | 国产精品成 | 极品老师腿张开粉嫩小泬 | 欧洲男女做爰免费视频 | 国产日产久久欧美清爽 | 五月天天丁香婷婷在线中 | 蜜桃视频黄色 | 成人一区二区三区在线观看 | 午夜在线观看免费视频 | 午夜女色国产在线观看 | 99riav6国产情侣在线看 | 国产又大又粗又长 | 超碰在线综合 | 老女人综合网 | 日本精品视频网站 | 国产精品嫩草久久久久 | 欧美乱大交做爰xxxⅹ | 水果派av解说在线观看 | 日本黄色美女视频 | 免费看成人毛片 | 亚洲精品第五页 | av影片在线 | 欧洲天堂网 | 国内精品久久久久久久97牛牛 | 国产精品区免费视频 | 性三级视频 | 我要看三级毛片 | 特级毛片全部免费播放器 | 特黄特色三级在线观看 | 国产13页 | 国产91综合一区在线观看 | 久久久精品二区 | 天天夜天天干 | 亚洲欧美v国产蜜芽tv | 日韩一区二区三区射精 | 国产精品久久久久久无码 | 狠狠色噜噜狠狠狠狠7777米奇 | 日本xxxx丰满人妖学校 | 日韩精品无码一区二区三区不卡 | 日韩成人av在线 | 亚洲熟妇色xxxxx亚洲 | 中文字幕精品av一区二区五区 | 东北少妇露脸无套对白 | 国产精品av久久久久久麻豆网 | 精品少妇一区二区三区在线观看 | 欧美性xxxxxxxxx | 绝顶高潮videos合集 | 四虎影视亚洲精品一区二区 | 少妇一晚三次一区二区三区 | 日本高清免费aaaaa大片视频 | 国产精品国产三级国产专区51区 | 日韩伊人网 | 法国伦理少妇愉情 | 九九热国产 | 国产999精品久久久 国产999精品久久久久久 | 999精欧美一区二区三区黑人 | 久久久噜噜噜久久中文福利 | 中文字幕精品一二三四五六七八 | 色猫咪免费人成网站在线观看 | 肥熟一91porny丨九色丨 | 日本爽快片100色毛片 | 91在线视频网址 | 大j8福利视频导航 | 97无码免费人妻超级碰碰夜夜 | 免费人成在线观看视频高潮 | 国产成人久久精品二区三区 | 丝袜美腿亚洲一区二区图片 | 91吃瓜今日吃瓜入口 | 免费久久视频 | 精品国产不卡一区二区三区 | 区二三区四区精华日产一线二线三 | 91精品国产综合久久久蜜臀 | 爱av免费| www国产| av在线资源网站 | www国产成人免费观看视频,深夜成人网 | 17c国产精品一区二区 | av资源网站 | 亚洲国产影院 | 国产女人精品视频 | 五月香婷婷 | 免费一级肉体全黄毛片 | 1000部拍拍拍18勿入在线看 | 国产69精品久久久久99 | 青青久操| 欧美性视频在线播放 | 91精品国产亚一区二区三区老牛 | 在线观看二区 | 欧美一区日韩一区 | 欧美成人一区二区三区片免费 | 夜夜高潮夜夜爽国产伦精品 | 国产精品1000夫妇激情啪 | 91久久夜色精品国产网站 | 黄色午夜视频 | 国产青青草 | 中文字幕一区二区三区久久蜜桃 | 免费在线观看黄色av | 国产精品永久久久久久久久久 | 羞羞色男人的天堂 | 国产一区二区三区四区五区 | 成年人网站免费视频 | 亚洲色欲综合一区二区三区 | 少妇一区二区视频 | 丁香六月婷婷开心婷婷网 | 久久欧美高清二区三区 | 黄色大片在线播放 | 午夜激情视频在线观看 | 亚洲精品乱码久久久久久蜜桃不卡 | 东京久久久 | 色综合天天射 | 色琪琪久久草在线视频 | 97人人澡人人深人人添 | 狠狠干天天色 | 91九色视频网站 | 99国产精品欲| 国内精品久久久久久久 | 亚洲30p| 91麻豆精品国产91久久久更新时间 | 成人爱爱 | 中文字幕在线精品视频入口一区 | 精品自拍av | 色香色香欲天天天影视综合网 | 亚洲精品动漫成人3d无尽在线 | 夜夜综合 | 黄色网址www| 九九99九九精彩46 | 日本少妇做爰奶水狂喷小说 | 欧美性猛交富婆 | 免费av地址 | 国产xxxxx| 日韩国产高清一区二区 | 国产精品久久免费观看spa | 成人毛片一区二区 | 丰满少妇夜夜爽爽高潮水网站 | 偷拍富婆做爰太猛视频 | 亚洲色偷精品一区二区三区 | 88av网站| 精品久久久久久人妻无码中文字幕 | 久久9热| 国产高h视频 | 日韩视频一区二区三区在线播放免费观看 | 国产精品久久久久9999高清 | 亚洲已满18点击进入在线看片 | 嫩草午夜少妇在线影视 | 国产免费看av | 久久午夜片 | 欧美黑人疯狂性受xxxxx喷水 | 色偷偷亚洲 | 久久久成 | 国产极品美女在线精品图片 | 97se亚洲| 免费夜色污私人影院在线观看 | 肥臀熟女一区二区三区 | 欧美黄网站在线观看 | 黄色suv视频 | 日本又黄又猛又爽免费视频 | 少妇专区 | 一本色道久久88加勒比—综合 | 欧美日a | 国产精品成人av性教育 | 日本黄色免费网站 | 亚洲精品欧洲 | 亚洲中文字幕久久久一区 | 国产精品二区一区 | 欧美精品免费看 | 日韩在线视频网 | 国产中文区二幕区2021 | 国产精品久久久久久久久久久久久久久久久久 | 国产精品av在线免费观看 | 玖玖爱av | 亚洲性自拍 | 国产aⅴ爽av久久久久久久 | 午夜免费看片 | 爱爱小视频网站 | 国产成人精品无码播放 | 女女互磨互喷水高潮les呻吟 | 91超碰人人 | 精品久久久久久无码中文字幕 | 污网站在线免费看 | 日日噜噜噜夜夜爽爽狠狠 | av在线网站无码不卡的 | 欧洲精品视频在线观看 | 日本在线视频www | 熟女人妇 成熟妇女系列视频 | 亚洲国产另类久久久精品性 | 岳奶大又白下面又肥又黑水多 | 天天爽夜夜爽夜夜爽精品 | а√天堂8资源在线官网 | 亚洲精品www久久久久久 | 一区二区三区乱码在线 | 欧洲 | 亚洲中文精品久久久久久不卡 | 亚洲精品2| 国产精品高清网站 | 97超碰超碰久久福利超碰 | 色播在线 | 久久特黄视频 | 亚洲精品无码久久久久久 | 国产女人爽到高潮a毛片 | av天堂永久资源网 | 男人网站在线观看 | a在线免费 | 人人妻人人澡人人爽欧美一区双 | 免费视频福利 | 久久在线免费 | 久久精品女人毛片国产 | 欧美一区二区三区四区五区 | 国产亚洲精品久久777777 | 欧美z○zo变态重口另类黄 | 美女免费网站在线观看 | 日韩精品成人在线观看 | 三级网站免费 | ,亚洲人成毛片在线播放 | 欧美黑人性暴力猛交喷水 | 国产中文网 | 最新免费中文字幕 | a猛片免在新观看 | 青草青草久热精品视频在线观看 | 欧美精品乱人伦久久久久久 | 欧美超碰在线观看 | 狠狠干夜夜爽 | 国产成人一区二区三区小说 | 欧美黑人添添高潮a片www | 亚洲中文字幕高清有码在线 | 最新中文字幕av专区 | 91色精品| 亚洲老女人视频 |