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

從零設(shè)計(jì)可視化大屏搭建引擎

大數(shù)據(jù) 數(shù)據(jù)可視化
可視化大屏搭建平臺(tái)的一些設(shè)計(jì)思路和效果演示, 這篇文章我會(huì)就 如何設(shè)計(jì)可視化大屏搭建引擎 這一主題, 詳細(xì)介紹一下實(shí)現(xiàn)原理。

[[410807]]

幾個(gè)月前我寫了一篇關(guān)于從零開發(fā)一款可視化大屏制作平臺(tái) 的文章, 簡(jiǎn)單概述了一下可視化大屏搭建平臺(tái)的一些設(shè)計(jì)思路和效果演示, 這篇文章我會(huì)就 如何設(shè)計(jì)可視化大屏搭建引擎 這一主題, 詳細(xì)介紹一下實(shí)現(xiàn)原理。

按照我一向的寫作風(fēng)格, 我會(huì)在下面列出文章的大綱,以便大家有選擇且高效率的閱讀和學(xué)習(xí):

  • 快速了解數(shù)據(jù)可視化
  • 如何設(shè)計(jì)通用的大屏搭建引擎
  • 大屏搭建引擎核心功能實(shí)現(xiàn)
    • 拖拽器實(shí)現(xiàn)
    • 物料中心設(shè)計(jì)
    • 動(dòng)態(tài)渲染器實(shí)現(xiàn)
    • 配置面板設(shè)計(jì)
    • 控制中心概述
    • 功能輔助設(shè)計(jì)
  • 可視化大屏后期規(guī)劃和未來(lái)展望

大家可以輕松根據(jù)右側(cè)的文章導(dǎo)航, 快速定位到自己想看的位置, 接下來(lái)我們開始進(jìn)入正文。

快速了解數(shù)據(jù)可視化

說(shuō)到數(shù)據(jù)可視化, 想必大家多多少少稍接觸過, 從技術(shù)層面談, 最直觀的就是前端可視化框架, 比如:

  • echart
  • antv
  • Chart.js
  • D3.js
  • Vega

這些庫(kù)都能幫我們輕松制作可視化圖表。

從實(shí)用性的角度來(lái)談, 其最主要的意義就在于幫助用戶更好的分析和表達(dá)數(shù)據(jù)。所以說(shuō)談到數(shù)據(jù)可視化, 更多的是和各種圖表打交道, 通過 數(shù)據(jù) -> 圖表組合 -> 可視化頁(yè)面 這一業(yè)務(wù)流程, 就構(gòu)成了我們今天要研究的話題——設(shè)計(jì)可視化大屏搭建引擎。

如何設(shè)計(jì)通用的大屏搭建引擎

說(shuō)到 “引擎” 這個(gè)詞也許有種莫名的高大上, 其實(shí)在互聯(lián)網(wǎng)技術(shù)中, 我們經(jīng)常會(huì)聽到各種相關(guān)的名詞,比如 “瀏覽器渲染引擎” , “規(guī)則引擎” , “圖像識(shí)別引擎” 等, 我覺得 “引擎” 的本質(zhì)就是提供一套可靠的機(jī)制, 為系統(tǒng)提供源源不斷的生產(chǎn)力。所以我們今天談的“可視化大屏搭建引擎”, 本質(zhì)上也是提供一套搭建機(jī)制, 支撐我們?cè)O(shè)計(jì)各種復(fù)雜的可視化頁(yè)面。

為了方便大家理解可視化搭建, 我這里展示2張可視化大屏的頁(yè)面, 來(lái)和大家一起分析一下可視化大屏的組成要素:

當(dāng)然實(shí)際應(yīng)用中大屏展現(xiàn)的內(nèi)容和形式遠(yuǎn)比這復(fù)雜, 我們從上圖可以提煉出大屏頁(yè)面的2個(gè)直觀特征:

  1. 可視化組件集
  2. 空間坐標(biāo)關(guān)系

因?yàn)槲覀兛梢暬笃凛d體是頁(yè)面, 是html, 所以還有另外一個(gè)特征: 事件/交互。綜上我們總結(jié)出了可視化大屏的必備要素:

我們只要充分的理解了可視化大屏的組成和特征, 我們才能更好的設(shè)計(jì)可視化大屏搭建引擎, 基于以上分析, 我設(shè)計(jì)了一張基礎(chǔ)引擎的架構(gòu)圖:

接下來(lái)我就帶大家一起來(lái)拆解并實(shí)現(xiàn)上面的搭建引擎。

大屏搭建引擎核心功能實(shí)現(xiàn)

