久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

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

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

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

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

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

開始基礎(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)器的寬(高)度都是在樣式中寫死的,需要變?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)后開始滑動(dòng),應(yīng)該監(jiān)聽mousemove事件,但注意不是在滑動(dòng)器上,而是在整個(gè)文檔上監(jiān)聽,因?yàn)槭髽?biāo)有可能滑動(dòng)到頁(yè)面任何位置。當(dāng)用戶松開鼠標(biāo)時(shí),應(yīng)該取消對(duì)整個(gè)文檔mousemove的監(jiān)聽,所以在鼠標(biāo)按下的那一刻,應(yīng)該對(duì)document添加兩個(gè)事件:鼠標(biāo)移動(dòng)和鼠標(biāo)松開

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)中’) }, // 松開滑動(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)該改變樣式告訴用戶可以拖動(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) }, // 松開滑動(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)文章:
主站蜘蛛池模板: 日韩欧美一区二区在线 | 日韩视频中文字幕 | 夸克满天星在线观看 | 国产一区二区三区免费 | 中文字幕视频在线 | 久久91精品国产91久久跳 | 成人午夜毛片 | 狠狠视频| 日韩精品第一页 | 一区二区日本 | 91精品国产色综合久久 | 91久久久久久| 三级视频在线观看 | 国产一区欧美 | 久久精品这里热有精品 | 九九爱爱视频 | 亚洲综合二区 | 国产欧美精品一区二区 | 嫩草影院地址 | 麻豆精品久久久 | 国产亚洲精品v | 日本欧美大片 | 国产精品久久久久久久久久99 | 91成人精品视频 | 在线一区二区三区做爰视频网站 | 欧美一区二区三区电影 | 亚洲色图综合 | 亚洲欧美综合 | 青青操av| 色偷偷噜噜噜亚洲男人 | 久久久久久久久久久网站 | 国产综合视频在线观看 | 成人在线观看免费 | chinese中国真实乱对白 | 国产欧美精品区一区二区三区 | 一级全毛片 | 91福利视频导航 | 免费成人在线观看视频 | 国产日韩视频在线播放 | 在线免费看黄视频 | 亚洲一区二区三区四区五区中文 | 亚洲a在线播放 | 欧美一区二区三区在线观看视频 | 久久com| 日韩一区二区三区在线 | 亚洲成人免费在线 | 黑人巨大精品欧美一区二区小视频 | 国产精品视频免费看 | 国产精品久久久久久久久久免费看 | 亚洲人成中文字幕在线观看 | 日韩9999 | 久久综合久久久 | 玖玖久久 | 欧美精品在线一区二区 | 91精品国产一区二区三区四区在线 | 国产成人一区 | 欧美成人精品一区二区三区 | 国产高清一区二区三区 | 日本高清视频一区二区三区 | 日韩一区电影 | 国产综合久久 | 国产1区在线观看 | 福利91 | 精品视频在线免费 | 禁果av一区二区三区 | 国产欧美精品一区二区三区 | 天天射美女 | 成人激情视频在线观看 | caoporn免费 | 九九免费观看全部免费视频 | 天天天干夜夜夜操 | 色婷婷一区二区三区四区 | 国产一区二区三区免费视频 | 久久伊人操 | 日本综合久久 | 国产一区二区在线视频 | 国产性×xxx盗摄xxxx | 久久六月 | 91久久精品一区 | 九色在线视频 | 一区二区三区精品视频 | 久久久久久91香蕉国产 | 久久久久久久久成人 | 专干老肥女人88av | 日韩啊啊啊 | 亚洲成人中文字幕 | 欧美激情在线狂野欧美精品 | www.天天草 | av黄色在线免费观看 | 一区免费| 日本末发育嫩小xxxx | 国产精品视频一二三 | 蜜月久综合久久综合国产 | 黄网址在线观看 | 日日摸日日爽 | 91精品国产91综合久久蜜臀 | a级在线免费 | 日韩免费一区二区 | 久久精品福利 | 99伊人 | 伊人久久综合 | 国产 日韩 欧美 中文 在线播放 | 亚洲 中文 欧美 日韩 在线观看 | 精品久久久久久久久久久院品网 | 欧美三级电影在线观看 | 国产伦精品一区二区三区照片91 | 日韩精品视频在线播放 | 福利午夜 | 国产在线精品一区二区三区 | 成人一区二区三区在线 | 国产美女精品一区二区三区 | 精品久久久久一区二区国产 | 国产精品久久久久久久久免费桃花 | 天堂精品 | 午夜免费剧场 | 国产精品久久久久久久久久久免费看 | 91精品国产乱码久久久久久久久 | 国产色| 日日爽天天操 | 在线日韩欧美 | 97精品在线 | 日韩毛片在线观看 | 韩国精品一区二区三区 | 欧美啊v | 久久99精品国产99久久6尤 | 亚洲欧美一区二区精品中文字幕 | 午夜社区 | 99视频在线免费观看 | 欧美国产精品一区二区三区 | 伊人激情四射 | 中文字幕_第2页_高清免费在线 | 特级毛片 | 99久久婷婷国产综合精品电影 | 精品国产一区二区三区在线观看 | 国产亚洲精品精品国产亚洲综合 | 一级毛片大全免费播放 | 一本一道久久a久久精品综合 | 久草在线免费福利资源 | 每日更新亚洲 | 午夜影院男女 | 国产精品不卡一区 | 亚洲精品国偷拍自产在线观看 | 国家aaa的一级看片 h片在线看 | 欧日韩不卡在线视频 | 亚洲午夜精品视频 | 国产美女www爽爽爽免费视频 | 成人国产精品久久久 | 操久久 | 日本毛片视频 | 亚洲成av人片一区二区梦乃 | 在线观看欧美日韩视频 | 自拍亚洲 | 精品在线 | 亚洲香蕉视频 | 精品一区二区三区免费 | 欧洲精品乱码久久久久蜜桃 | 国产另类ts人妖一区二区 | 美女视频久久 | 亚洲精品午夜国产va久久成人 | 精品一区二区三区免费 | 99精品欧美一区二区三区综合在线 | 在线观看一区 | 欧美福利 | 亚洲精品福利 | 日日操天天操 | 久久r精品| 国产日韩精品一区二区 | 国产精品一区av | 一区二区av| 成人精品 | 欧美男人天堂网 | 亚洲一区二区三区蜜桃 | 国产精品99精品久久免费 | 亚洲成人精品 | 在线观看欧美成人 | 久久久久久亚洲 | 国产在线视频a | 成人a级网站 | 国产伦精品一区二区三区四区视频 | 三a毛片 | 亚洲国产青草 | 国产伦精品一区二区三区在线 | 一区二区在线免费观看 | 久久999视频 | 99精品久久久久久久免费 | 国产精品毛片在线 | 久久久久久久久一区二区三区 | 中文在线a在线 | 久久a视频 | 日韩成人免费电影 | 天天艹综合 | av网站在线免费观看 | 久久亚洲欧美日韩精品专区 | 亚洲成人高清 | 亚洲免费视频在线 | 精品国产一区二区三区成人影院 | 最新伦理片 | 精品国产91亚洲一区二区三区www | 中文字幕亚洲第一 | 亚洲一区成人在线观看 | 日日操夜 | 99久久日韩精品视频免费在线观看 | 精品国产欧美一区二区 | 奇米二区 | 黄色一级大片在线免费看产 | 一区二区国产精品 | 国产精品91久久久久 | 精品视频在线观看一区二区三区 | 少妇激烈床戏视频 | 欧美日韩毛片 | 在线成人av| 韩日精品在线观看 | 欧洲美女7788成人免费视频 | 精品国产乱码久久久久久88av | 国产午夜精品久久 | 久热免费在线观看 | 一区二区三区国产 | 欧美精品欧美激情 | 国产精品亚洲第一 | 久久久久久久一区 | 久久久久久久久中文字幕 | 91国内精品久久 | 最近最新中文字幕 | 国产九九在线观看 | 日韩国产在线 | 亚洲精品视频一区 | 精品久久久久久久久久久久久久 | 美女久久久 | 国产精品久久久久久 | 欧美激情欧美激情在线五月 | 久久av网 | 亚洲精品片| 久久久久一区二区三区 | 国产成人精品一区二区在线 | 欧美日韩国产高清 | 中文字幕乱码亚洲精品一区 | 久久精品国产91精品亚洲高清 | 亚洲精品a区 | 亚洲第一国产精品 | 日韩一区二区三区在线视频 | 91麻豆精品国产91久久久资源速度 | 国产午夜视频 | 91精品国产91久久综合桃花 | 成人小视频在线看 | 国产精品成av人在线视午夜片 | 国产欧美精品 | 在线欧美a| 小川阿佐美88av在线播放 | 一区二区激情 | 永久av| 亚洲精品久久久久久久久久久 | 91精品国产一区二区三区蜜臀 | 国产欧美日韩一区二区三区 | 精品无码久久久久国产 | 精品无码久久久久国产 | 影音先锋亚洲资源 | 国产真实乱全部视频 | 亚洲女人天堂网 | 欧美一区二区三区四区不卡 | 国产高清精品一区二区三区 | 最近的中文字幕在线看视频 | 91免费国产 | 国户精品久久久久久久久久久不卡 | 99国产精品久久久久久久 | 日本一级淫片免费看 | 久久欧美高清二区三区 | 欧美精品一区二区蜜臀亚洲 | 狠狠入ady亚洲精品经典电影 | 成人免费在线视频 | 成人伊人 | 日韩福利在线 | 黄片毛片 | 中文字幕亚洲欧美日韩在线不卡 | 精品亚洲一区二区三区 | 欧美日本精品 | 黄色片一区 | 亚洲视频自拍 | 欧美黑人一区 | 91精品久久久久久久久久入口 | 欧美一区二区视频 | 欧美成人手机在线 | 亚洲国产精品久久人人爱 | www.99re| 欧美一区二区伦理片 | 天天色天天射天天操 | 成人欧美一区二区三区视频xxx | 久久久久国产一区二区三区四区 | 日韩色综合 | 日日做夜夜爽毛片麻豆 | 久久久久久免费 | 青青久久| 中文字幕免费在线 | 在线观看av不卡 | 亚洲精品久久久久久久久久久 | 国产在线精品视频 | 天堂资源库| 成人看片免费网站 | 亚洲精品视频在线观看免费视频 | 精品中文字幕在线观看 | 成人网18免费网站 | 精久久 | 麻豆乱码国产一区二区三区 | 国产成人精品久久 | 久久小视频 | 国产精品久久久久免费 | 在线观看免费黄色小视频 | 亚洲国产一区视频 | 国产精品久久久久久久久久99 | 日韩在线精品视频 | 精久久 | 伊人一区 | 日韩在线观看 | 日本aⅴ毛片成人实战推荐 成人免毛片 | 日韩电影免费在线观看中文字幕 | 白浆视频在线观看 | 精品国产精品 | 国产成人精品一区二区三区视频 | 久久tv在线观看 | 精品一区二区三区免费视频 | 亚洲国产精品久久久男人的天堂 | 欧美日韩精品一区二区三区在线观看 | 97视频久久 | 精品影视 | 亚洲第一免费视频网站 | 福利在线播放 | 波多野结衣中文字幕在线视频 | 视频1区| 久久99精品久久久久久久青青日本 | 久久精品中文字幕 | 仙踪林久久久久久久999 | 国产高清视频在线 | 午夜tv| 国产精品99一区二区三区 | av黄色一级 | 97伦理电影院 | 中文字幕乱码一区二区三区 | 亚洲人成在线观看 | 日韩成人在线一区 | 欧美日韩一区二区三区免费视频 | 国内成人免费视频 | 中文字幕亚洲第一 | 亚州中文字幕 | 日韩无 | 精品国产精品国产偷麻豆 | 色呦呦网站在线观看 | 亚洲精品不卡 | 天天综合天天色 | 国产一区视频网站 | 日本全黄裸体片 | 天天干视频 | 日韩一区二区在线观看 | 九九热这里 | 日本私人网站在线观看 | 一区二区三区国产视频 | 亚洲高清网 | 国产精品永久免费 | 日韩欧美一区二区三区视频 | 欧美激情第二页 | 精品亚洲国产成av人片传媒 | 黄色免费视频 | 久久综合九色综合欧美狠狠 | 日韩av免费在线观看 | 成人免费毛片高清视频 | 国产精品爱久久久久久久 | 不卡免费在线视频 | 国产日韩一级片 | 午夜你懂得 | 亚洲免费av片 | 成人一区二区三区在线观看 | 欧美在线一区二区三区 | 久久久久久久一区二区三区 | 国产精品久久精品 | 超碰一区二区三区 | 欧美黄色性视频 | 色婷婷国产精品久久包臀 | 91人人爽人人爽人人精88v | 日韩国产在线观看 | 亚洲成人三区 | 国产精品91网站 | 成人羞羞在线观看网站 | 天堂一区二区三区 | 欧美一区2区三区4区公司二百 | 中文字幕7777| 国产一区二区免费电影 | 日本一区二区三区四区 | 三级无遮挡污在线观看 | 91av免费在线观看 | 欧美一区二区三区精品 | 亚洲精选一区二区 | 国产精品福利网站 | 在线看av的网址 | 夜夜天天 | 国产人妖视频 | 久久中文字幕一区二区三区 | 日韩视频在线观看视频 | 午夜精品久久久久久久99黑人 | 91久久爽久久爽爽久久片 | 亚洲精品一区二区三区蜜桃久 | 岛国av免费观看 | 成人av高清在线观看 | 51国产午夜精品免费视频 | 91免费视频在线 | 老汉色影院| 日韩黄色片免费看 | 中文字幕久久久 | 久久天堂 | 日韩欧美在线视频 | 懂色一区二区三区av片 | 黄色大片网| 中文二区| 99视频在线 | 91亚洲国产| 国产美女久久久 | 日日摸日日碰夜夜爽不卡dvd | 亚洲一区国产视频 | 99精品国产高清一区二区麻豆 | 中文字幕国产 | 欧美激情a∨在线视频播放 成人免费共享视频 | 一区二区精品在线 | 一区二区三区高清 | 欧美2区 | 国产免费看 | 日韩在线精品视频 | 日本天堂在线播放 | 日韩高清不卡一区二区三区 | 黄色小视频在线观看 | 婷婷激情五月 | 精品国产一区二区三区四 | 精品久久久久一区二区国产 | 不卡在线一区 | 91精品国产高清一区二区三区 | 日本伊人网站 | 欲色av| 国产精品久久一区二区三区 | 精品国产一区二区三区在线观看 | 欧美成人精品一区二区 | 吴梦梦到粉丝家实战华中在线观看 | 在线免费观看毛片 | 成人在线不卡 | 天堂视频在线 | 国产一区二区视频在线观看 | 午夜在线观看视频网站 | 国产一区二区久久久 | 久久中文字幕一区 | 精品日韩一区二区三区 | 日韩视频精品 | 欧美综合在线观看 | 成人免费视频 | 精品国产欧美一区二区三区成人 | 在线激情视频 | 日精品 | 99热国 | 免费在线一区二区三区 | 黄色网址免费在线 | 日韩在线二区 | 亚洲精品中文字幕乱码无线 | 亚洲一区视频 | 冷水浴在线观看 | a级在线 | 91精品在线观看入口 | 另类综合在线 | 午夜视| 在线精品观看 | 91麻豆精品国产91久久久久久久久 | 精品国产不卡一区二区三区 | 久久在线 | 九九色综合 | 国产精品久久久久永久免费观看 | 亚洲精品日韩综合观看成人91 | 免费中文字幕 | 久久在线 | 免费不卡视频 | 日韩中文字幕一区二区 | 久久国产精品免费一区二区三区 | 亚洲精品在 | 亚洲电影一区二区三区 | 一级免费黄视频 | 亚洲一区二区三区在线观看免费 | 午夜精品一区二区三区在线观看 | 日本电影www | 亚洲欧美在线一区 | 男女网站在线观看 | www.伊人 | 欧美精品一二三 | 91精品国产人妻国产毛片在线 | 久久伊人在 | 中文字幕亚洲综合 | 欧美日韩精品在线 | 亚洲精品一区中文字幕乱码 | 色呦呦网站在线观看 | 欧美日韩亚洲视频 | 一区二区三区国产 | 免费久久久久 | 日韩精品无码一区二区三区 | 日韩一区二区三区视频 | 久久久日韩精品一区二区三区 | 一区二区三区四区精品 | 中文字幕亚洲字幕一区二区 | 欧美人成在线 | 一区二区手机在线 | 国产成人精品免费视频大全 | 在线成人www免费观看视频 | 亚洲a级在线观看 | 亚洲精品一区二区三区 | 欧美视频精品 | 免费福利视频一区二区三区 | 久久久久久久久久久久久九 | 91视频原创 | 欧美精品免费在线观看 | 精品96久久久久久中文字幕无 | av午夜| 日韩在线观看视频一区二区 | 精品视频在线免费观看 | 在线免费视频成人 | 久久国产精品久久久久久电车 | www中文字幕| 高清国产午夜精品久久久久久 | 中文字幕一区二区三区四区 | 97超碰免费 | 亚洲精品www| 国产片一区二区三区 | 久国产 | 天天操天天插 | 免费看黄视频网站 | 欧美黑人xxx | 91影院| 久久久久久久久99精品 | 欧美亚洲国产日韩 | 黄色国产 | 日本不卡免费新一二三区 | 国产日韩欧美综合 | 久久视频一区 | 人干人人 | 男人视频网站 | 国产99久久精品一区二区永久免费 | 国产精品久久久久久婷婷天堂 | 日韩免费一区 | 伊人伊人伊人 | 9久9久 | 久久精品国产亚洲一区二区三区 | www.国产精品 | 欧美影| 男女网站在线观看 | 久久青| 国产欧美一区二区三区在线看 | 久久久www成人免费精品 | 国产三级在线免费观看 | 欧美激情国产日韩精品一区18 | 午夜精品久久久久久久星辰影院 | 亚洲欧美综合 | 热久久这里只有精品 | 亚洲国产成人精品女人久久久 | 日本亚洲最大的色成网站www | 欧美专区在线 | 99精品久久精品一区二区爱城 | 国产一区二区欧美 | 久久亚洲欧美日韩精品专区 | 亚洲欧洲日韩在线 | 亚洲成人高清在线 | 国产成人精品一区二区在线 | 国产欧美综合一区二区三区 | 日韩不卡一区 | 欧美成人精品在线观看 | 国产精品久久久久久久 | 国产一级免费 | 日本久久久久久久久久久久 | 国产在线一区二区 | 91精品国产综合久久久亚洲 | 日韩午夜场 | 精品久久久久久久久久久久久久 | 亚洲高清在线观看视频 | 国产欧美精品区一区二区三区 | 国产成在线观看免费视频 | 国产免费视频 | 精品一区视频 | 欧美日韩激情一区二区三区 | 日韩精品一区二区三区视频播放 | 日韩一区二区三区在线观看 | 久久综合色视频 | 自拍偷拍亚洲欧洲 | 国产精品久久久久久婷婷天堂 | av在线一区二区 | 国产精品日日做人人爱 | 欧美激情精品久久久久久 | 亚洲美女一区 | 四虎成人免费电影 | 极品毛片 | 亚洲国产一区二区在线观看 | 午夜精品久久久久99蜜 | 日韩午夜免费 | 午夜精品久久久久久久星辰影院 | 日韩视频在线一区二区 | 毛片网站免费在线观看 | 中文字幕一区在线观看视频 | 七七婷婷婷婷精品国产 | 91偷拍精品一区二区三区 | 国产视频一区二区 | 亚洲福利国产 | 国产免费一区二区 | 亚洲一区二区三区高清 | 日韩成人免费在线 | 北条麻妃国产九九九精品小说 | 五月婷亚洲 | 91精品国产一区二区三区蜜臀 | 欧美一级片在线观看 | 91亚洲精品乱码久久久久久蜜桃 | 性做久久久久久久免费看 | 久草在线资源福利站 | 日韩欧美在线视频播放 | 黄色一级免费电影 | 国产一区二区三区视频 | 国产精品毛片一区二区 | 亚洲一区在线日韩在线深爱 | 国产又色又爽又黄 | 播放一区 |