精品欧美一区二区三区在线观看 _久久久久国色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)

91九色综合久久| 色域天天综合网| 欧美日韩一级片在线观看| 日本一区二区在线| 乱h高h女3p含苞待放| av免费在线视| 91日韩精品一区| 国产精品女主播视频| www欧美com| 天天躁日日躁狠狠躁欧美巨大小说 | 日韩在线高清视频| 日日橹狠狠爱欧美超碰| 成年人在线观看| 国产不卡视频在线播放| 欧美一性一乱一交一视频| 国产无遮挡在线观看| 天堂av一区| 欧亚洲嫩模精品一区三区| 一级性生活视频| 日本免费精品视频| 午夜免费一区| 亚洲人成免费电影| 自慰无码一区二区三区| 麻豆tv免费在线观看| www.性欧美| 91日本在线视频| 国产精品久久久久久久久夜色| 欧美韩日精品| 中国人与牲禽动交精品| 黄色网址在线视频| 亚洲精品成人一区| 国产精品久久久久影院色老大| 国产精品99久久久久久久| 在线视频播放大全| 久久久一二三| 97国产精品视频| 国产污在线观看| av在线亚洲一区| 欧美伊人久久久久久久久影院| 免费无码毛片一区二三区| 国产婷婷视频在线| 国产精品久久久久久亚洲伦| 欧美日韩在线高清| 性高潮久久久久久久久久| 狠狠色丁香久久婷婷综合_中| 热99精品只有里视频精品| 日韩三级视频在线播放| 国产综合激情| 日韩小视频网址| 日韩一区二区三区四区视频| av影片在线一区| 欧美日韩亚洲综合在线| 青青草原av在线播放| 国产精品25p| 午夜影视日本亚洲欧洲精品| 玖玖玖精品中文字幕| www.色亚洲| 国产成人午夜电影网| 亚洲一区精品电影| 精品国产va久久久久久久| 国内久久婷婷综合| 91在线无精精品一区二区| 亚洲综合免费视频| 麻豆国产精品官网| 成人亚洲欧美一区二区三区| 一区二区视频网| 精品一区二区三区免费观看 | 成人网站免费观看入口| 丰满的护士2在线观看高清| 亚洲国产综合在线| 国产午夜大地久久| 97成人资源| 在线观看日韩av先锋影音电影院| 高清一区二区视频| 95精品视频| 日韩美女视频在线| 精品无码国模私拍视频| 在线中文字幕播放| 日韩欧美国产中文字幕| 欧美伦理片在线看| 亚洲视频资源| 欧美r级电影在线观看| 亚洲无人区码一码二码三码| 欧美日韩导航| 正在播放亚洲1区| 欧美日韩中文字幕在线观看| 99精品福利视频| 国产精品av在线| 国产人妻精品一区二区三区| 成人午夜激情在线| 国产裸体写真av一区二区| 亚洲无码久久久久| 国产成人av自拍| 欧美午夜精品久久久久免费视| 日本美女在线中文版| 亚洲综合色成人| 虎白女粉嫩尤物福利视频| 亚洲精品69| 亚洲女人天堂成人av在线| 亚洲一二三四五六区| 欧美精品国产一区二区| 国产a级全部精品| 国产视频一区二区三| 91亚洲资源网| 99精品一区二区三区的区别| 风间由美一区| 亚洲已满18点击进入久久| 熟妇人妻va精品中文字幕| 欧美日韩黄网站| 一本色道久久综合狠狠躁篇的优点| 久久久久亚洲无码| 日韩国产专区| 韩国视频理论视频久久| 国产精品国产av| 92国产精品观看| 亚洲av综合色区| 日韩精品免费观看视频| 日韩欧美美女一区二区三区| 性の欲びの女javhd| 亚洲国产免费| 91精品久久久久久久久久久| 日韩资源在线| 亚洲动漫第一页| 亚洲制服在线观看| 日韩一区欧美| 国产成人精品优优av| 嫩草影院一区二区| 亚洲免费视频成人| 日韩国产成人无码av毛片| 成a人片在线观看| 欧美第一在线视频| 国产精品人妖ts系列视频| 男人天堂新网址| 黄色成人在线观看网站| 色婷婷综合久久久中文一区二区 | 毛片网站在线看| 欧美日韩免费一区二区三区| 色阁综合av| av资源网在线播放| 欧美一区二区三区爱爱| 日本美女bbw| 国产精品久久久久久无人区| 不卡一区在线观看| 欧美三级午夜理伦三级老人| 国产精品美女午夜爽爽| 亚洲男女性事视频| 欧美精品一二三四区| 国产精品日韩精品中文字幕| 黄色成人在线网址| 亚洲国产精品推荐| 午夜免费激情视频| 久久99精品久久久久| 日韩精品国内| 中文字幕av一区二区三区佐山爱| 亚洲国产精品福利| 日韩欧美亚洲视频| 久久久久久久久综合| 欧美黑吊大战白妞| 韩国v欧美v亚洲v日本v| 一本一本a久久| 欧洲精品久久久久毛片完整版| 在线亚洲男人天堂| 欧美高清69hd| 国产精品国产三级国产aⅴ中文| 自拍偷拍 国产| 久久精品国产99久久| 91精品久久久久| 制服丝袜中文字幕在线| 亚洲精品一区二区精华| 日本在线视频免费观看| 91日韩在线专区| 日日噜噜噜噜久久久精品毛片| 成人a'v在线播放| 国产精品偷伦一区二区| 欧美成人视屏| 欧美xxxx在线观看| 在线观看日韩中文字幕| 男人天堂欧美日韩| 国产一区二区在线免费视频| 激情影院在线观看| 精品人在线二区三区| 在线观看免费av片| 国产精品亲子乱子伦xxxx裸| 久久精品久久99| 亚洲毛片在线| 亚洲精品一区二区三区樱花| 久久国产精品免费一区二区三区| 久久久噜噜噜久久中文字免| 免费理论片在线观看播放老| 777奇米成人网| 一级性生活毛片| 毛片av一区二区三区| 大地资源网在线观看免费官网| 欧美午夜18电影| 国产美女被下药99| 女人黄色免费在线观看| 亚洲天堂免费视频| 国产成人三级一区二区在线观看一 | 爱爱免费小视频| 国产一区三区三区| 日本在线观看a| 亚洲欧美综合| 国产一区二区久久久| 韩国精品视频| 制服丝袜在线91| 天堂网视频在线| 亚洲综合激情另类小说区| 青青草自拍偷拍| 97se亚洲国产综合自在线 | 成人91在线观看| 在线看的黄色网址| 亚洲专区免费| 热久久最新地址| 日韩一区二区在线| 欧美日韩一区二区三区在线视频| 97精品久久| 成人免费在线视频网址| 欧美电影免费看| 午夜伦理精品一区| 中国av在线播放| 久久精品国产v日韩v亚洲| 一本一道精品欧美中文字幕| 天天综合色天天综合色h| 欧美黄片一区二区三区| 国产精品电影一区二区三区| 人妻少妇无码精品视频区| 不卡的av中国片| 成人免费播放视频| 精品在线亚洲视频| 国产aaaaa毛片| 视频一区国产视频| 人妻少妇被粗大爽9797pw| 在线看片日韩| 加勒比成人在线| 极品中文字幕一区| 国产玉足脚交久久欧美| 欧美成人tv| 超碰人人爱人人| 在线一区免费| 国产另类第一区| 一区二区三区在线资源| 91传媒视频在线观看| 9999精品| 亚洲一区亚洲二区| 亚洲专区**| 精品卡一卡二| 亚洲另类av| 色综合视频二区偷拍在线| 精品一二三区| 亚洲午夜高清视频| 97精品视频| xxxxxx在线观看| 亚洲激情网站| 成人在线免费观看av| 男人的天堂亚洲在线| 一区二区在线播放视频| 蜜臂av日日欢夜夜爽一区| 欧美日韩在线免费观看视频| 午夜精品久久久久久久四虎美女版| 一区二区精品在线| 91精品国产乱码久久久久久久| 五月天综合婷婷| 欧美私人啪啪vps| 一区二区传媒有限公司| 久久综合九色| 手机看片一级片| 国产一区二区在线影院| 四虎永久免费观看| 91麻豆6部合集magnet| 国产高潮呻吟久久| 中文字幕综合网| 久久久久久福利| 欧美视频在线视频| 亚洲综合视频在线播放| 精品国产亚洲在线| 欧美日韩在线中文字幕| 日韩视频免费中文字幕| 免费污视频在线观看| 欧美一级在线亚洲天堂| 日本a人精品| av观看久久| 国产成人ay| 91精品国产毛片武则天| 美女国产一区| 69久久精品无码一区二区| av福利精品导航| 免费看一级黄色| 亚洲妇女屁股眼交7| 国产又粗又猛又黄视频| 欧美一区二区视频免费观看| 污污网站免费在线观看| 中文字幕亚洲一区在线观看| 欧美xxx黑人xxx水蜜桃| 国产精品va在线| 6080亚洲理论片在线观看| 日本在线一区| 亚洲性感美女99在线| 久久国产这里只有精品| 不卡区在线中文字幕| 激情无码人妻又粗又大| 午夜精品一区二区三区电影天堂| 亚洲综合五月天婷婷丁香| 亚洲精品wwww| 在线看女人毛片| 国产女同一区二区| 亚洲性视频大全| 国产夫妻自拍一区| 久久er精品视频| 丰满少妇在线观看资源站| 一区二区三区四区国产精品| 欧美日韩在线视频播放| 亚洲国产三级网| 99热国产在线| 国产欧美在线视频| 亚洲黄色录像| 丁香花在线影院观看在线播放| 久久99精品一区二区三区| 蜜桃无码一区二区三区| 亚洲国产日韩一级| 国产成人a人亚洲精品无码| 国产亚洲aⅴaaaaaa毛片| 96av在线| 动漫一区二区在线| 欧美在线网站| 99精品视频国产| 国产精品毛片无遮挡高清| 日韩综合在线观看| 日韩精品亚洲视频| 成人黄色动漫| 国产伦精品一区二区三区在线| 中文字幕免费一区二区| 日韩欧美国产片| 国产精品污www在线观看| 日韩电影在线观看一区二区| 日韩精品视频在线免费观看| 草美女在线观看| 成人一区二区在线| 红桃视频国产一区| 一起草最新网址| 亚洲精品欧美二区三区中文字幕| 欧美国产一级片| 夜夜嗨av色综合久久久综合网| 久久久久久久| 日韩欧美精品一区二区三区经典| 久久精品亚洲| 国产伦理片在线观看| 色天天综合久久久久综合片| 韩国中文字幕2020精品| 国产精品91在线| 日本久久一二三四| 国产永久免费网站| 综合久久久久综合| 国产激情久久久久久熟女老人av| 久久国产精品首页| 中文字幕一区二区三区中文字幕| 国产一区二区三区小说| av欧美精品.com| 波多野结衣啪啪| 最近免费中文字幕视频2019| 91av一区| 精品国产三级a∨在线| 国产精品911| 五月婷婷激情网| 亚洲欧美日韩在线高清直播| 日本精品在线中文字幕| 一本久久a久久精品vr综合| 国产麻豆日韩欧美久久| 中文字幕一区二区三区人妻不卡| 第一福利永久视频精品| 东热在线免费视频| 成人黄色av网| 亚洲三级国产| 国产精品20p| 91精品国产乱| 末成年女av片一区二区下载| 日本高清不卡一区二区三| 久久99精品久久久久久国产越南| 欧美精品一区二区蜜桃| 国产视频精品一区二区三区| 国产69精品久久久久9999人| 影音先锋成人资源网站| 99国产精品视频免费观看| 日韩xxx视频| 欧美激情精品久久久久久久变态| 欧美wwwsss9999| 欧美成人黄色网址| 亚洲第一主播视频| 成年网站在线| 国产 高清 精品 在线 a| 久久一区欧美| 久久久久久欧美精品se一二三四| 亚洲欧美日韩网| 欧美一区一区| 日本999视频| 亚洲二区在线视频| 免费人成在线观看播放视频| 精品一区二区三区国产| 经典一区二区三区| 97久久久久久久| 久久99久久99精品免观看粉嫩 |