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

Vue 開發(fā)過程的探索與實踐

開發(fā) 開發(fā)工具
本文主要講了實際業(yè)務在結合 vue 開發(fā)的過程中的探索與實踐。

[[202859]]

本文主要講了實際業(yè)務在結合 vue 開發(fā)的過程中的探索與實踐。

業(yè)務介紹

基于目標用戶的孩子畫像,打通、聚合京東現有體系關聯資源,建立共生關系的開放式生態(tài)平臺,涵蓋滿足家庭陪伴孩子成長過程中的多維度需求。覆蓋場景場景導購、精準推薦、專屬權益等,為京東有孩家庭購物提供優(yōu)質優(yōu)購體驗。在項目開發(fā)中我們遇到的問題主要有以下三個:

  • 接口眾多:近90個數據接口,數據字段不規(guī)范、不統(tǒng)一、難理解,接口開發(fā)經常延期且頻繁變更;
  • 交互復雜:各種交互及狀態(tài),且一態(tài)多用,給用戶展示的是多狀態(tài)共同作用的結果,用戶操作異步更新頁面;
  • 快速上線:同時規(guī)劃多版本,多版本并行開發(fā)。

技術選型

技術選型要對癥下藥,為了統(tǒng)一管理接口和數據,所采用的框架要有統(tǒng)一的數據中心,能做到視圖與邏輯的分離,用數據來驅動視圖,項目可以工程化來應對快速上線,以及利于后期維護。從學習成本來說,Vue 更容易上手,更輕量,結合 Vuex 管理狀態(tài),視圖邏輯和數據的耦合度低,項目結構清晰明了,Vue 的可擴展性也非常好。Vue 核心技術主要有以下幾點:

  • 聲明式渲染:通過簡潔的模板語法來聲明式地將數據渲染進 DOM,DOM 狀態(tài)是數據狀態(tài)的一個映射。
  • 組件系統(tǒng):跟大多數前端框架一樣,都是把 UI 結構拆解成小的、可復用的組件樹,然后像零件一樣組裝它們,Vue 還有比較獨特的地方,那就是單文件組件,把歸屬于同一組件的模板、腳本、樣式放在一個文件中,你不必再同時維護一個組件的多個文件,這樣是不是很酷。
  • 客戶端路由:結合 vue-router,Vue 就可以實現一個 SPA 應用了,主要通過 hash 值來控制路由,路由又可以傳遞狀態(tài)參數給組件。
  • 狀態(tài)管理:Vue 的基本狀態(tài)觸發(fā)過程是,用戶行為使得 state 發(fā)生變化,state 的變化又觸發(fā)視圖的更新。而結合 Vuex 則可以管理全局的數據。

項目詳解

項目結構

項目開發(fā)

下面將分為以下幾方面來闡述:開發(fā)輔助、路由、組件化、mixins、常量管理、數據中心、環(huán)境兼容、滾動行為。

開發(fā)依賴

項目采用 Webpack,并結合了 ESLint 和 Babel 等來進行開發(fā)和編譯打包,Webpack 的基本配置不詳講,在基本配置的基礎上,再分了開發(fā)環(huán)境的生產環(huán)境的配置:

  1. // Dev 的配置 
  2. module.exports = merge(base, { 
  3.   plugins: [ 
  4.     new webpack.HotModuleReplacementPlugin(), 
  5.     new webpack.NoErrorsPlugin(), 
  6.     new webpack.DefinePlugin({ 
  7.       'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'
  8.     }), 
  9.     new HtmlWebpackPlugin({ 
  10.       filename: 'index.html'
  11.       template: '../index.html' 
  12.     }) 
  13.   ] 
  14. }) 
  15. // Prod 的配置 
  16. module.exports = merge.smart(base, { 
  17.   module: { 
  18.     loaders: [ 
  19.       { 
  20.         test: /\.s[a|c]ss$/, 
  21.         loader: ExtractTextPlugin.extract({ 
  22.           fallbackLoader: "style-loader"
  23.           loader: 'css!sass' 
  24.         }) 
  25.       } 
  26.     ] 
  27.   }, 
  28.   plugins: [ 
  29.     new ExtractTextPlugin('style.css'), 
  30.     new webpack.DefinePlugin({ 
  31.       'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'production'
  32.     }), 
  33.     new webpack.optimize.CommonsChunkPlugin({ 
  34.       name'vendor'
  35.       filename: 'vendor.js' 
  36.     }), 
  37.     new webpack.LoaderOptionsPlugin(loadersConf), 
  38.     new webpack.optimize.UglifyJsPlugin({ 
  39.       compress: { 
  40.         warnings: false 
  41.       } 
  42.     }) 
  43.   ] 
  44. }) 