俗話說(shuō): “好的拆解是成功的一半”, 任何一個(gè)復(fù)雜任務(wù)或者系統(tǒng), 我們只要能將其拆解成很多細(xì)小的子模塊, 就能很好的解決并實(shí)現(xiàn)它. (學(xué)習(xí)也是一樣)

接下來(lái)我們就逐一解決上述基礎(chǔ)引擎的幾個(gè)核心子模塊:

  • 拖拽器實(shí)現(xiàn)
  • 物料中心設(shè)計(jì)
  • 動(dòng)態(tài)渲染器實(shí)現(xiàn)
  • 配置面板設(shè)計(jì)
  • 控制中心概述
  • 功能輔助設(shè)計(jì)

拖拽器實(shí)現(xiàn)

拖拽器是可視化搭建引擎的核心模塊, 也是用來(lái)解決上述提到的大屏頁(yè)面特征中的“空間坐標(biāo)關(guān)系”這一問題。我們先來(lái)看一下實(shí)現(xiàn)效果:

有關(guān)拖拽的技術(shù)實(shí)現(xiàn), 我們可以利用原生 js 實(shí)現(xiàn), 也可以使用第三方成熟的拖拽庫(kù), 比如:

  • DnD
  • React-Dragable
  • react-moveable

我之前也開源了一個(gè)輕量級(jí)自由拖拽庫(kù) rc-drag , 效果如下:

有關(guān)它的技術(shù)實(shí)現(xiàn)可以參考我的另一篇文章: 輕松教你搞定組件的拖拽, 縮放, 多控制點(diǎn)伸縮和拖拽數(shù)據(jù)上報(bào)。大家也可以基于此做二次擴(kuò)展和封裝。

