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

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

實(shí)用的 vue tags 創(chuàng)建緩存導(dǎo)航的過程實(shí)現(xiàn)

瀏覽:3日期:2022-10-21 15:07:15

需求

是要做一個(gè)tag,當(dāng)切換頁面的時(shí)候保留狀態(tài)。

效果圖:

實(shí)用的 vue tags 創(chuàng)建緩存導(dǎo)航的過程實(shí)現(xiàn)

思路

既然涉及了router跳轉(zhuǎn),那我們就去查api 發(fā)現(xiàn)keep-alive,巧了就用它吧。這里我們用到了include屬性,該屬性接受一個(gè)數(shù)組,當(dāng)組件的name名稱包含在inclue里的時(shí)候就會(huì)觸發(fā)keep-alive。

import { Vue, Component, Watch, Mixins } from ’vue-property-decorator’;// 此處省略n行代碼// 這是個(gè)計(jì)算屬性。(至于為什么這么寫 這里就不介紹了。)get cachedViews():string[] { return this.$store.state.tagsView.cachedViews;}// 此處省略n行代碼<keep-alive :include='cachedViews'> <router-view :key='key'></router-view></keep-alive>

那我們接下來就處理cachedViews變量就好了。

vuex實(shí)現(xiàn)

import { Route } from ’vue-router’; // 檢測(cè)規(guī)則interface TagsState{ visitedViews: Route[]; cachedViews: string[];}const state = (): TagsState => ({ visitedViews: [], // 展示的菜單 cachedViews: [], // 緩存菜單 用來activeed});const mutations = { ADD_VISITED_VIEW: (state: TagsState, view: Route) => { if (state.visitedViews.some((v: any) => v.path === view.path)) { return; } state.visitedViews.push( Object.assign({}, view, { title: view.meta.title || ’no-name’, }), ); }, ADD_CACHED_VIEW: (state: TagsState, view: Route) => { if (state.cachedViews.includes(view.meta.name)) { return; } if (!view.meta.noCache) { state.cachedViews.push(view.meta.name); } }, DEL_VISITED_VIEW: (state: TagsState, view: Route) => { for (const [i, v] of state.visitedViews.entries()) { if (v.path === view.path) { state.visitedViews.splice(i, 1); break; } } }, DEL_CACHED_VIEW: (state: TagsState, view: Route) => { const index = state.cachedViews.indexOf(view.meta.name); index > -1 && state.cachedViews.splice(index, 1); }, DEL_OTHERS_VISITED_VIEWS: (state: TagsState, view: Route) => { state.visitedViews = state.visitedViews.filter((v: any) => { return v.meta.affix || v.path === view.path; }); }, DEL_OTHERS_CACHED_VIEWS: (state: TagsState, view: Route) => { const index = state.cachedViews.indexOf(view.meta.name); if (index > -1) { state.cachedViews = state.cachedViews.slice(index, index + 1); } else { // if index = -1, there is no cached tags state.cachedViews = []; } }, DEL_ALL_VISITED_VIEWS: (state: TagsState) => { // keep affix tags const affixTags = state.visitedViews.filter((tag: any) => tag.meta.affix); state.visitedViews = affixTags; }, DEL_ALL_CACHED_VIEWS: (state: TagsState) => { state.cachedViews = []; }, UPDATE_VISITED_VIEW: (state: TagsState, view: Route) => { for (let v of state.visitedViews) { if (v.path === view.path) { v = Object.assign(v, view); break; } } },};const actions = { addView({ dispatch }: any, view: Route) { dispatch(’addVisitedView’, view); dispatch(’addCachedView’, view); }, addVisitedView({ commit }: any, view: Route) { commit(’ADD_VISITED_VIEW’, view); }, addCachedView({ commit }: any, view: Route) { commit(’ADD_CACHED_VIEW’, view); }, delView({ dispatch, state }: any, view: Route) { return new Promise((resolve) => { dispatch(’delVisitedView’, view); dispatch(’delCachedView’, view); resolve({ visitedViews: [...state.visitedViews], cachedViews: [...state.cachedViews], }); }); }, delVisitedView({ commit, state }: any, view: Route) { return new Promise((resolve) => { commit(’DEL_VISITED_VIEW’, view); resolve([...state.visitedViews]); }); }, delCachedView({ commit, state }: any, view: Route) { return new Promise((resolve) => { commit(’DEL_CACHED_VIEW’, view); resolve([...state.cachedViews]); }); }, delOthersViews({ dispatch, state }: any, view: Route) { return new Promise((resolve) => { dispatch(’delOthersVisitedViews’, view); dispatch(’delOthersCachedViews’, view); resolve({ visitedViews: [...state.visitedViews], cachedViews: [...state.cachedViews], }); }); }, delOthersVisitedViews({ commit, state }: any, view: Route) { return new Promise((resolve) => { commit(’DEL_OTHERS_VISITED_VIEWS’, view); resolve([...state.visitedViews]); }); }, delOthersCachedViews({ commit, state }: any, view: Route) { return new Promise((resolve) => { commit(’DEL_OTHERS_CACHED_VIEWS’, view); resolve([...state.cachedViews]); }); }, delAllViews({ dispatch, state }: any, view: Route) { return new Promise((resolve) => { dispatch(’delAllVisitedViews’, view); dispatch(’delAllCachedViews’, view); resolve({ visitedViews: [...state.visitedViews], cachedViews: [...state.cachedViews], }); }); }, delAllVisitedViews({ commit, state }: any) { return new Promise((resolve) => { commit(’DEL_ALL_VISITED_VIEWS’); resolve([...state.visitedViews]); }); }, delAllCachedViews({ commit, state }: any) { return new Promise((resolve) => { commit(’DEL_ALL_CACHED_VIEWS’); resolve([...state.cachedViews]); }); }, updateVisitedView({ commit }: any, view: Route) { commit(’UPDATE_VISITED_VIEW’, view); },};export default { namespaced: true, state, mutations, actions,};