開發(fā)環(huán)境中,用 express 和 webpack-dev-middleware 來搭建一個 dev server:

  1. const express = require('express'
  2. const webpackDevMiddleware = require('webpack-dev-middleware'
  3. const webpack = require('webpack'
  4. const conf = require('./webpack.dev.conf'
  5. const app = express() 
  6. const port  = process.env.PORT || 8080 
  7. conf.entry.app = ['webpack-hot-middleware/client', conf.entry.app] 
  8. const compiler = webpack(conf) 
  9. app.use(webpackDevMiddleware(compiler, { 
  10.   publicPath: conf.output.publicPath, 
  11.   stats: { 
  12.     colors: true
  13.     chunks: false 
  14.   } 
  15. })) 
  16. app.use(require('webpack-hot-middleware')(compiler)) 
  17. app.listen(port, () => { 
  18.   console.log(`server started at localhost:${port}`) 
  19. }) 

路由

一個路由子項如下:

  1.   name'index', path: '/index'
  2.   meta: {title: '陪伴空間', pv: 50, profiles: true, visitor: true, verify () { return true }}, 
  3.   components: {default: Index2, navbar: Navbar} 

其中,配置里的 meta 包含了該頁面(視圖)的配置信息:

  • title:頁面的標題
  • pv:用作記錄頁面的 PV
  • profiles:用于判斷是否需要有孩子才能進入這個頁面
  • visitor: 是否支持游客訪問
  • verify:如果支持游客訪問,可選的額外的放行校驗

問題:在 ios 里,單頁面應用切換視圖時頁面標題不能更新

解決:切換路由時用 iframe 加載一個空頁面即可觸發(fā) title 更新,如下所示

  1. const iframeLoad = (src) => { 
  2.   let iframe = document.createElement('iframe'
  3.   iframe.style.display = 'none' 
  4.   iframe.src = src 
  5.   document.body.appendChild(iframe) 
  6.   iframe.addEventListener('load'function() { 
  7.     setTimeout(function() { 
  8.       iframe.remove() 
  9.     }, 0) 
  10.   }) 

路由中還要處理比較多的事情,在 router.beforeEach 中處理傳進頁面的參數,請求登陸狀態(tài)和檔案數據等基本接口,上報 PV,在 router.afterEach 中處理比較次要的事情。

組件化

接下來講的是項目中的單文件組件。下面是一段特別編輯過的單文件組件代碼:

  1. <template> 
  2. <div v-show="isShow" class="test"
  3.   <!-- slot 的運用 --> 
  4.   <slot></slot> 
  5.   <slot name="slot2"></slot> 
  6.   <template v-if="testProp"></template> 
  7.   <template v-else></template> 
  8.   <!-- 對于嵌套較深的組件,可以用 function-type-prop 來代替 emit 觸發(fā)鏈 --> 
  9.   <div @click="changeNickname && changeNickname('小鎮(zhèn)')"></div> 
  10.   <div @click="close" class="test_btn">{{btnText}}</div> 
  11. </div> 
  12. </template> 
  13. <script> 
  14. import Utils from '@/utils' 
  15. export default { 
  16.   props: { 
  17.     testProp: { 
  18.       type: [Number, String], 
  19.       required: true 
  20.     }, 
  21.     changeNickname: Function 
  22.   }, 
  23.   data () { 
  24.     return { 
  25.       isShow: false
  26.       btnText: ''
  27.       closeFn: null 
  28.     } 
  29.   }, 
  30.   methods: { 
  31.     close () { 
  32.       this.isShow = false 
  33.       this.closeFn && this.closeFn() 
  34.     }, 
  35.     // 除了 poops 傳參,函數傳參也是一種方式 
  36.     open (btnText = '', closeFn) { 
  37.       this.isShow = true 
  38.       this.btnText = btnText 
  39.       this.closeFn = closeFn 
  40.     } 
  41.   } 
  42. </script> 
  43. <style lang="sass"
  44. @import "common"
  45. .test { 
  46.   background-image: url(~@img/test/bg.png); 
  47. </style> 

slot 對于可復用組件來說意義重大,因為我們在實際的應用中,組件往往大同小異,看起來可以做成組件的模塊總會或多或少差異的地方,通過參數來控制這些差異也是可行的,但非常不利于組件的擴展,所以這些地方就交給 slot 來應對,slot 的意思是插槽,意指我們能在父組件中需要的時候,給組件填充自定義內容。

父組件通過 props 給子組件傳值,或者,父組件還可以通過子組件實例的方法來給子組件傳參(如代碼中的 open 方法)。

子組件可以通過 emit 觸發(fā)事件來向上通信,或者,通過直接調用作為 prop 傳進來的父組件方法也可以實現向上通信(如代碼中的 changeNickname)。

mixins

通常來說,不建議使用全局的 mixin,但總會有特殊需要,比如在本項目中,由于埋點和其他需要,幾乎每個組件都要用到幾個公用的全局數據,所以放到全局的 mixin 是***不過的了 Vue.mixin(mixins)。使用全局的 mixin 要注意的是,不要把邏輯放到 mixin 里,因為每個組件都會執(zhí)行一遍 mixin 的內容,組件一多就非常可怕了。

常量管理

為了以后能更好地維護代碼,需要對常量作歸集管理,這里的常量主要是鏈接和數據的字段等。

  1. // 鏈接常量的統(tǒng)一管理 
  2. export const REBUY_LIST = `${NIGHT}/re_purchase_detail` 
  3. export const REBUY_SWITCH = `${NIGHT}/re_purchase_switch_good` 
  4. export const REBUY_REMIND = `${NIGHT}/re_purchase_remind` 
  5. // ... 
  1. // 數據字段的統(tǒng)一管理 
  2. export const ID = 'id' 
  3. export const SKU = 'sku' 
  4. export const LINK = 'link' 
  5. export const NAME = 'name' 
  6. export const IMAGE = 'image' 
  7. export const JD_PRICE = 'jdPrice' 
  8. export const PRICE = 'price' 
  9. // ... 

統(tǒng)一的常量管理也有利于規(guī)范統(tǒng)一,比如數據字段,接口給到的數據可能有字段不統(tǒng)一,或者不表意,或者臟數據多等問題,這就需要在獲取到后端數據后對其進行“修剪”,規(guī)范的統(tǒng)一的字段名也有利于組件化。

數據中心

項目用了 vuex 來統(tǒng)一管理數據,在 view 組件中通過 vuex 提供的 mapActions 和 mapGetters 來求取數據,如下代碼所示。

  1. computed: { 
  2.   ...mapGetters({ 
  3.     cate1st: 'cate1st'
  4.     cate2nd: 'cate2nd' 
  5.   }) 
  6. }, 
  7. methods: { 
  8.   ...mapActions([ 
  9.     'getCate1st'
  10.     'getCate2nd' 
  11.   ]) 

而在“數據中心”中,getters 從 state 中取值,調用 action 請求后端接口,主動觸發(fā) mutation,在 mutation 里進行數據的“修剪”,得到我們真正想要的數據。大致過程如下圖所示:

環(huán)境兼容

項目需要兼容多環(huán)境,包括購物車相關、商詳頁鏈接、優(yōu)惠券鏈接、搜索鏈接等因環(huán)境不同而不同的方法,為此得針對不同環(huán)境分別定義它們,再根據 ua 進行選擇:

  1. // ... 
  2. let configs = { 
  3.   [uaTypes.APP]: App, 
  4.   [uaTypes.WECHAT]: Wechat, 
  5.   [uaTypes.QQ]: QQ, 
  6.   [uaTypes.MOBILE]: Mobile 
  7. export default configs[UA.type] 

滾動行為

對于 SPA 應用來說滾動行為是個挺頭疼的問題,畢竟其本質只是一個頁面,又是異步渲染的,所以難以保證各個視圖的滾動行為能像多頁面應用一樣。為此進行了以下幾步的探索。

  • 結合 vuex 來存儲滾動

在 view 的 beforeDestory 時,主動記錄該視圖的滾動值,在下次 mounted 時延時滾動到該位置。

這個方案需要為每個需要記錄滾動的視圖添加 state、mutation 和 action,并在視圖添加額外的代碼,實際操作繁瑣,且跳外部鏈接后再返回時所記錄的值也已經被銷毀。

  • 使用瀏覽器存儲

為了解決跳外部鏈接后返回也能定位滾動位置,使用 localStorage 來記錄滾動值,而且使用了 mixin,這樣有需要操縱滾動行為的視圖插入這個 mixin 就可以了,不需要在視圖里加額外代碼。

但是問題來了,我們并不能區(qū)分當次訪問是***次打開還是剛從外鏈返回,就導致了***次訪問也會被定位,就想到了 cookie,讓 cookie 保持 30min。顯然,這不是好的解決方案,再考慮到的是 sessionStorage,在當前會話中它能一直保持數據,跳外鏈返回后數據也還能保持著(此前以為跳外鏈后 sessionStorage 的數據也會被清除),新標簽打開視為新會話,互不共用數據,這幾點特性正好符合我們的要求。

另外要考慮的一個問題是,頁面是異步渲染的,我們并不知道它的接口什么時候都請求完了,于是除了有默認的延時滾動外,還添加了主動觸發(fā)滾動的特性,讓開發(fā)者考慮什么時候頁面才算加載完(通常是 watch 某個或多個異步請求的狀態(tài)),然后主動去調用滾動方法。

***要指出的是,滾動行為的解決方案也并不是***的,比如,這個方案并不適用于有模塊懶加載的頁面。

最終 mixin 代碼如下:

  1. /** 
  2.  * 如需手動觸發(fā)滾動: 
  3.  * manualTriggerLivescroll: true 
  4.  * this._livescroll() 
  5.  */ 
  6. import Tools from '@/utils/tools' 
  7. const ss = window.sessionStorage 
  8. export default { 
  9.   data () { 
  10.     return { 
  11.       routeName: this.$route.name
  12.       liveScrollFlag: false
  13.       liveScrollFn: null
  14.       liveScrollTimer: null 
  15.     } 
  16.   }, 
  17.   computed: { 
  18.     liveScrollTop () { 
  19.       return ss ?  
  20.         ss.getItem(`view-${this.routeName}`) :  
  21.         Tools.getCookie(`view-${this.routeName}`) 
  22.     } 
  23.   }, 
  24.   methods: { 
  25.     _livescroll () { 
  26.       if (this.liveScrollFlag || !this.liveScrollTop) { 
  27.         return 
  28.       } 
  29.       this.liveScrollFlag = true 
  30.       // $nextTick 發(fā)揮不太穩(wěn)定 
  31.       this.liveScrollTimer = window.setTimeout(() => { 
  32.         document.body.scrollTop = document.documentElement.scrollTop = this.liveScrollTop 
  33.       }, 500) 
  34.     } 
  35.   }, 
  36.   mounted () { 
  37.     document.body.scrollTop = document.documentElement.scrollTop = 0 
  38.     !this.manualTriggerLivescroll && this._livescroll() 
  39.     this.liveScrollFn = () => { 
  40.       ss ?  
  41.         ss.setItem(`view-${this.routeName}`, this.getScrollTop()) :  
  42.         Tools.setCookie(`view-${this.routeName}`, this.getScrollTop(), 0.2083) 
  43.     } 
  44.     window.addEventListener('touchend', this.liveScrollFn, false
  45.   }, 
  46.   beforeDestroy () { 
  47.     window.removeEventListener('touchend', this.liveScrollFn, false
  48.     this.liveScrollTimer && window.clearTimeout(this.liveScrollTimer) 
  49.   } 

其他

以下都是些瑣碎的小問題,也有在項目開發(fā)過程踩過的坑。

  • 接口延遲

為了盡量減少請求到的數據為空出的情況,基于 vue 的請求方法上包了一層,對于超時的接口重新發(fā)起一次請求。

  • 支持 rest spread

給 babel 加 "plugins": ["transform-object-rest-spread"] 以支持 rest spread 的寫法,或者直接用 babel-preset-env,同時 eslint 的配置加上 "parserOptions": { "ecmaFeatures": { "experimentalObjectRestSpread": true } }

  • 如何切換 Webpack 的 publicPath 在開發(fā)環(huán)境和生產環(huán)境的配置

一開始是手動去更改,后來根據當前環(huán)境自動去選擇

  1. const publicPath = { 
  2.   development: '/'
  3.   labs: 'http://xx.xxx.xx/mtd/h5/accompany/3.0.0-alpha/'
  4.   production: '//xx.xxx.xx/mtd/h5/accompany/3.2.2/' 
  5. }[env] 
  • 別名在 mixin 資源路徑的應用

由于頁面的路徑跟 includePath 的路徑不一樣,比如有個 @mixin iconAddcart { background: url(../addcart.png); },在組件樣式里 include 它時會提示找不到圖片,這時如果改成帶別名的路徑 ~@img/addcart.png 就能很好解決這個問題。

  • CSS Masking 的運用

可以參考 leeenx 的 CSS3 Mask 安利報告,在本項目中較大范圍地使用了 mask,主要的好處就是:縮減背景圖的大小,自定義遮罩,適應同形狀多背景色的情況。

需要注意的是,如果還要用 drop-shadow 的話,就得在外面再套一層來加 drop-shadow。

以上就是本文的全部內容。

原文鏈接:https://aotu.io/notes/2017/07/17/The-Exploration-and-Practice-of-Vue/

作者:右小鎮(zhèn)

【本文是51CTO專欄作者“凹凸實驗室”的原創(chuàng)稿件,轉載請通過51CTO聯系原作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2023-12-13 13:15:13

平臺開發(fā)實踐

2024-12-05 12:01:09

2010-02-22 17:20:45

Python開發(fā)

2009-06-17 14:33:08

java項目開發(fā)

2011-10-17 09:31:39

maven

2021-04-23 09:00:00

開發(fā)安全編碼

2010-03-04 09:54:24

Android開發(fā)

2020-10-12 10:41:15

Linux 代碼 開發(fā)

2010-07-21 14:42:15

Windows Pho

2013-07-18 13:44:13

2011-06-15 15:29:25

Qt C++

2022-08-21 21:28:32

數據庫實踐

2010-06-11 13:45:30

UML建模

2016-12-30 11:10:32

Hadoop開發(fā)JVM

2024-05-29 08:39:19

2021-11-02 15:07:22

Web前端開發(fā)

2022-07-31 19:59:42

文檔管理工具互聯網

2023-06-30 13:10:54

數據聚合網關

2023-01-05 07:54:49

vivo故障定位

2012-02-28 14:48:41

點贊
收藏

51CTO技術棧公眾號

欧美怡红院视频一区二区三区| 富二代精品短视频| 成人资源视频网站免费| 日本一区二区不卡在线| 九九精品在线| 日韩一区二区电影在线| 成人在线观看黄| 动漫一区在线| 久久久久久久久久看片| 91免费国产网站| 性无码专区无码| 在线国产一区二区| 国产一区二区三区毛片| 国产精品手机在线观看| 亚洲人成777| 粉嫩av一区二区三区免费野| 免费久久久久久| 午夜成人免费影院| 国产精品一区二区在线播放| 国产精品吹潮在线观看| 亚洲一区欧美在线| 欧美伊人影院| 日韩一区二区av| 中文字幕在线看高清电影| 秋霞午夜一区二区三区视频| 欧美艳星brazzers| 日韩在线一级片| 高清电影在线免费观看| 亚洲欧美自拍偷拍色图| 日本a级片久久久| 婷婷在线观看视频| 国产高清无密码一区二区三区| 国产精品爽爽爽| 男人日女人网站| 在线播放日韩| 欧美激情xxxx性bbbb| 国产激情无码一区二区三区| 欧美日韩国产一区二区三区不卡 | 六月婷婷在线视频| av大大超碰在线| 国产精品福利av| 日韩国产高清一区| 国产精品99999| 久久亚洲精精品中文字幕早川悠里| 91精品国产色综合久久久蜜香臀| 欧美成人第一区| 性生活视频软件| 国产一区二区导航在线播放| 国产在线a不卡| 亚洲免费视频二区| 久久最新视频| 国产精品扒开腿做| 波多野结衣视频在线观看| 久久久久国产精品一区三寸 | 国产精品原创视频| 欧美视频一区二区在线观看| 黄色永久免费网站| 久久久久久一区二区三区四区别墅| 一本色道综合亚洲| 不卡av免费在线| 国产成人毛片| 7777精品伊人久久久大香线蕉超级流畅 | 五月天色婷婷丁香| 66视频精品| 欧美日本亚洲视频| 日韩三级小视频| 久久久久一区| 成人黄色av免费在线观看| 99久久久无码国产精品免费| 国产成人午夜精品影院观看视频| 动漫精品视频| 香港一级纯黄大片| 中文字幕第一页久久| 手机成人av在线| 国产激情在线播放| 在线看国产一区| 红桃视频 国产| av在线亚洲色图| 日韩美女av在线| 奇米网一区二区| 韩日在线一区| 欧美激情综合色| 国产日韩三区| 亚洲欧洲视频在线观看| 91免费看`日韩一区二区| 欧美激情专区| 国产激情小视频在线| 亚洲狠狠爱一区二区三区| 波多野结衣家庭教师在线播放| 日本欧美日韩| 欧美大片在线观看| 精品无码一区二区三区| 婷婷综合久久| 欧美在线视频免费播放| 国产精品天天操| 99在线精品观看| 午夜精品久久久久久久白皮肤| 九九热在线免费观看| 美腿丝袜亚洲三区| 国产精品久久久久久久久久直播 | av欧美精品.com| 色狠狠久久av五月综合| 女人天堂av在线播放| 一本大道久久a久久综合| 亚洲综合123| 国产亚洲欧美日韩在线观看一区二区 | 日韩精品一区二区在线观看| 国产精品密蕾丝袜| 国产精品大片| 成人夜晚看av| 国产色a在线| 午夜精品久久久久影视| 亚洲欧美天堂在线| 夜夜春成人影院| 欧美激情亚洲激情| 一区二区视频免费| 久久亚洲影视婷婷| 日本丰满少妇xxxx| 精品精品视频| 日韩一区二区精品视频| 91视频在线视频| 99re这里都是精品| 欧美图片激情小说| 美国十次综合久久| 中文字幕在线国产精品| 国产精品21p| 94色蜜桃网一区二区三区| 日韩一级特黄毛片| 亚洲一区二区小说| 色伦专区97中文字幕| 中文字幕一区在线播放| 99久久亚洲一区二区三区青草| 男女爱爱视频网站| 国产美女亚洲精品7777| 日韩在线视频网站| 中文字幕人妻精品一区| 国产视频在线观看一区二区三区 | 日韩三区在线| 亚洲精品理论电影| 国产视频91在线| 成人看片黄a免费看在线| 女人被男人躁得好爽免费视频 | 黄视频网站免费看| 韩国成人精品a∨在线观看| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 小明成人免费视频一区| 中文字幕亚洲色图| 一级aaaa毛片| 亚洲色图欧美偷拍| xxxx国产视频| 亚洲欧洲日本mm| 韩国精品一区二区三区六区色诱| rebdb初裸写真在线观看| 亚洲激情国产精品| 四虎成人永久免费视频| 久久精品欧美一区二区三区不卡| 欧美丰满熟妇xxxxx| 精品午夜久久| 成人免费激情视频| 国产蜜臀在线| 精品一区二区电影| 日批视频免费观看| 国产精品卡一卡二卡三| 日本一本在线视频| 影院欧美亚洲| 日韩久久精品一区二区三区| 欧美性生活一级| 欧美成人在线网站| 欧美一区二区三区成人片在线| 黄网在线免费看| 欧美午夜在线一二页| 成年人视频软件| 国产伦理精品不卡| 日韩亚洲欧美视频| 一本色道久久综合亚洲精品酒店| 国产精品99导航| 老司机免费在线视频| 日韩视频在线观看一区二区| 日韩欧美大片在线观看| 日韩精品久久久| 手机福利小视频在线播放| 色综合色综合色综合色综合色综合| 在线不卡av电影| 激情五月婷婷综合| 男人天堂av片| 欧美日韩在线观看视频小说| 亚洲综合在线小说| 天天综合av| 久久精品视频亚洲| 天堂√在线中文官网在线| 欧美视频一区二区三区四区 | 久久视频精品| 成人av网站观看| 日韩欧美一区二区三区免费观看 | 亚洲乱码国产乱码精品精天堂| 免费观看日批视频| 亚洲人成在线播放网站岛国| 欧美激情xxxx性bbbb| 丰满熟女一区二区三区| 色婷婷av一区二区三区大白胸 | 97中文字幕在线观看| 日韩和欧美的一区| 欧美午夜性视频| 婷婷成人基地| 日韩在线国产| 另类尿喷潮videofree| 91久久精品美女高潮| 综合另类专区| 午夜精品www| av在线免费观看网址| 亚洲三级免费看| 日本久久一级片| 日韩一级二级三级精品视频| 欧美成人一区二区视频| 狠狠做深爱婷婷久久综合一区| 国产免费无码一区二区视频| 国产欧美va欧美不卡在线| 亚洲国产精品无码久久久久高潮| 国产乱码精品1区2区3区| 亚洲激情在线观看视频| 亚洲综合二区| 很污的网站在线观看| 欧美日本一区二区高清播放视频| 亚洲免费精品视频| 教室别恋欧美无删减版| 久久精品magnetxturnbtih| 97一区二区国产好的精华液| 91欧美精品成人综合在线观看| 一区在线影院| 国产激情视频一区| 日韩免费电影| 国产精品91免费在线| 韩国美女久久| 日韩女在线观看| 欧美理论影院| 国产成人黄色av| 国产精品专区免费| 国产成人久久久| 欧美黑人粗大| 国产精品久久久久av免费| 日韩不卡免费高清视频| 国产成人久久精品| 先锋欧美三级| 国产精品一区二区3区| 国产精品久久久久久吹潮| 国产精品视频区| 久久电影天堂| 91免费版网站入口| 7777精品| 久久久久久国产精品免费免费| 欧美丝袜美腿| 欧洲一区二区日韩在线视频观看免费 | 精品国产大片大片大片| 中文字幕一区av| 麻豆视频在线免费看| 一区二区三区四区蜜桃| 日本午夜精品理论片a级app发布| 亚洲成a天堂v人片| 国产精品suv一区| 欧美视频一区二区三区四区| 国产探花精品一区二区| 日韩欧美综合一区| 天天综合在线视频| 原创国产精品91| 黄色精品在线观看| 久久久久久伊人| 日韩大尺度黄色| 成人性生交xxxxx网站| 高潮按摩久久久久久av免费| 久久精品二区| 国产精品成人一区二区不卡| 99久久免费观看| 午夜宅男久久久| 性生活免费在线观看| 国产aⅴ综合色| 亚洲熟妇一区二区三区| 成人免费一区二区三区在线观看| 国产真人真事毛片| 一本色道久久综合亚洲91 | 久久午夜免费视频| 欧美亚洲高清一区| 不卡视频免费在线观看| 亚洲美女动态图120秒| 巨大荫蒂视频欧美另类大| 国内精品美女av在线播放| 在线成人视屏| 国产 高清 精品 在线 a| 一个色免费成人影院| 黄瓜视频免费观看在线观看www| 亚洲激情成人| 污视频网址在线观看| 99久久精品99国产精品| 国产suv精品一区二区68| 黄色成人av在线| 国产精品系列视频| 精品在线观看国产| 在线看女人毛片| 国产精品国产亚洲伊人久久| 中文字幕av一区二区三区四区| 亚洲 国产 日韩 综合一区| 亚洲性视频h| 激情五月婷婷基地| 久久久精品综合| 日本免费一二三区| 91精品在线一区二区| 高清日韩av电影| 91精品国产高清久久久久久久久| 电影中文字幕一区二区| 日韩不卡av| 免费中文字幕日韩欧美| 美女网站视频在线观看| 国产精品久久久久四虎| 久久久黄色大片| 精品成人一区二区| 日韩影视在线| 91免费看国产| 久久精品不卡| 久热免费在线观看| 99久久久久久| 国产一区毛片| 国产精品亚洲аv天堂网| 一区二区三区自拍视频| 亚洲欧美丝袜| 老牛国产精品一区的观看方式| 妖精视频一区二区| 亚洲女同一区二区| 国产在成人精品线拍偷自揄拍| 亚洲性线免费观看视频成熟| 亚洲天堂电影| 精品在线不卡| 亚洲精品女人| 国产人成视频在线观看| 亚洲一区二区三区四区五区中文| 91久久国语露脸精品国产高跟| 在线观看精品国产视频| 国产 日韩 欧美一区| 欧美一级爱爱| 日韩精品亚洲一区| av黄色免费网站| 色狠狠色狠狠综合| 久香视频在线观看| 日韩美女在线观看| 亚洲警察之高压线| 亚洲人成无码www久久久| 91免费观看国产| 91video| 一区二区三区国产视频| 影视一区二区三区| 亚洲三区在线| 韩国女主播成人在线| 高h视频免费观看| 日韩精品中文字幕一区| 91资源在线观看| 好看的日韩精品视频在线| 亚洲深夜福利| 好吊视频在线观看| 欧洲激情一区二区| 三区四区电影在线观看| 成人国内精品久久久久一区| 最新欧美人z0oozo0| 亚洲美女高潮久久久| 午夜精品久久久久久| 欧美高清电影在线| 国产精品吹潮在线观看| 99久久婷婷| 国产精品成人免费一区久久羞羞| 亚洲国产综合色| 免费看男男www网站入口在线| 国产成人欧美在线观看| 99久久精品网站| 国产又黄又嫩又滑又白| 精品久久久视频| 成人免费在线电影| 91亚洲精品一区二区| 亚洲啪啪91| 少妇一级黄色片| 日韩一区二区三区视频| 麻豆国产在线| 国模gogo一区二区大胆私拍| 亚洲国产欧美日韩在线观看第一区 | 乱码一区二区三区| 欧美三级xxx| 国产欧美精品aaaaaa片| 91免费在线播放| 国产色综合视频| 国产91成人在在线播放| 99久久精品国产亚洲精品| 国产女人18毛片水真多18| 欧美色涩在线第一页| 暖暖在线中文免费日本| 茄子视频成人在线观看| 国产成人免费av在线| 亚洲大尺度在线观看| 欧美激情第1页| 久久精品99久久无色码中文字幕| 亚洲乱妇老熟女爽到高潮的片 | 亚洲高清视频网站| 国产大片精品免费永久看nba| 亚洲国产激情| www.xxxx日本|