我們拖拽器的基本原型代碼如下:

  1. export default function DragBox(props) { 
  2.     const [x, y, config] = props; 
  3.     const [target, setTarget] = React.useState(); 
  4.     const [elementGuidelines, setElementGuidelines] = React.useState([]); 
  5.     const [frame, setFrame] = React.useState({ 
  6.         translate: [x, y], 
  7.     }); 
  8.     React.useEffect(() => { 
  9.         setTarget(document.querySelector(".target")!); 
  10.     }, []); 
  11.     return <div className="container"
  12.         <div className="target">拖拽內(nèi)部組件, 比如圖表/基礎(chǔ)組件等</div> 
  13.         <Moveable 
  14.             target={target} 
  15.             elementGuidelines={elementGuidelines} 
  16.             snappable={true
  17.             snapThreshold={5} 
  18.             isDisplaySnapDigit={true
  19.             snapGap={true
  20.             snapElement={true
  21.             snapVertical={true
  22.             snapHorizontal={true
  23.             snapCenter={false
  24.             snapDigit={0} 
  25.             draggable={true
  26.             throttleDrag={0} 
  27.             startDragRotate={0} 
  28.             throttleDragRotate={0} 
  29.             zoom={1} 
  30.             origin={true
  31.             padding={{"left":0,"top":0,"right":0,"bottom":0}} 
  32.             onDragStart={e => { 
  33.                 e.set(frame.translate); 
  34.                 // 自定義的拖拽開始邏輯 
  35.             }} 
  36.             onDrag={e => { 
  37.                 frame.translate = e.beforeTranslate; 
  38.                 e.target.style.transform = `translate(${e.beforeTranslate[0]}px, ${e.beforeTranslate[1]}px)`; 
  39.                 // 自定義的拖拽結(jié)束邏輯 
  40.             }} 
  41.         /> 
  42.     </div>; 

以上只是實(shí)現(xiàn)了基本的拖拽功能, 我們需要對(duì)拖拽位置信息做保存以便在預(yù)覽是實(shí)現(xiàn)“所搭即所得”的效果。位置信息會(huì)和其他屬性統(tǒng)一保存在組件的DSL數(shù)據(jù)中, 這塊在接下來(lái)內(nèi)容中會(huì)詳細(xì)介紹。

對(duì)于拖拽器的進(jìn)一步深入, 我們還可以設(shè)置參考線, 對(duì)齊線, 吸附等, 并且可以在拖拽的不同時(shí)期(比如onDragStart和onDragEnd)做不同的業(yè)務(wù)邏輯。這些 Moveable 都提供了對(duì)應(yīng)的api支持, 大家可以參考使用。

物料中心設(shè)計(jì)

物料中心主要為大屏頁(yè)面提供“原材料”。為了設(shè)計(jì)健壯且通用的物料, 我們需要設(shè)計(jì)一套標(biāo)準(zhǔn)組件結(jié)構(gòu)和屬性協(xié)議。并且為了方便物料管理和查詢, 我們還需要對(duì)物料進(jìn)行分類, 我的分類如下:

  • 可視化組件 (柱狀圖, 餅圖, 條形圖, 地圖可視化等)
  • 修飾型組件 (圖片, 輪播圖, 修飾素材等)
  • 文字類組件 (文本, 文本跑馬燈, 文字看板)

具體的物料庫(kù)演示如下:

這里我拿一個(gè)可視化組件的實(shí)現(xiàn)來(lái)舉例說(shuō)明:

  1. import React, { memo, useEffect } from 'react' 
  2. import { Chart } from '@antv/g2' 
  3.  
  4. import { colors } from '@/components/BasicShop/common' 
  5.  
  6. import { ChartConfigType } from './schema' 
  7.  
  8. interface ChartComponentProps extends ChartConfigType { 
  9.   id: string 
  10.  
  11. const ChartComponent: React.FC<ChartComponentProps> = ({ 
  12.   id, data, width, height, 
  13.   toggle, legendPosition, legendLayout, legendShape, 
  14.   labelColor, axisColor, multiColor, tipEvent, titleEvent, 
  15.   dataType, apiAddress, apiMethod, apiData, refreshTime, 
  16. }) => { 
  17.   useEffect(() => { 
  18.     let timer:any = null
  19.     const chart = new Chart({ 
  20.       container: `chart-${id}`, 
  21.       autoFit: true
  22.       width, 
  23.       height 
  24.     }) 
  25.  
  26.     // 數(shù)據(jù)過濾, 接入 
  27.     const dataX = data.map(item => ({ ...item, value: Number(item.value) })) 
  28.     chart.data(dataX) 
  29.      
  30.     // 圖表屬性組裝 
  31.     chart.legend( 
  32.       toggle 
  33.         ? { 
  34.           position: legendPosition, 
  35.           layout: legendLayout, 
  36.           marker: { 
  37.             symbol: legendShape 
  38.           }, 
  39.         } 
  40.         : false
  41.     ) 
  42.  
  43.     chart.tooltip({ 
  44.       showTitle: false
  45.       showMarkers: false
  46.     }) 
  47.  
  48.     // 其他圖表信息源配置, 方法雷同, 此處省略 
  49.     // ... 
  50.  
  51.     chart.render() 
  52.  
  53.   }, []) 
  54.  
  55.   return <div id={`chart-${id}`} /> 
  56.  
  57. export default memo(ChartComponent) 

以上就是我們的基礎(chǔ)物料的實(shí)現(xiàn)模式, 可視化組件采用了g2, 當(dāng)然大家也可以使用熟悉的echart, D3.js等. 不同物料既有通用的 props , 也有專有的 props, 取決于我們?nèi)绾味x物料的Schema。

在設(shè)計(jì) Schema 前我們需要明確組件的屬性劃分, 為了滿足組件配置的靈活性和通用性, 我做了如下劃分:

  • 外觀屬性 (組件寬高, 顏色, 標(biāo)簽, 展現(xiàn)模式等)
  • 數(shù)據(jù)配置 (靜態(tài)數(shù)據(jù), 動(dòng)態(tài)數(shù)據(jù))
  • 事件/交互 (如單擊, 跳轉(zhuǎn)等)

有了以上劃分, 我們就可以輕松設(shè)計(jì)想要的通用Schema了。我們先來(lái)看看實(shí)現(xiàn)后的配置面板:

這些屬性項(xiàng)都是基于我們定義的schema配置項(xiàng), 通過 解析引擎 動(dòng)態(tài)渲染出來(lái)的, 有關(guān) 解析引擎 和配置面板, 我會(huì)在下面的章節(jié)和大家介紹。我們先看看組件的 schema 結(jié)構(gòu):

  1. const Chart: ChartSchema = { 
  2.   editAttrs: [ 
  3.     { 
  4.       key'layerName'
  5.       type: 'Text'
  6.       cate: 'base', 
  7.     }, 
  8.     { 
  9.       key'y'
  10.       type: 'Number'
  11.       cate: 'base'
  12.     }, 
  13.     ...DataConfig, // 數(shù)據(jù)配置項(xiàng) 
  14.     ...eventConfig, // 事件配置項(xiàng) 
  15.      
  16.   ], 
  17.   config: { 
  18.     width: 200, 
  19.     height: 200, 
  20.     zIndex: 1, 
  21.     layerName: '柱狀圖'
  22.     labelColor: 'rgba(188,200,212,1)'
  23.     // ... 其他配置初始值 
  24.     multiColor: ['rgba(91, 143, 249, 1)''rgba(91, 143, 249, 1)''rgba(91, 143, 249,,1)''rgba(91, 143, 249, 1)'], 
  25.     data: [ 
  26.       { 
  27.         name'A'
  28.         value: 25, 
  29.       }, 
  30.       { 
  31.         name'B'
  32.         value: 66, 
  33.       } 
  34.     ], 
  35.   }, 

其中 editAttrs 表示可編輯的屬性列表, config 為屬性的初始值, 當(dāng)然大家也可以根據(jù)自己的喜好, 設(shè)計(jì)類似的通用schema。

我們通過以上設(shè)計(jì)的標(biāo)準(zhǔn)組件和標(biāo)準(zhǔn)schema, 就可以批量且高效的生產(chǎn)各種物料, 還可以輕松集成任何第三方可視化組件庫(kù)。

動(dòng)態(tài)渲染器實(shí)現(xiàn)

我們都知道, 一個(gè)頁(yè)面中元素很多時(shí)會(huì)影響頁(yè)面整體的加載速度, 因?yàn)闉g覽器渲染頁(yè)面需要消耗CPU / GPU。對(duì)于可視化頁(yè)面來(lái)說(shuō), 每一個(gè)可視化組件都需要渲染大量的信息元, 這無(wú)疑會(huì)對(duì)頁(yè)面性能造成不小的影響, 所以我們需要設(shè)計(jì)一種機(jī)制, 讓組件異步加載到畫布上, 而不是一次性加載幾十個(gè)幾百個(gè)組件(這樣的話頁(yè)面會(huì)有大量的白屏?xí)r間, 用戶體驗(yàn)極度下降)。

動(dòng)態(tài)加載器就是提供了這樣一種機(jī)制, 保證組件的加載都是異步的, 一方面可以減少頁(yè)面體積, 另一方面用戶可以更早的看到頁(yè)面元素。目前我們熟的動(dòng)態(tài)加載機(jī)制也有很多, Vue 和 React 生態(tài)都提供了開箱即用的解決方案(雖然我們可以用 webpack 自行設(shè)計(jì)這樣的動(dòng)態(tài)模型, 此處為了提高行文效率, 我們直接基于現(xiàn)成方案封裝)。我們先看一下動(dòng)態(tài)渲染組件的過程:

上面的演示可以細(xì)微的看出從左側(cè)組件菜單拖動(dòng)某個(gè)組件圖標(biāo)到畫布上后, 真正的組件才開始加載渲染。

這里我們以 umi3.0 提供的 dynamic 函數(shù)來(lái)最小化實(shí)現(xiàn)一個(gè)動(dòng)態(tài)渲染器. 如果不熟悉 umi 生態(tài)的朋友, 也不用著急, 看完我的實(shí)現(xiàn)過程和原理之后, 就可以利用任何熟悉的動(dòng)態(tài)加載機(jī)制實(shí)現(xiàn)它了。實(shí)現(xiàn)如下:

  1. import React, { useMemo, memo, FC } from 'react' 
  2. import { dynamic } from 'umi' 
  3.  
  4. import LoadingComponent from '@/components/LoadingComponent' 
  5.  
  6.  
  7. const DynamicFunc = (cpName: string, category: string) => { 
  8.   return dynamic({ 
  9.     async loader() { 
  10.       //  動(dòng)態(tài)加載組件 
  11.       const { default: Graph } = await import(`@/components/materies/${cpName}`) 
  12.  
  13.       return (props: DynamicType) => { 
  14.         const { config, id } = props 
  15.         return <Graph {...config} id={id} /> 
  16.       } 
  17.     }, 
  18.     loading: () => <LoadingComponent /> 
  19.   }) 
  20.  
  21. const DynamicRenderEngine: FC<DynamicType> = memo((props) => { 
  22.   const {  
  23.   type,  
  24.   config,  
  25.   // 其他配置...  
  26.   } = props 
  27.   const Dynamic = useMemo(() => { 
  28.     return DynamicFunc(config) 
  29.   }, [config]) 
  30.  
  31.   return <Dynamic {...props} /> 
  32. }) 
  33.  
  34. export default DynamicRenderEngine 

是不是很簡(jiǎn)單? 當(dāng)然我們也可以根據(jù)自身業(yè)務(wù)需要, 設(shè)計(jì)更復(fù)雜強(qiáng)大的動(dòng)態(tài)渲染器。

配置面板設(shè)計(jì)

實(shí)現(xiàn)配置面板的前提是對(duì)組件 Schema 結(jié)構(gòu)有一個(gè)系統(tǒng)的設(shè)計(jì), 在介紹組件庫(kù)實(shí)現(xiàn)中我們介紹了通用組件 schema 的一個(gè)設(shè)計(jì)案例, 我們基于這樣的案例結(jié)構(gòu), 來(lái)實(shí)現(xiàn) 動(dòng)態(tài)配置面板。

由上圖可以知道, 動(dòng)態(tài)配置面板的一個(gè)核心要素就是 表單渲染器。表單渲染器的目的就是基于屬性配置列表 attrs 來(lái)動(dòng)態(tài)渲染出對(duì)應(yīng)的表單項(xiàng)。我之前寫了一篇文章詳細(xì)的介紹了表單設(shè)計(jì)器的技術(shù)實(shí)現(xiàn)的文章, 大家感興趣也可以參考一下: Dooring可視化之從零實(shí)現(xiàn)動(dòng)態(tài)表單設(shè)計(jì)器。

我這里來(lái)簡(jiǎn)單實(shí)現(xiàn)一個(gè)基礎(chǔ)的表單渲染器模型:

  1. const FormEditor = (props: FormEditorProps) => { 
  2.   const { attrs, defaultValue, onSave } = props; 
  3.  
  4.   const onFinish = (values: Store) => { 
  5.     // 保存配置項(xiàng)數(shù)據(jù) 
  6.     onSave && onSave(values); 
  7.   }; 
  8.    
  9.   const handlechange = (value) => { 
  10.     // 更新邏輯 
  11.   } 
  12.  
  13.   const [form] = Form.useForm(); 
  14.  
  15.   return ( 
  16.     <Form 
  17.       form={form} 
  18.       {...formItemLayout} 
  19.       onFinish={onFinish} 
  20.       initialValues={defaultValue} 
  21.       onValuesChange={handlechange} 
  22.     > 
  23.       { 
  24.         attrs.map((item, i) => { 
  25.         return ( 
  26.           <React.Fragment key={i}> 
  27.             {item.type === 'Number' && ( 
  28.               <Form.Item label={item.namename={item.key}> 
  29.                 <InputNumber /> 
  30.               </Form.Item> 
  31.             )} 
  32.             {item.type === 'Text' && ( 
  33.               <Form.Item label={item.namename={item.key}> 
  34.                 <Input placeholder={item.placeholder} /> 
  35.               </Form.Item> 
  36.             )} 
  37.             {item.type === 'TextArea' && ( 
  38.               <Form.Item label={item.namename={item.key}> 
  39.                 <TextArea rows={4} /> 
  40.               </Form.Item> 
  41.             )} 
  42.             // 其他配置類型 
  43.           </React.Fragment> 
  44.         ); 
  45.       })} 
  46.     </Form> 
  47.   ); 
  48. }; 

如果大家想看更完整的配置面板實(shí)現(xiàn), 可以參考開源項(xiàng)目 H5-Dooring | H5可視化編輯器

我們可以看看最終的配置面板實(shí)現(xiàn)效果:

控制中心概述 & 功能輔助設(shè)計(jì)

控制中心的實(shí)現(xiàn)主要是業(yè)務(wù)層的, 沒有涉及太多復(fù)雜的技術(shù), 所以這里我簡(jiǎn)單介紹一下。因?yàn)榭梢暬笃另?yè)面展示的信息有些可能是私密數(shù)據(jù), 只希望一部分人看到, 所以我們需要對(duì)頁(yè)面的訪問進(jìn)行控制。其次由于企業(yè)內(nèi)部業(yè)務(wù)戰(zhàn)略需求, 可能會(huì)對(duì)頁(yè)面進(jìn)行各種驗(yàn)證, 狀態(tài)校驗(yàn), 數(shù)據(jù)更新頻率等, 所以我們需要設(shè)計(jì)一套控制中心來(lái)管理。最基本的就是訪問控制, 如下:

功能輔助設(shè)計(jì) 主要是一些用戶操作上的優(yōu)化, 比如快捷鍵, 畫布縮放, 大屏快捷導(dǎo)航, 撤銷重做等操作, 這塊可以根據(jù)具體的產(chǎn)品需求來(lái)完善。大家后期設(shè)計(jì)搭建產(chǎn)品時(shí)也可以參考實(shí)現(xiàn)。

可視化大屏后期規(guī)劃和未來(lái)展望

為了實(shí)現(xiàn)更富有展現(xiàn)力, 滿足更多場(chǎng)景的可視化大屏引擎, 我們一方面需要提高引擎擴(kuò)展性, 一方面需要完善物料生態(tài), 其次只要與時(shí)俱進(jìn), 提供更多智能化的場(chǎng)景功能, 比如搭建埋點(diǎn), 數(shù)據(jù)預(yù)警等, 具體規(guī)劃如下:

  • 豐富組件物料, 支持3D組件, 地理空間組件等
  • 搭建埋點(diǎn), 方便后期對(duì)組件進(jìn)行分析
  • 實(shí)現(xiàn)數(shù)據(jù)源, 事件機(jī)制閉環(huán)
  • 支持用戶自定義組件

本文轉(zhuǎn)載自微信公眾號(hào)「趣談前端」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系趣談前端公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 趣談前端
相關(guān)推薦

2021-03-09 08:32:50

開發(fā)視化大屏H5-Dooring

2023-09-26 08:01:16

2022-02-28 08:34:42

開發(fā)可視化大屏

2022-08-26 10:26:16

前端開發(fā)

2024-03-11 08:32:02

2023-12-27 10:47:45

Flask數(shù)據(jù)可視化開發(fā)

2021-09-26 16:20:04

Sentry Dashboards 數(shù)據(jù)可視化

2021-10-28 08:42:31

Dooring表單設(shè)計(jì)器數(shù)據(jù)可視化

2021-09-11 21:03:09

可視化搭建框架

2021-04-14 16:20:39

可視化大數(shù)據(jù)工具

2022-09-08 11:19:53

Vue可視化插件

2017-12-26 14:05:21

潤(rùn)乾大屏可視化

2021-11-19 08:30:39

H5-Dooring 可視化組件商店

2021-07-27 08:29:33

可視化組件商店H5-Dooring

2020-03-11 14:39:26

數(shù)據(jù)可視化地圖可視化地理信息

2021-12-30 12:02:52

Python可視化代碼

2023-10-12 08:02:36

2021-02-28 07:42:40

可視化網(wǎng)格線H5-Dooring

2023-09-15 14:39:09

2023-11-02 08:41:39

點(diǎn)贊
收藏

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

黄色网页在线免费看| 337p粉嫩色噜噜噜大肥臀| 欧美视频三区| 午夜视频一区在线观看| 美国av一区二区三区| 中文字幕一区2区3区| 欧美成人一区二免费视频软件| 亚洲成色www8888| av无码精品一区二区三区| 麻豆传媒视频在线观看| 成人妖精视频yjsp地址| 日韩美女视频中文字幕| 日本青青草视频| 美女主播精品视频一二三四| 欧美日韩第一区日日骚| 各处沟厕大尺度偷拍女厕嘘嘘| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 亚洲爽爆av| 亚洲在线视频网站| 亚洲美女搞黄| 天堂资源最新在线| 国产精品1区2区3区| 国产福利成人在线| 欧美精品入口蜜桃| 精品免费一区二区| 亚洲精品v天堂中文字幕| 天堂av8在线| 欧美性xxx| 午夜激情一区二区三区| 熟女视频一区二区三区| porn亚洲| 国产欧美一区二区精品忘忧草| 国产精品一区二区三区观看| 国产乱人乱偷精品视频a人人澡| 久久一区视频| 2021国产精品视频| 国产在线欧美在线| 欧美在线国产| 色先锋资源久久综合5566| 中文字幕高清视频| 群体交乱之放荡娇妻一区二区| 日韩一二三区不卡| 色91精品久久久久久久久| 国产 日韩 欧美一区| 午夜精品一区二区三区免费视频 | 欧美综合欧美视频| 国产xxxxx在线观看| 超碰在线99| 亚洲高清视频中文字幕| www.亚洲视频.com| 久草在线视频资源| 亚洲成年人影院| 欧美精品卡一卡二| 51精品视频| 午夜av一区二区三区| 欧美一级免费播放| av日韩中文| 舔着乳尖日韩一区| 国产人妻777人伦精品hd| 9765激情中文在线| 欧美日韩国产精品专区| 日本三级免费观看| 不卡亚洲精品| 欧美专区在线观看一区| 五月天视频在线观看| 亚洲伊人伊成久久人综合网| 欧美一区国产二区| 亚洲少妇中文字幕| 欧美xxxx在线| 亚洲情综合五月天| 日本在线观看网址| 99久久99热这里只有精品| 久久精品国产亚洲一区二区| 毛片a片免费观看| 黑人一区二区| 国产aⅴ夜夜欢一区二区三区| 波多野结衣激情视频| 久久精品国产精品青草| 69174成人网| 三级在线观看网站| 久久精品欧美一区二区三区不卡 | 国产精品一区毛片| 国产精品igao视频| 国产精品久久久久毛片| 国产91精品露脸国语对白| 久草精品电影| 北岛玲一区二区三区| 综合久久久久综合| 欧美在线一区视频| 国产一区二区主播在线| 3d动漫精品啪啪一区二区竹菊| 美女伦理水蜜桃4| 欧美精品一区二区三区中文字幕 | 福利影院在线看| 在线亚洲免费视频| 在线观看视频在线观看| 欧美一级一片| 色哟哟入口国产精品| 久久精品女人毛片国产| 日韩激情av在线| 亚洲在线免费视频| 欧洲成人av| 亚洲精品乱码久久久久久黑人| 丰满爆乳一区二区三区| 福利一区在线| 亚洲精品久久久一区二区三区 | 欧美日韩国产中文字幕 | 丰满少妇xoxoxo视频| 久久国产精品免费| 久久综合福利| av免费在线观| 欧美亚洲综合色| 污污污www精品国产网站| 久久免费av| 欧美一级片一区| 精品人妻无码一区二区| 中文字幕欧美区| 乱妇乱女熟妇熟女网站| 精品久久久久久久久久岛国gif| 亚洲欧美制服丝袜| 国产亚洲欧美精品久久久久久 | 日韩欧美一区二区三区| 欧美人与性动交α欧美精品| 精品久久久久久久久久久下田| 久久久久久久久久久久久久久久久久av| 中文字幕+乱码+中文乱码www| 91亚洲大成网污www| 亚洲国产一二三精品无码| 成人免费视频观看| 亚洲视频免费一区| 黄色在线观看国产| 丁香婷婷综合激情五月色| 超碰在线免费观看97| www.成人在线视频| 亚洲人在线视频| 国产精品视频免费播放| 国产精品一区在线观看你懂的| 一本一本a久久| 国产成+人+综合+亚洲欧美| 精品成人a区在线观看| 久草视频在线资源站| 国产真实乱偷精品视频免| 日韩在线三区| 国产成人精品亚洲日本在线观看| 亚洲欧美日韩中文在线制服| 国产尤物在线视频| 91亚洲资源网| 国产成人亚洲精品无码h在线| 全球av集中精品导航福利| 97精品国产91久久久久久| 欧美性猛交 xxxx| 亚洲综合色噜噜狠狠| 美女又黄又免费的视频| 国内激情久久| 国产亚洲一区二区三区在线播放| 超级碰碰不卡在线视频| 精品国产亚洲一区二区三区在线观看| 欧美精品久久久久性色| 成人精品视频一区二区三区尤物| 五月丁香综合缴情六月小说| 加勒比视频一区| 欧美一区二区影院| 高清毛片在线看| 欧美日韩国产在线观看| 亚洲熟女毛茸茸| 国产精品一区一区| 成人黄色av片| 欧美肉体xxxx裸体137大胆| 国产精品中文在线| 成a人片在线观看| 日韩精品一区在线观看| wwwxxx亚洲| 日本一区二区三区久久久久久久久不| 超碰超碰在线观看| 欧美精品自拍| 久久精品magnetxturnbtih| 日韩精品麻豆| 久久久精品日本| 隣の若妻さん波多野结衣| 色激情天天射综合网| 中文字幕91视频| 成人精品亚洲人成在线| 成人久久久久久久久| 成人精品影视| 99久久99久久精品国产片| 在线观看欧美日韩电影| 色噜噜国产精品视频一区二区| av免费在线不卡| 狠狠爱在线视频一区| 97人妻精品一区二区免费| 精品一区二区成人精品| 老太脱裤子让老头玩xxxxx| 国产成人影院| wwwxx欧美| 四虎成人在线| 午夜精品一区二区三区av| 伊人免费在线| 亚洲黄色www| 国产精品久久影视| 欧美性猛交xxxx偷拍洗澡| 国产精品视频一区二区在线观看| av动漫一区二区| 夜夜夜夜夜夜操| 午夜影院日韩| 永久免费看av| 成人精品影院| 久久国产精品亚洲va麻豆| 自拍偷拍欧美日韩| 日本精品久久久久影院| 羞羞电影在线观看www| 中文字幕亚洲精品| 天堂a中文在线| 日韩一级黄色大片| 夜夜骚av一区二区三区| 精品久久久久久久久久| 欧美成人aaa片一区国产精品| 国产视频一区不卡| 中文字幕免费高清视频| 国产精品一级黄| www.国产视频.com| 日韩精品视频网| 波多野结衣乳巨码无在线| 欧美在线1区| 国产日韩视频在线播放| 青青草97国产精品麻豆| 欧美一二三区| 天海翼亚洲一区二区三区| 亚洲最大的网站| av成人在线网站| 国产精品天天狠天天看| 免费亚洲电影| 秋霞成人午夜鲁丝一区二区三区| a'aaa级片在线观看| 美日韩在线视频| 国产日产一区二区| 日韩中文第一页| www.亚洲资源| 亚洲欧洲中文天堂| 三级在线视频| 亚洲欧美福利视频| 欧美日韩视频精品二区| 亚洲精品黄网在线观看| 秋霞网一区二区| 精品国产污污免费网站入口| 午夜精品无码一区二区三区| 欧美一级视频精品观看| 国产毛片毛片毛片毛片毛片| 精品视频一区 二区 三区| 中文字幕乱码视频| 欧美猛男男办公室激情| 亚洲最大成人av| 欧美精品视频www在线观看| 国产精品久久久久久免费免熟| 91精品综合久久久久久| 99久久久国产精品无码免费| 欧美一区二区三区不卡| 精品久久久久中文慕人妻| 日韩欧美激情一区| 欧美一级视频免费| 日韩成人xxxx| wwwxxx在线观看| 精品久久久av| 日本无删减在线| 高清欧美性猛交| 国产精品迅雷| 国产精品视频一区国模私拍 | 国产一区二区在线网站| 色爱av综合网| 亚洲精品在线观看免费| 亚洲激情五月| 少妇人妻无码专区视频| 久久亚洲风情| 国产乱女淫av麻豆国产| 成人三级在线视频| 欧美丰满美乳xxⅹ高潮www| 亚洲特黄一级片| 国产无码精品一区二区| 色婷婷香蕉在线一区二区| 一级久久久久久久| 337p日本欧洲亚洲大胆色噜噜| 亚洲av成人精品日韩在线播放| 中文字幕日韩av电影| 影院在线观看全集免费观看| 性欧美xxxx视频在线观看| 五月激情久久| 99久久久久国产精品免费| 果冻天美麻豆一区二区国产| 日本在线观看一区| 综合五月婷婷| 国产情侣av自拍| 国产成a人亚洲| 欧美另类z0zx974| 亚洲线精品一区二区三区 | 91精品国产入口| 欧美成人免费| 欧美精品亚州精品| 第四色男人最爱上成人网| 国产成人成网站在线播放青青| 国产精品嫩草影院在线看| 亚洲色婷婷久久精品av蜜桃| 久久精品一本| 少妇伦子伦精品无吗| 中文字幕欧美激情一区| 九九热在线视频播放| 欧美一级精品在线| 97超碰人人在线| 538国产精品一区二区在线| 精品国产一区二| 亚洲精品一区二区三区蜜桃久| 99精品国产在热久久婷婷| www.色.com| 国产精品丝袜久久久久久app| 精品91久久久| 日韩欧美一级二级三级| 91在线高清| 国产不卡视频在线| 欧洲在线一区| 我的公把我弄高潮了视频| 国产一区二区三区在线观看免费视频 | 日韩在线激情| 欧美日韩在线观看一区| 99日韩精品| 中文字幕在线观看91| ...xxx性欧美| 91精品中文字幕| 永久免费精品影视网站| 在线看的毛片| 精品国产电影| 一本久道久久综合婷婷鲸鱼| 国产人妻精品久久久久野外| 国产精品色噜噜| 亚洲男人天堂网址| 在线观看日韩欧美| 一呦二呦三呦精品国产| 日韩欧美亚洲日产国| 久久精品一本| 在线观看国产精品一区| 日韩欧美精品网址| 激情小视频在线| 日韩av片免费在线观看| 亚洲国产国产| 韩国一区二区av| 久久久久久久电影| 青娱乐在线免费视频| 一区二区三区视频免费在线观看| 亚洲最大网站| 视频二区一区| 久久电影网站中文字幕| 丝袜美腿小色网| 欧美www视频| 精精国产xxxx视频在线野外| 久久精品日产第一区二区三区乱码 | 丰满人妻一区二区三区免费视频 | 625成人欧美午夜电影| 欧美一区二区影视| 日韩 欧美一区二区三区| 正在播放国产对白害羞| 欧美狂野另类xxxxoooo| av软件在线观看| 99re国产| 一区二区三区高清视频在线观看| www.自拍偷拍| 精品视频在线免费观看| 超碰在线免费播放| eeuss一区二区三区| 一本一本久久| 在线免费看黄视频| 欧美日本韩国一区二区三区视频| 黄色网页在线播放| 国产乱码一区| 久久综合图片| 午夜剧场免费在线观看| 精品日韩一区二区三区免费视频| 欧美a级在线观看| 亚洲精品中文综合第一页| 国产精品一品二品| 国内免费精品视频| 正在播放欧美一区| 麻豆国产一区二区三区四区| 国产资源在线视频| 国产精品久久久久久福利一牛影视| 国产喷水吹潮视频www| 77777少妇光屁股久久一区| 国产欧美高清视频在线| 天天色天天干天天色| 亚洲国产日韩av| 成人性生交大片免费看午夜| 亚洲一区二区三区777| 国产欧美大片| 国产白丝一区二区三区 | 亚洲av人人澡人人爽人人夜夜| 色综合天天综合给合国产| av网址在线播放| 欧美国产视频在线观看| 狠狠色丁香久久婷婷综合_中| 欧美日韩精品区| 久久天堂电影网| 一道本一区二区三区| 又色又爽又黄18网站| 在线观看亚洲a|