上面代碼,我們定義了一系列的對(duì)標(biāo)簽的操作。

組件實(shí)現(xiàn)

組件解構(gòu)如圖

實(shí)用的 vue tags 創(chuàng)建緩存導(dǎo)航的過程實(shí)現(xiàn)

TheTagsView.vue

<script lang='ts'>/** * @author leo * @description #15638 【test_tabs 組件】tab組件 */import { Component, Vue, Prop, Watch, Mixins } from ’vue-property-decorator’;import ScrollPane from ’./ScrollPane.vue’;import path from ’path’;@Component({ components: { ScrollPane, },})export default class TheTagsView extends Vue { get visitedViews() { return this.$store.state.tagsView.visitedViews; // 點(diǎn)開過的視圖 } get routes() { return this.$store.state.permission.routes; } public visible: boolean = false; // 標(biāo)簽右鍵列表顯示隱藏 public top: number = 0; // transform定位 public left: number = 0; // transform定位 public selectedTag: any = {}; // 當(dāng)前活躍的標(biāo)簽 public affixTags: any[] = []; // 所有標(biāo)簽 @Watch(’$route’) public watchRoute() { this.addTags(); // 新增當(dāng)前標(biāo)簽 this.moveToCurrentTag(); // 刪除原活動(dòng)標(biāo)簽 } @Watch(’visible’) public watchVisible(value: any) { if (value) { document.body.addEventListener(’click’, this.closeMenu); } else { document.body.removeEventListener(’click’, this.closeMenu); } } public isActive(route: any) { // 是否當(dāng)前活動(dòng) return route.path === this.$route.path; } public isAffix(tag: any) { // 是否固定 return tag.meta && tag.meta.affix; } // 過濾當(dāng)前標(biāo)簽于路由 public filterAffixTags(routes: any, basePath = ’/’) { let tags: any = []; routes.forEach((route: any) => { if (route.meta && route.meta.affix) { const tagPath = path.resolve(basePath, route.path); tags.push({ fullPath: tagPath, path: tagPath, name: route.name, meta: { ...route.meta }, }); } if (route.children) { const tempTags = this.filterAffixTags(route.children, route.path); if (tempTags.length >= 1) { tags = [...tags, ...tempTags]; } } }); return tags; } public addTags() { const { name } = this.$route; if (name) { this.$store.dispatch(’tagsView/addView’, this.$route); } return false; } public moveToCurrentTag() { const tags: any = this.$refs.tag; this.$nextTick(() => { if (tags) { for (const tag of tags) { if (tag.to.path === this.$route.path) { (this.$refs.scrollPane as any).moveToTarget(tag); // when query is different then update if (tag.to.fullPath !== this.$route.fullPath) { this.$store.dispatch(’tagsView/updateVisitedView’, this.$route); } break; } } } }); } public refreshSelectedTag(view: any) { this.$store.dispatch(’tagsView/delCachedView’, view).then(() => { const { fullPath } = view; this.$nextTick(() => { this.$router.replace({ path: ’/redirect’ + fullPath, }); }); }); } public closeSelectedTag(view: any) { this.$store.dispatch(’tagsView/delView’, view).then(({ visitedViews }) => { if (this.isActive(view)) { this.toLastView(visitedViews, view); } }); } public closeOthersTags() { this.$router.push(this.selectedTag); this.$store.dispatch(’tagsView/delOthersViews’, this.selectedTag).then(() => { this.moveToCurrentTag(); }); } public closeAllTags(view: any) { this.$store.dispatch(’tagsView/delAllViews’).then(({ visitedViews }) => { if (this.affixTags.some((tag) => tag.path === view.path)) { return; } this.toLastView(visitedViews, view); }); } public toLastView(visitedViews: any , view: any) { const latestView = visitedViews.slice(-1)[0]; if (latestView) { this.$router.push(latestView.fullPath); } else { // now the default is to redirect to the home page if there is no tags-view, // you can adjust it according to your needs. if (view.name === ’Dashboard’) { // to reload home page this.$router.replace({ path: ’/redirect’ + view.fullPath }); } else { this.$router.push(’/’); } } } public openMenu(tag: any , e: any) { const menuMinWidth = 105; const offsetLeft = this.$el.getBoundingClientRect().left; // container margin left const offsetWidth = this.$el.offsetWidth; // container width const maxLeft = offsetWidth - menuMinWidth; // left boundary const left = e.clientX - offsetLeft + 15 + 160; // 15: margin right if (left > maxLeft) { this.left = maxLeft; } else { this.left = left; } this.top = e.clientY; this.visible = true; this.selectedTag = tag; } public closeMenu() { this.visible = false; } public mounted() { this.initTags(); this.addTags(); // 添加當(dāng)前頁面tag }}</script><template> <div class='tags-view-container'> <scroll-pane ref='scrollPane' class='tags-view-wrapper'> <router-link v-for='(tag, index) in visitedViews' ref='tag' :key='tag.path' : :to='{ path: tag.path, query: tag.query, fullPath: tag.fullPath }' tag='span' @click.middle.native='!isAffix(tag)?closeSelectedTag(tag):’’' @contextmenu.prevent.native='openMenu(tag,$event)' > {{ tag.title }} <!-- <span v-if='!isAffix(tag)' @click.prevent.stop='closeSelectedTag(tag)' /> --> <span v-if='index!==visitedViews.length-1'></span> </router-link> </scroll-pane> <ul v-show='visible' : class='contextmenu'> <li @click='refreshSelectedTag(selectedTag)'>刷新</li> <li v-if='!isAffix(selectedTag)' @click='closeSelectedTag(selectedTag)'>關(guān)閉當(dāng)前標(biāo)簽</li> <li @click='closeOthersTags'>關(guān)閉其他標(biāo)簽</li> <li @click='closeAllTags(selectedTag)'>關(guān)閉所有</li> </ul> </div></template><style lang='less' scoped>.tags-view-container { height: 46px; width: 100%; background: #fff; .tags-view-wrapper { position: relative; .tags-view-item { display: inline-block; position: relative; cursor: pointer; height: 46px; line-height: 46px; // border: 1px solid #d8dce5; color: #495060; background: #fff; padding: 0 4px; font-size: 14px; .tab-border { display: inline-block; height: 10px; width: 1px; background: #f1f1f1; margin-left: 4px; } &:hover { border-bottom: 2px solid #666; } &.active { // background-color: #1F1A16; border-bottom: 2px solid #1F1A16; color: #333; // border-color: #1F1A16; // &::before { // content: ’’; // background: #fff; // display: inline-block; // width: 8px; // height: 8px; // border-radius: 50%; // position: relative; // margin-right: 2px; // } } } } .contextmenu { margin: 0; background: #fff; z-index: 3000; position: absolute; list-style-type: none; padding: 5px 0; border-radius: 4px; font-size: 12px; font-weight: 400; color: #333; box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, .3); li { margin: 0; padding: 7px 16px; cursor: pointer; &:hover { background: #eee; } } }}</style><style lang='less'>//reset element css of el-icon-close.tags-view-wrapper { .tags-view-item { .el-icon-close { width: 16px; height: 16px; vertical-align: 3px; border-radius: 50%; text-align: center; transition: all .3s cubic-bezier(.645, .045, .355, 1); transform-origin: 100% 50%; &:before { transform: scale(.6); display: inline-block; vertical-align: -3px; } &:hover { background-color: #b4bccc; color: #fff; } } } .el-scrollbar__bar{ pointer-events: none; opacity: 0; }}</style>

ScrollPane.vue

<script lang='ts'>/** * @author leo * @description #15638 【test_tabs 組件】tab組件 */import { Component, Vue, Prop, Watch, Mixins } from ’vue-property-decorator’;const tagAndTagSpacing = 4; // tagAndTagSpacing@Component({ components: { ScrollPane, },})export default class ScrollPane extends Vue { get scrollWrapper() { return (this.$refs.scrollContainer as any).$refs.wrap; } public left: number = 0; public handleScroll(e: any) { const eventDelta = e.wheelDelta || -e.deltaY * 40; const $scrollWrapper = this.scrollWrapper; $scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4; } public moveToTarget(currentTag: any) { const $container = (this.$refs.scrollContainer as any).$el; const $containerWidth = $container.offsetWidth; const $scrollWrapper = this.scrollWrapper; const tagList: any = this.$parent.$refs.tag; let firstTag = null; let lastTag = null; // find first tag and last tag if (tagList.length > 0) { firstTag = tagList[0]; lastTag = tagList[tagList.length - 1]; } if (firstTag === currentTag) { $scrollWrapper.scrollLeft = 0; } else if (lastTag === currentTag) { $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth; } else { // find preTag and nextTag const currentIndex = tagList.findIndex((item: any) => item === currentTag); const prevTag = tagList[currentIndex - 1]; const nextTag = tagList[currentIndex + 1]; // the tag’s offsetLeft after of nextTag const afterNextTagOffsetLeft = nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing; // the tag’s offsetLeft before of prevTag const beforePrevTagOffsetLeft = prevTag.$el.offsetLeft - tagAndTagSpacing; if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) { $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth; } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) { $scrollWrapper.scrollLeft = beforePrevTagOffsetLeft; } } }}</script><template> <el-scrollbar ref='scrollContainer' :vertical='false' @wheel.native.prevent='handleScroll'> <slot /> </el-scrollbar></template><style lang='less' scoped>.scroll-container { white-space: nowrap; position: relative; overflow: hidden; width: 100%; .el-scrollbar__bar { bottom: 0px; } .el-scrollbar__wrap { height: 49px; }}</style>

index.ts

import TheTagsView from ’./TheTagsView.vue’;export default TheTagsView;

這樣我們的組件就寫完啦,有哪里有問題的小伙伴可以留言哦。

組件調(diào)用

因?yàn)槭侨值模苑旁谌窒轮苯诱{(diào)用就好了

總結(jié)

這樣我們一個(gè)簡(jiǎn)單的能實(shí)現(xiàn)alive 頁面的tag功能就實(shí)現(xiàn)了。大家趕緊嘗試一下吧~

兄臺(tái),請(qǐng)留步。這里有幾點(diǎn)要注意一下哦~

問題1: 開發(fā)環(huán)境緩存住了,線上環(huán)境不好用了

我們是根據(jù)組件name值是否是include里包含的來判斷的。但是你會(huì)發(fā)現(xiàn)生產(chǎn)的的時(shí)候 class后面的名在線上被打包后變了。 什么?!這豈不是緩存不住了???是的。 所以解決辦法如圖。一般人我不告訴他0.o

實(shí)用的 vue tags 創(chuàng)建緩存導(dǎo)航的過程實(shí)現(xiàn)

問題2: tags的顯示名字我在哪定義呢

tags顯示的名字我怎么定義呢,好問題。小兄弟肯定沒有仔細(xì)讀代碼

ADD_VISITED_VIEW: (state: TagsState, view: Route) => { if (state.visitedViews.some((v: any) => v.path === view.path)) { return; } state.visitedViews.push( Object.assign({}, view, { title: view.meta.title || ’no-name’, /// 我在這里!!!!! }), ); },

由上圖我們可知,我是在路由的配置里mate標(biāo)簽里的tile里配置的。至于你,隨你哦~

{ path: ’index’, // 入口 name: ’common-home-index-index’, component: () => import(/* webpackChunkName: 'auth' */ ’@/views/home/index.vue’), meta: { title: ’首頁’, // 看見了么,我就是你要顯示的名字 name: ’CommonHome’, // 記住,我要跟你的上面name頁面組件名字一樣 },}

問題3:我有的頁面,跳路由后想刷新了怎么辦

那我們頁面緩存住了,我怎么讓頁面刷新呢,比如我新增頁面,新增完了需要關(guān)閉當(dāng)前頁面跳回列表頁面的,我們的思路就是,關(guān)閉標(biāo)簽,url參數(shù)添加refresh參數(shù)

this.$store .dispatch(’tagsView/delView’, this.$route) .then(({ visitedViews }) => { EventBus.$emit(’gotoOwnerDeliveryOrderIndex’, { refresh: true, }); });

然后在activated鉤子里判斷下是否有這個(gè)參數(shù),

this.$route.query.refresh && this.fetchData();

記得處理完結(jié)果后吧refresh刪了,不然每次進(jìn)來都刷新了,我們是在拉去數(shù)據(jù)的混合里刪的

if ( this.$route.query.refresh ) { this.$route.query.refresh = ’’;}

問題4:有沒有彩蛋啊

有的,請(qǐng)看圖。 實(shí)用的 vue tags 創(chuàng)建緩存導(dǎo)航的過程實(shí)現(xiàn) 我的哥乖乖,怎么實(shí)現(xiàn)的呢。這個(gè)留給你們研究吧。上面代碼已經(jīng)實(shí)現(xiàn)了。只不過你需要在加一個(gè)頁面,跟路由。其實(shí)就是跳轉(zhuǎn)到一個(gè)新空頁面路由。重新跳回來一下~

redirect/index.vue

<script lang='ts'>import { Component, Vue, Prop, Watch, Mixins } from ’vue-property-decorator’;@Componentexport default class Redirect extends Vue { public created() { const { params, query } = this.$route; const { path } = params; // debugger; this.$router.replace({ path: ’/’ + path, query }); }}</script><template></template>

/** * 刷新跳轉(zhuǎn)路由 */export const redirectRouter: any = { path: ’/redirect’, name: ’redirect’, component: RouterView, children: [ { path: ’/redirect/:path*’, component: () => import(/* webpackChunkName: 'redirect' */ ’@/views/redirect/index.vue’), meta: { title: ’title’, }, }, ],};

參考

https://github.com/PanJiaChen/vue-element-admin

到此這篇關(guān)于實(shí)用的 vue tags 創(chuàng)建緩存導(dǎo)航的過程的文章就介紹到這了,更多相關(guān)實(shí)用的 vue tags 創(chuàng)建緩存導(dǎo)航的過程內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 五月天婷婷激情视频 | 91九色porny首页最多播放 | 欧美激情伊人 | 成人国产精品一级毛片视频 | 亚洲视频免费网站 | 国产偷国产偷精品高清尤物 | 女同久久另类99精品国产 | 久久成人精品 | 91av免费| 中文字幕在线不卡 | 日韩欧美视频 | 亚洲第一黄色 | 国产日韩精品一区 | 国产成人精品免费 | 91在线精品秘密一区二区 | 久久免费视频在线 | 国产精品成人一区二区 | 日韩一区二区三区在线视频 | 欧美日韩精品 | 婷婷av网站| 91亚洲一区 | 91麻豆精品国产91久久久更新资源速度超快 | 最近中文字幕在线视频1 | 亚洲日本乱码在线观看 | 欧美成人a| 色约约精品免费看视频 | 亚洲乱码国产乱码精品精的特点 | 日韩欧美在线播放视频 | 天天爽夜夜春 | 成人a网 | 精品亚洲永久免费精品 | 欧美日韩国产一区二区三区不卡 | 国产精品成人3p一区二区三区 | 亚洲精品三级 | 成人av播放 | 精品香蕉一区二区三区 | 国产乱码精品一区二区三区忘忧草 | 一区二区三区久久 | www.xxx在线观看 | 国产一区在线视频 | 亚洲网站在线免费观看 | 亚洲欧美在线一区二区 | 久久久久久国产精品 | 国产精品久久久久久久午夜片 | 久久久久国产精品免费免费搜索 | 中文字幕一区二区在线观看 | 国产精品久久久久久久久久ktv | 精品久久影院 | 91国内精品久久 | 国产1区2区 | 久久精品一 | 婷婷色国产偷v国产偷v小说 | 中文字幕在线观看av | 欧美一区二区三区在线观看视频 | 九九久久久 | 97在线观看视频 | 亚洲色图综合 | 日韩视频在线免费观看 | 午夜精品久久久久久久久久久久久 | 国产午夜手机精彩视频 | 中文字幕国产区 | 精品免费国产视频 | 国产最新一区 | 日韩三级电影免费观看 | 国产毛片一区二区 | 欧美一级黄色片网站 | 日本午夜在线 | 国产精品无码专区在线观看 | 国产视频第一区 | 欧美久久精品一级c片 | 在线视频 欧美日韩 | 国产伦精品一区二区三区四区视频 | 欧美,日韩| 午夜免费影视 | 日韩欧美高清视频 | 日韩精品久久久 | 日本久久久一区二区三区 | 亚洲中字幕女 | 天天爽夜夜春 | 综合久久国产九一剧情麻豆 | 97在线超碰 | 日本三级不卡 | 亚洲欧美高清 | 黄色短视频在线观看 | 午夜在线影院 | 羞羞视频免费观看网站 | 亚洲高清久久 | 欧美日韩视频在线播放 | 伊人草 | 国产成人看片 | 色猫猫国产区一区二在线视频 | 在线观看国产wwwa级羞羞视频 | 日韩在线不卡视频 | 久久高清精品 | 精品中文一区 | 色噜噜视频 | 激情com | 天天草天天干天天 | 欧美日韩啪啪 | 日韩和的一区二区 | 91久久极品| 狠狠天天 | 国产日韩高清在线 | 亚洲精品美女视频 | 国产精品丝袜视频 | 久久久久国产一区二区三区 | 成人欧美一区二区三区在线播放 | 欧美一区二区三区精品 | 97精品久久 | 亚洲国产精品一区二区久久 | 天天干夜夜操 | 97国产精品 | 日本一区二区精品 | 久草福利在线视频 | 亚洲色图第八页 | 国产视频自拍一区 | 午夜男人网 | 蜜桃视频一区二区三区 | 中文字幕1区 | 午夜视频免费 | 国产亚洲一区二区在线 | 成人深夜免费视频 | 精品亚洲一区二区 | 久久成人一区二区 | 亚洲一区久久 | 国产精品亚洲综合 | 欧美激情一区二区三区在线观看 | 欧美色综合天天久久综合精品 | 亚洲成人日本 | 日韩av在线免费电影 | 中文字幕久久综合 | 亚洲在线视频 | 91精品久久久久久久久久久 | 国产高清视频一区 | 国产精品一区二 | 亚洲国产成人在线 | 久久国产精品久久久久久 | 亚洲永久免费 | 中文一区 | 亚洲经典视频在线观看 | 欧美成人精品一区二区男人看 | 青草青草久热精品视频在线观看 | 日韩中文视频 | 国产精品久久久久一区二区三区 | 亚洲精品免费观看 | 日韩高清成人 | 日韩在线视频免费 | 欧美日韩国产精品 | 成人av免费在线 | 午夜精品成人一区二区 | 黄网免费看 | 久久免费精品 | 看a网址 | 一区二区三区日韩 | 一区二区三区久久久久久 | 日韩一区二区在线观看视频 | 中文字幕精品一区久久久久 | h亚洲视频 | 成人片网址 | 国产综合99 | 国产女爽123视频.cno | 国产成人网| 国产一区二区三区四 | 精品成人在线视频 | 日日精品 | 亚洲一区二区在线 | 手机看片1 | 日本精品网站 | 精品久久久久国产免费 | 亚洲一本 | 欧美亚洲视频在线观看 | 日韩亚洲视频在线观看 | 亚洲精品www久久久久久广东 | 久久精品 | 97超碰免费| 精品国精品国产自在久不卡 | 天天曰天天干 | 色综合久久伊人 | 一区二区三区欧美在线 | 中文字幕视频在线免费 | 日韩国产一区二区 | h视频在线免费观看 | 亚洲精品一区二区三区蜜桃久 | 欧美极品欧美精品欧美视频 | 依人99| 美女视频黄的免费 | 国产xxxxxxxxxx| www欧美 | 巨大黑人极品videos精品 | 日韩91 | 欧美精品自拍 | 日韩精品av一区二区三区 | 精品亚洲成人 | 国产区第一页 | 亚洲激情一区 | 97国产精品 | 欧美另类一区二区 | 综合亚洲精品 | 亚洲在线观看免费视频 | 精品久久久久久久 | 亚洲精品一区二区 | 成人深夜小视频 | 黄毛片视频| 久久草视频 | 亚洲精品久久久久久国产精华液 | 中文字幕精品一区久久久久 | jlzzjlzz国产精品久久 | 国产片侵犯亲女视频播放 | 成人一区二区在线观看 | 亚洲青涩在线 | 狠狠操综合网 | 91免费看| 国产精品成人一区二区三区夜夜夜 | 亚洲第一中文字幕 | av免费黄色| 精品第一页 | 国产精品久久久久久久久免费桃花 | 91久久精品国产 | 久久噜| 波多野结衣 一区二区 | 精品国产乱码久久久久久影片 | 天天插天天操天天干 | 亚洲高清www | 国产精品女教师av久久 | 亚洲精品乱码久久久久久国产主播 | 国产成人自拍一区 | 久色 | 国产成人免费 | 欧美一级免费 | 国产欧美精品 | 亚洲黄页| 91精品国产91久久综合桃花 | 久久久久国产一级毛片高清版小说 | 国产片av | 欧美视频免费看 | 色爽av | 看毛片的网站 | 欧美午夜在线观看 | 欧美另类专区 | 不卡一区 | 国产精品久久久久影院色老大 | 久久成人国产视频 | 伊人影视| 午夜社区 | 国产精品一二区 | 欧美精品一区二区三区四区 | 狠狠干狠狠干 | 99精品欧美一区二区三区 | 国产干干干 | 一区自拍 | 亚洲精品美女在线观看 | 中文字幕在线第一页 | 精品视频久久久 | 狠狠操夜夜操天天操 | 狠狠躁夜夜躁人人爽天天高潮 | 色www精品视频在线观看 | 日韩一区二区三区在线 | 狠狠操狠狠操 | 亚洲二区在线播放 | 亚洲精久| 国产一二三在线 | 午夜影院黄色 | 9久9久 | 亚洲一区中文字幕 | 久久久国产视频 | 在线国产专区 | 黄色大片网站在线观看 | 亚洲欧美综合精品久久成人 | 久久久一二三 | 伊人最新网址 | 日韩欧美h| 国产一区二区精品在线观看 | 日日摸天天爽天天爽视频 | 欧美日韩亚洲一区 | 日韩中文在线观看 | 精品久久久一 | 日韩高清在线 | a在线观看| 成人欧美一区二区三区白人 | www.精品| 久久久久久亚洲精品 | 久草免费在线视频 | 久久亚洲视频 | 国产精品自拍视频 | 91一区二区 | www日批 | 亚洲国产高清高潮精品美女 | 亚洲精品乱码久久久久膏 | 亚洲一区中文字幕在线观看 | 国产精品一区av | 精品一区二区三区久久久 | 可以免费看的av | 亚洲美女久久 | 可以免费看黄视频的网站 | 91精品在线播放 | 最新精品在线 | 国厂毛片 | 亚洲久久| 91久久久久久久久久久久久久久久 | 蜜桃视频在线观看www社区 | 性色av一区二区三区免费看开蚌 | 国产馆一区二区 | 黄色电影在线免费观看 | 欧美日韩在线播放 | 日本中文字幕一区 | 精品国产一区二区三区小蝌蚪 | 成年人在线观看视频 | 欧美日韩国产一区二区三区不卡 | 国产目拍亚洲精品99久久精品 | 亚洲成人中文字幕 | 国精产品一区二区三区黑人免费看 | 亚洲免费网站 | 在线干| 欧美日韩精品免费观看视频 | 99视频精品 | 成人免费观看视频 | 毛片福利 | 欧美一级毛片免费观看 | 色www精品视频在线观看 | 国内成人免费视频 | 国产高清不卡 | 欧美成人精品一区二区三区 | 日日摸日日碰夜夜爽不卡dvd | 日本亚洲欧美 | 色精品| 午夜久久久 | 久草视频在线播放 | 国产91在线观看 | 夜夜草天天干 | 欧美国产综合一区 | 美女视频一区二区三区 | 日韩免费视频 | www.99精品| 日韩精品99| 欧美a网站 | 九九在线视频 | 国产精品视频免费观看 | 欧美另类亚洲 | 天天天操 | 农村妇女毛片精品久久久 | 欧美一区二区三 | 日本免费在线 | 午夜黄色影院 | 亚洲视频一区二区三区 | 热re99久久精品国99热线看 | 四虎视频 | 亚洲久久久久久 | 亚洲成人av一区二区三区 | 黄色一级网址 | 久久免费精品 | 久久精品国产亚洲一区二区三区 | 欧美视频网站 | 一区二区在线视频 | 国产激情精品一区二区三区 | 欧美亚洲视频在线观看 | 亚洲久久| 国产美女在线播放 | 亚洲精品视频一区 | 久久一区二区精品 | 黄色毛片视频网站 | 国产精品欧美久久久久一区二区 | 精品久久久久国产 | 国产欧美日韩 | 91精品国产综合久久久久久丝袜 | 伊人狠狠干 | 精品无码三级在线观看视频 | 色婷婷久久久swag精品 | 色久在线 | 日韩国产欧美一区 | 国产高清在线 | 久久久久av| 亚洲一区二区中文字幕在线观看 | 精品www| 成视频年人免费看黄网站 | 久久一区二区精品 | 自拍偷拍专区 | 国产精品久久久久久久久久久久午夜片 | 成人av一区二区三区 | 亚洲精品免费在线 | 在线精品国产 | 天天操天天干天天爽 | 综合久久网 | 日韩性在线 | 在线观看黄免费 | 荡女妇边被c边呻吟视频 | 91亚洲免费 | 四虎884a | 国产精品高潮呻吟久久av黑人 | 成人亚洲精品久久久久软件 | 国产视频一二三区 | 国产精品久久久久久亚洲调教 | 天天干视频 | 天天干天天草 | 日日干日日操 | 午夜视频黄 | 天天摸天天干 | 国产一区久久久 | 久久久久久久久国产精品 | 亚洲欧美第一页 | 久久久久久久久国产 | 男女羞羞视频免费在线观看 | 国产91看片| 人人操日日干 | 欧美精品v国产精品v日韩精品 | 国产老女人精品毛片久久 | 国产高清在线精品 | 天天操免费 | 中文字幕66页 | 玖玖久久| 黄色片免费观看 | 激情五月综合网 | 97国产一区二区精品久久呦 | 久久这里只有精品首页 | 国产精品久久久久久久久久久小说 | 久久久精品久久久久 | 国产成人激情 | 欧美日韩国产在线播放 | 男人久久天堂 | 久久精品无码一区二区日韩av | 成年入口无限观看网站 | 国产欧精精久久久久久久 | 久久精品二区亚洲w码 | 欧美日一区二区 | 91资源在线 | 国产日韩视频在线观看 | 成人福利视频 | 日日操夜夜操免费视频 | 久久免费国产 | 欧洲精品在线视频 | 久久综合伊人77777 | 不卡视频一区二区三区 | 特级丰满少妇一级aaaa爱毛片 | 中文一二区 | 国户精品久久久久久久久久久不卡 | 国产成人看片 | 亚洲日韩欧美一区二区在线 | 亚洲网站在线免费观看 | 国产成人精品免费视频大全 | 亚洲精品国产成人 | 欧美精品免费在线观看 | 国产精品久久久久久久毛片 | 亚洲一区二区三区四区在线 | 精品欧美一区二区在线观看视频 | 久草电影网 | 欧美一二三四成人免费视频 | 久久精品国产精品亚洲 | 久久99精品国产麻豆婷婷洗澡 | 久久免费国产 | 黄色a视频 | 免费一区 | 在线欧美视频 | 中国特级毛片 | 国产一区二区精品久久岳 | 午夜欧美一区二区三区在线播放 | 99亚洲国产 | 日本久久久久 | 久久综合九九 | 亚洲国产精品99久久久久久久久 | 精品日韩在线 | 亚洲午夜剧场 | 欧洲另类交 | 欧美激情 在线 | 午夜免费视频 | 免费99精品国产自在在线 | 欧美成a| 最新一级毛片 | 久久久精 | 国产激情一区二区三区 | 日韩在线免费 | 欧美成人精品一区二区男人看 | 久久精品无码一区二区日韩av | 久久国产日韩 | 久久国产一| 青青操av在线 | 亚洲精品久久久久久久久久久久久 | 欧美高清视频一区二区三区 | 你懂的免费在线观看 | 欧美三级免费观看 | 国产精品久久久久久久久免费桃花 | 久久国产精品一区二区三区 | 亚洲精品一二三区 | 巨大黑人极品videos精品 | 精品国产91 | 欧美一级在线免费观看 | 激情五月综合 | 亚洲精品字幕 | 久久手机视频 | 欧美精品久久久久久久久久丰满 | 激情图区在线观看 | 日韩精品第一页 | 久久这里精品 | 91xxx在线观看| 超碰高清 | 日韩三级电影免费观看 | 午夜在线观看影院 | 中文字幕在线观看不卡视频 | 毛片毛片毛片毛片毛片毛片 | 亚洲欧美中文日韩在线v日本 | 欧美日韩精品久久久 | 久久777| 另类亚洲专区 | 欧美成人精品一区二区 | 国产成人片 | 日本成人中文字幕 | 99精品久久精品一区二区爱城 | 男人天堂av网站 | 成人亚洲一区二区 | 99在线观看 | 操操操操操操操操操操操操操操 | 中文字幕一区在线观看视频 | 国产视频第一页 | 国产精品毛片一区二区在线看 | av免费网站在线观看 | 中文字幕乱码亚洲精品一区 | 91超碰caoporm国产香蕉 | 91午夜视频 | 一级欧美日韩 | 99看片| 亚洲一区二区三区四区五区中文 | 中文字幕视频在线免费 | 国产精品一区二区三区四区 | 亚洲一区中文字幕 | 欧美精三区欧美精三区 | ririsao亚洲国产中文 | 亚洲精品国产高清 | 国产成人啪精品午夜在线观看 | 国产精品美女久久久久aⅴ国产馆 | 成人福利 | 国产精品亚洲成人 | 国产极品探花 | 久久久国产一区二区三区四区小说 | 欧美日韩在线视频免费 | 婷婷色国产偷v国产偷v小说 | 国产精品禁久久精品 | 成人福利视频网 | 日韩欧美在线播放 | 日韩成人一区 | 亚洲最大免费视频 | 日本一区二区精品 | 成人欧美一区二区三区视频xxx | www.久久精品视频 | 91精品国产91久久久久久蜜臀 | 国产精品亚欧美一区二区 | 国产一区二区三区精品久久久 | 国产美女www| 成人在线播放网站 | 亚洲精选免费视频 | www.99热这里只有精品 | 亚洲看片| 中文字幕一区二区三区乱码图片 | 久久男人的天堂 | 99re6在线 | 久操不卡| 中文字幕 在线观看 | 亚洲美女视频在线观看 | 国产一区二区三区久久久久久久久 | 日日操天天操 | 精品久久久久久亚洲精品 | 热久久久久| 久热中文在线 | 日韩一区二区在线播放 | 国产亚洲精品美女久久久久久久久久 | 国产精品视频在线观看 | 午夜精品影院 | 亚洲免费成人 | 日韩视频在线观看一区二区 | 在线视频 亚洲 | 国产免费一区二区三区网站免费 | 伊人春色成人 | 四虎最新入口 | 亚洲 欧美 另类 综合 偷拍 | 在线免费视频成人 | 91免费看网站 | 日韩在线免费 | 在线免费91| 国产一区二区三区免费 | 日韩欧美一区二区三区久久婷婷 | 欧美成人影院在线 | 一级免费片 | 国产精品日本一区二区不卡视频 | 午夜精品一区 | 在线观看日韩 | 精品视频在线视频 | 亚洲国产精品网站 | 91精品久久久久久久久久 | 欧美亚洲综合久久 | 亚洲欧美网站 | 欧美精品激情 | 日韩在线观看高清 | 久久成人免费视频 | 一级黄色毛片a | 狠狠色综合色综合网络 | 日本aⅴ毛片成人实战推荐 成人免毛片 | 久久九| 免费人成电影 | 中文字幕亚洲一区二区三区 | 成年人在线看片 | 久久久精品国产 | 特大毛片| 欧美精品一区二区三区蜜桃视频 | 欧美一级黄色影院 | 久草视频在线播放 | 天天摸夜夜摸爽爽狠狠婷婷97 | 中文字幕一区二区在线观看 | 日韩欧美在线视频 | 丁香亚洲 | 国产精品一区二区三区四区 | 大胆裸体gogo毛片免费看 | 国产精品一区三区 | 国产一区二区三区视频在线观看 | 日韩视频在线观看中文字幕 | 三区免费视频 | 91麻豆产精品久久久久久 | 毛片免费看 | 色婷婷导航 |