欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

圖表設(shè)計器核心實現(xiàn):數(shù)據(jù)建模、SVG渲染與交互全解析

圖表設(shè)計器核心實現(xiàn):數(shù)據(jù)建模、SVG渲染與交互全解析 diagram-design這個詞前端圈子里應該不陌生——你接手過一個流程編輯器、架構(gòu)可視化工具、邏輯編排平臺或者哪怕只是臨時給業(yè)務方搭一個拖拽畫布都會發(fā)現(xiàn)一個尷尬的事實圖表設(shè)計這事表面看就是畫幾個框、連幾條線但真正做起來數(shù)據(jù)建模、渲染方案、交互細節(jié)、性能優(yōu)化每一項都能折騰掉好幾個版本。這個項目名雖然短但它背后不是一個簡單的畫布Demo而是一整套結(jié)構(gòu)化圖形的可視化編輯基礎(chǔ)設(shè)施。這篇文章我就拿真實項目中做的圖表設(shè)計器來聊從需求拆解、技術(shù)選型到核心模塊的代碼實現(xiàn)和問題排查把能落地的經(jīng)驗一次講透。1. 項目到底要干什么拆解diagram-design的核心需求1.1 圖表設(shè)計器不只是畫布很多第一次接觸這類項目的人會理解偏以為圖表設(shè)計器就是個可拖拽的繪圖白板。實際不是。圖表設(shè)計器解決的核心命題是讓用戶用圖形化的方式編輯一份嚴格的結(jié)構(gòu)化數(shù)據(jù)。打個比方。畫布是表象數(shù)據(jù)模型才是內(nèi)功。用戶在畫布上拖一個節(jié)點、連一根線本質(zhì)是在改一份類似 JSON 的圖結(jié)構(gòu)節(jié)點有哪些、連線的起點終點在哪、每個節(jié)點帶什么業(yè)務屬性。而一個合格的 diagram-designer 必須保證兩件事所見即所得畫布上的位置、連線、樣式能無損映射回數(shù)據(jù)模型可恢復、可流轉(zhuǎn)數(shù)據(jù)可以導出、導入換個渲染器也能還原出同樣的圖。我記得在模擬項目X里一開始需求方一直強調(diào)要好看、要流暢團隊差點就往畫圖工具的方向跑偏了。后來我硬是拉著業(yè)務方過了一遍真正的使用閉環(huán)——從創(chuàng)建節(jié)點、設(shè)置屬性、連接關(guān)系、導出結(jié)構(gòu)化配置他們才意識到自己需要的不是畫板而是一個可視化的圖編輯器。這個認知對齊非常關(guān)鍵直接決定了后面所有技術(shù)方向。1.2 核心功能清單與優(yōu)先級排序不同場景下的 diagram-design 需求差異很大做流程圖編輯器和做網(wǎng)絡(luò)拓撲可視化雖然都叫圖表設(shè)計器重點完全不同。結(jié)合通用情況我把核心功能按優(yōu)先級排一下優(yōu)先級功能模塊說明P0畫布基礎(chǔ)節(jié)點渲染、拖拽、縮放、平移這是地基沒有它一切都免談P0節(jié)點與連線創(chuàng)建/刪除節(jié)點設(shè)置連線起點終點支持連線樣式配置P0數(shù)據(jù)導入導出至少支持 JSON 序列化/反序列化保證圖數(shù)據(jù)可保存可恢復P1對齊輔助參考線、吸附、自動對齊批量操作效率全靠這個P1撤銷重做用戶操作錯了要能回退這是編輯器區(qū)別于畫板的核心標志P2布局算法自動排版功能比如樹形布局、分層布局復雜圖必備P2小地圖圖大了以后定位用的一般放到后期做這里多說一句優(yōu)先級順序直接影響架構(gòu)設(shè)計。如果上來就做布局算法、小地圖把架構(gòu)搞得特別重反而拖慢核心鏈路的推進。我見過不少團隊一上來就往畫布里塞多選、框選、自動布局、版本歷史結(jié)果拖到最后連基礎(chǔ)的節(jié)點拖拽都有 bug。正確的姿勢是先打通數(shù)據(jù)—渲染—編輯—導出這條主鏈路再往上面加輔助特性。2. 技術(shù)選型自研還是用現(xiàn)成庫怎么選才對2.1 自研 or 第三方庫沒有標準答案只要做圖表設(shè)計器第一個問題就是能不能直接用現(xiàn)成庫。市面上的方案我不一一列舉簡單分成三類完全自研、基于通用渲染庫封裝、直接基于完整圖編輯器框架。完全自研所有渲染、交互、數(shù)據(jù)都由自己實現(xiàn)。優(yōu)點是完全可控、不依賴第三方框架體積和性能都能做到極致缺點是工作量大光是一個拖拽的精細度比如縮放后坐標修正、吸附算法就夠調(diào)一陣子的?;谕ㄓ娩秩編旆庋b比如用 SVG 或用 Canvas 渲染庫做底層業(yè)務邏輯和交互自己寫。靈活性高工作量適中這是大多數(shù)項目的務實之選。直接套完整編輯器框架優(yōu)點是功能全、開箱即用缺點是定制深了會很痛苦框架的抽象一旦和業(yè)務模型不一致改起來比自己寫還難受。我在某公司的項目里就吃過直接套框架的虧。當時團隊為了省時間引入了一個完整的圖編輯器框架結(jié)果業(yè)務方要求節(jié)點必須是多層嵌套的復合形狀且內(nèi)嵌表單要實時聯(lián)動??蚣艿墓?jié)點模型根本撐不住最后硬改框架源碼維護成本爆炸。后來重做時干脆基于 SVG 自己搭了一套反而清爽得多。經(jīng)驗之談如果業(yè)務里的圖結(jié)構(gòu)是規(guī)規(guī)矩矩的流程節(jié)點、連線成熟框架能省很多事但如果你的圖有特殊的交互、復合節(jié)點、自定義業(yè)務編排自研的靈活度和可控性是框架給不了的。我接觸過的diagram-design類項目絕大多數(shù)走到后期都是自研或半自研。2.2 渲染方案SVG 還是 Canvas這是繞不過去的技術(shù)決策。兩者特點我整理成一張表維度SVGCanvas渲染方式矢量 DOM 元素位圖繪制節(jié)點數(shù)量幾百個量級還能撐再多就卡上萬個也能流暢刷新交互能力每個元素都是 DOM天然支持事件需要自己做命中檢測、事件管理樣式控制CSS 隨便寫樣式靈活樣式靠繪制代碼控制縮放清晰度矢量無限清晰按像素繪制縮放可能模糊開發(fā)效率心智簡單適合編輯器復雜度高一點適合高刷場景我的判斷是做圖編輯器默認選 SVG。原因很簡單編輯器最核心的是人和元素的交互——節(jié)點要被選中、拖動、高亮、彈菜單SVG 天然用 DOM 支持這些鼠標事件、鍵盤事件、樣式切換都是現(xiàn)成的。數(shù)據(jù)量很大時比如超過大幾百上千個節(jié)點再考慮 Canvas 或者 Canvas 虛擬化方案。當然如果你做的是實時監(jiān)控大屏這種以展示為主、節(jié)點多到爆的場景Canvas 是更合理的。但 diagram-design 的重點是設(shè)計而不是展示這個定位想清楚渲染方案自然就有答案了。2.3 數(shù)據(jù)模型一切交互的中樞圖表設(shè)計器的數(shù)據(jù)模型我建議遵循一個根節(jié)點 兩層結(jié)構(gòu)的設(shè)計思路Graph圖整個圖表設(shè)計器的根數(shù)據(jù)包含全局的版本號、縮放平移視口信息、節(jié)點列表、連線列表Node節(jié)點代表一個可編輯的元素。除了唯一 id 和 position / size 這些幾何信息還要有一個 data 字段用來存業(yè)務自定義數(shù)據(jù)Edge連線代表節(jié)點和節(jié)點之間的連接關(guān)系。關(guān)鍵是它必須記錄從哪個節(jié)點的哪個端口到哪個節(jié)點的哪個端口。數(shù)據(jù)模型設(shè)計得好不好直接決定后面回退、聯(lián)動、序列化的復雜度。我后來的做法是讓所有數(shù)據(jù)都掛在根對象上用統(tǒng)一的狀態(tài)容器管理任何一次操作都通過生成新狀態(tài)來驅(qū)動渲染。這樣一個好處是撤銷重做、多端同步、歷史記錄都變成了狀態(tài)切換的問題而不是在組件里手動改來改去。我放一個最小化的數(shù)據(jù)模型示意TypeScript 風格interface DiagramData { version: number; viewport: { x: number; y: number; zoom: number; }; nodes: NodeData[]; edges: EdgeData[]; } interface NodeData { id: string; type: string; x: number; y: number; width: number; height: number; data?: Recordstring, unknown; } interface EdgeData { id: string; source: string; // 源節(jié)點 id sourcePort?: string; // 源端口 id target: string; // 目標節(jié)點 id targetPort?: string; label?: string; }在實際項目中我看到不少團隊為了省事直接把節(jié)點坐標、樣式、業(yè)務數(shù)據(jù)混在一起也不抽象 Graph。前期看著還行一旦要做選中、框選、屬性面板聯(lián)動、序列化就發(fā)現(xiàn)到處在打補丁。建議一開始就把數(shù)據(jù)模型當數(shù)據(jù)庫表來設(shè)計每個字段職責單一后面會少掉大量重構(gòu)成本。3. 核心模塊實現(xiàn)要點從畫布到節(jié)點到連線3.1 畫布基礎(chǔ)坐標系與視圖變換畫布的第一個門檻是坐標系。屏幕上呈現(xiàn)的內(nèi)容和用戶操作時拿到的鼠標坐標通常不在一套坐標系里。我一般把坐標系分成兩層世界坐標系圖表元素真實使用的坐標系。節(jié)點存的 x/y 是世界坐標和縮放無關(guān)屏幕坐標系用戶看到的坐標系。它等于世界坐標乘以縮放倍率再加平移偏移。畫布放大縮小時節(jié)點的世界坐標不要變只更新 viewport 里的 zoom 和 x/y 偏移。鼠標事件給的是屏幕坐標要轉(zhuǎn)換到世界坐標再去做命中、拖拽計算。轉(zhuǎn)換公式很簡單const worldX (screenX - viewport.x) / viewport.zoom; const worldY (screenY - viewport.y) / viewport.zoom;這個基礎(chǔ)卻極容易踩坑。我遇到過一個經(jīng)典的 bug拖動節(jié)點時節(jié)點跑到鼠標后面越縮放偏差越大。最終定位到問題——拖拽期間混用了屏幕坐標和世界坐標特別是 zoom 不等于 1 的時候一加一減就出錯了。經(jīng)驗是所有落到數(shù)據(jù)模型里的坐標統(tǒng)一存世界坐標所有讀取鼠標位置的代碼統(tǒng)一先轉(zhuǎn)世界坐標再用。3.2 節(jié)點的拖拽、選中與對齊輔助節(jié)點拖拽的交互邏輯拆開其實就三步鼠標按下節(jié)點時記錄起始世界坐標和節(jié)點的起始位置鼠標移動時用當前世界坐標減去起始點得到偏移量更新節(jié)點位置鼠標抬起時觸發(fā)一次快照更新供撤銷重做使用。但真實的拖拽體驗遠沒有這么簡單。要做得順手還得加兩樣東西臨界判定鼠標按下到移動的距離超過某個閾值比如 3px才算拖拽否則是點擊選中。不然每次點一下節(jié)點都會誤拖。對齊吸附拖節(jié)點的時候系統(tǒng)幫它跟附近節(jié)點的邊緣、中心線對齊。實現(xiàn)思路是候選對齊線離節(jié)點邊緣小于某個閾值比如 5px時直接把節(jié)點坐標修正到對齊位置。吸附這個功能看著不起眼卻是編輯器順手不順手的分水嶺。我在項目里專門寫了個對齊線計算工具每次拖拽時找候選對齊線、計算修正量實測下來用戶的排版效率提升很明顯尤其是做流程圖和腦圖這類對齊要求高的場景。3.3 連線交互錨點、貝塞爾曲線與命中檢測連線的設(shè)計比節(jié)點復雜不少。一個完整的連線交互鏈路由三部分構(gòu)成錨點端口、連線路徑、命中檢測。錨點一般定義在節(jié)點邊緣或內(nèi)部的固定位置。連線不是從一個節(jié)點拉到一個節(jié)點就完事而是從一個錨點拉到另一個錨點。錨點模型允許同一個節(jié)點向外拉出多條線而且能區(qū)分這條線是從哪個方向出去的方便后面計算連線路徑。連線路徑的繪制我最常用的是貝塞爾曲線默認用三次貝塞爾曲線控制點根據(jù)錨點方向和目標位置自動計算。這么做的好處是曲線平滑美觀而且方向感強一眼能看出從哪出來、到哪進去。我給一個基于 SVG 的簡化示意// 假設(shè) source 方向朝右target 方向朝左 import React from react; export function BezierEdge({ sourceX, sourceY, targetX, targetY }) { const dx Math.abs(targetX - sourceX) * 0.5; const path M ${sourceX} ${sourceY} C ${sourceX dx} ${sourceY}, ${targetX - dx} ${targetY}, ${targetX} ${targetY}; return path d{path} stroke#8492A6 strokeWidth{1.5} fillnone /; }這種實現(xiàn)方式在可視化類項目里非常通用。要處理的情況還包括連線的 label文字標簽、連線樣式虛線、實線、顏色、以及箭頭 marker。命中檢測是另一個坑。用戶要能點擊連線、選中連線、拖動連線改路。SVG 下path元素默認的可點擊區(qū)域是路徑本身很窄不太容易點中。我當時的方案是畫一條透明的寬 stroke比如strokeWidth{20}stroketransparent墊在真實路徑下面讓透明路徑來響應點擊。這樣既保留了視覺上的細線又給了用戶友好的點擊熱區(qū)。3.4 布局算法放在什么階段做布局算法是個容易過把癮就死的功能。自動排版看起來炫酷但做好很困難。我的建議是如果項目不是以自動生成圖為核心布局算法別放在早期版本。原因很現(xiàn)實——自動布局很難滿足用戶的審美有時候排出來的圖是邏輯正確但怎么看怎么怪用戶最后還是要手動調(diào)。真正需要的場景一般是三種樹形結(jié)構(gòu)比如組織架構(gòu)圖、目錄樹。這類布局用經(jīng)典的樹形遞歸布局就能搞定從上到下逐層排同一層節(jié)點對齊。分層結(jié)構(gòu)比如流程圖、狀態(tài)機??梢杂梅謱硬季炙惴ò压?jié)點按層級分列擺開再調(diào)整連線交叉。自由拓撲比如網(wǎng)絡(luò)拓撲、關(guān)系圖。這個比較復雜一般要上力導向布局模擬物理彈性、斥力、引力讓節(jié)點自動散開。如果在后期必須做一個見效快的自動排版我建議從樹形布局和分層布局入手計算公式和效果可預期也好看力導向布局雖然炫但參數(shù)調(diào)起來很磨人投入產(chǎn)出比要好好掂量。4. 實操記錄搭建一個最小可用的圖表設(shè)計器4.1 項目骨架與依賴準備這一節(jié)我把當初做最小可用圖表設(shè)計器的實操過程完整走一遍。技術(shù)棧我選 Vite React TypeScript加一個輕量的狀態(tài)管理庫。為什么選這套原因有兩個一是生態(tài)成熟寫交互組件方便二是類型定義完善對數(shù)據(jù)模型的約束強特別適合圖表編輯器這種數(shù)據(jù)結(jié)構(gòu)驅(qū)動的工程。項目初始化命令按當時的推進方式大概是npm create vitelatest diagram-design-demo -- --template react-ts cd diagram-design-demo npm install npm install zustand選 Zustand 是因為它在中小型圖表編輯器里的狀態(tài)管理成本最低不需要像大型框架那樣寫一堆模板代碼同時又支持按需訂閱更新對性能友好。真實項目里我更喜歡直接用 Zustand而不是再套一層模型層因為圖表數(shù)據(jù)本身的結(jié)構(gòu)已經(jīng)足夠表達模型了沒必要再包一層。4.2 定義數(shù)據(jù)模型與狀態(tài)容器繼續(xù)往下之前先把數(shù)據(jù)模型寫進代碼。我把 Graph、Node、Edge 的類型定義和狀態(tài)初始化放一起import { create } from zustand; interface Viewport { x: number; y: number; zoom: number; } interface NodeData { id: string; type: string; x: number; y: number; width: number; height: number; data: Recordstring, unknown; } interface EdgeData { id: string; source: string; sourcePort: string; target: string; targetPort: string; } interface DiagramState { viewport: Viewport; nodes: NodeData[]; edges: EdgeData[]; selectedIds: string[]; moveNode: (id: string, dx: number, dy: number) void; } export const useDiagramStore createDiagramState((set) ({ viewport: { x: 0, y: 0, zoom: 1 }, nodes: [], edges: [], selectedIds: [], moveNode: (id, dx, dy) set((state) ({ nodes: state.nodes.map((node) node.id id ? { ...node, x: node.x dx, y: node.y dy } : node ) })) }));這里有一個關(guān)鍵點我反復提節(jié)點位置用世界坐標存儲更新時只做加減不做縮放換算。這樣實現(xiàn)撤銷快照時最簡單至少不用每次快照前先把坐標還原到統(tǒng)一基準快照之間的數(shù)據(jù)口徑始終一致。4.3 畫布組件SVG 渲染與坐標轉(zhuǎn)換有了數(shù)據(jù)層直接到渲染層。畫布組件負責渲染所有節(jié)點和邊、以及把鼠標屏幕坐標轉(zhuǎn)成世界坐標。我當時的實現(xiàn)如下import React, { useRef, useCallback } from react; import { useDiagramStore } from ./store; import { BezierEdge } from ./BezierEdge; export function Canvas() { const svgRef useRefSVGSVGElement(null); const viewport useDiagramStore((s) s.viewport); const nodes useDiagramStore((s) s.nodes); const edges useDiagramStore((s) s.edges); const toWorld useCallback((clientX: number, clientY: number) { const svg svgRef.current; const rect svg.getBoundingClientRect(); const screenX clientX - rect.left; const screenY clientY - rect.top; return { x: (screenX - viewport.x) / viewport.zoom, y: (screenY - viewport.y) / viewport.zoom }; }, [viewport]); const handleMouseMove (e: React.MouseEvent) { const world toWorld(e.clientX, e.clientY); console.log(world coords:, world); }; return ( svg ref{svgRef} width100% height600 style{{ background: #F7F8FA }} onMouseMove{handleMouseMove} g transform{translate(${viewport.x} ${viewport.y}) scale(${viewport.zoom})} {edges.map((edge) { const source nodes.find((n) n.id edge.source); const target nodes.find((n) n.id edge.target); if (!source || !target) return null; return ( BezierEdge key{edge.id} sourceX{source.x source.width} sourceY{source.y source.height / 2} targetX{target.x} targetY{target.y target.height / 2} / ); })} {nodes.map((node) ( g key{node.id} transform{translate(${node.x} ${node.y})} rect width{node.width} height{node.height} rx{6} fill#FFFFFF stroke#C0C4CC / text x{12} y{24} fontSize{14} fill#1F2D3D {String(node.data.label ?? node.id)} /text /g ))} /g /svg ); }這里有個容易忽略的細節(jié)g的transform用的是translate(...) scale(...)順序不能反。如果寫成scale(...) translate(...)縮放中心就從原點變掉了圖會到處亂跑。我當時調(diào)試縮放功能時就被這個問題坑了半小時后來把這個順序固定下來并寫進注釋避免后續(xù)維護再造坑。節(jié)點拖動事件在真實項目里通常要綁定在單個節(jié)點上對rect或整個g加onMouseDown然后配合window級的mousemove/mouseup來完成拖拽。這里不貼全量代碼了但要點就一個拖拽移動的監(jiān)聽不要掛在 SVG 上而要掛在 window 上。否則鼠標移出 SVG 邊界節(jié)點就丟了這是實戰(zhàn)中第一必踩的坑。4.4 連線交互拖線拉出一條新邊除了渲染已有的邊從節(jié)點拉一條線出來也是圖表設(shè)計器的標志性動作。實現(xiàn)思路是開始拖拽時創(chuàng)建一個臨時邊狀態(tài)終點跟著鼠標走松開時若落在合法錨點上則生成正式邊。簡化版的臨時邊狀態(tài)interface TempEdge { sourceId: string; sourceX: number; sourceY: number; currentX: number; currentY: number; }臨時邊渲染時用貝塞爾曲線把 source 端連到鼠標當前位置鼠標松開時找到命中的節(jié)點和端口然后調(diào)用addEdge寫入正式數(shù)據(jù)。這個交互的細節(jié)在端點命中上。我當時設(shè)計了端點的熱區(qū)概念如果鼠標位置離某個節(jié)點的中心很近比如節(jié)點寬高的一半以內(nèi)就認為要連接到該節(jié)點否則是空白區(qū)域取消連線。沒有一個好的熱區(qū)規(guī)則用戶拉線的時候總是差一點接上體驗會非常挫敗。這個熱區(qū)規(guī)則的調(diào)優(yōu)沒有一個萬能參數(shù)但基本思路是一致的給用戶靠近即吸附的手感。4.5 導入導出讓圖數(shù)據(jù)能保存和恢復圖表設(shè)計器做得再好數(shù)據(jù)不能導出就廢了一半。導入導出的兩條曲線第一JSON 導入導出。這個最簡單直接JSON.stringify(diagramData)保存導入時解析賦值回狀態(tài)。注意解析的時候要做數(shù)據(jù)校驗別帶一堆非法節(jié)點進來至少檢查 nodes 不是數(shù)組、id 唯一。第二圖片導出。很多用戶都想要導出 PNG。SVG 做法比 Canvas 簡單把 SVG 序列化成字符串放進Image對象然后繪制到canvas上再toDataURL下載。這里有個常見坑如果 SVG 里有外部字體導出時字體可能渲染不一致更常見的是內(nèi)部用了foreignObject嵌入 HTML導出會白屏。所以導出前最好確保內(nèi)容都是純矢量。我當時做圖片導出時就是把內(nèi)嵌的 HTML 移除改成 SVG 原生 text 來渲染文字才解決了白屏問題。這個經(jīng)驗適用于大部分圖表設(shè)計器項目導出圖片前考慮 SVG 的兼容性避免依賴外部資源。4.6 快捷操作與撤銷重做快捷鍵是編輯器體驗的放大器。至少要支持 Ctrl/Cmd Z撤銷、Ctrl/Cmd C / V復制粘貼、Delete刪除選中。實現(xiàn)上不要寫給每個組件單獨建一個全局快捷鍵監(jiān)聽模塊統(tǒng)一分發(fā)。撤銷重做我推薦兩種方案對比方案思路優(yōu)點缺點快照每次操作后保存整體數(shù)據(jù)快照實現(xiàn)簡單邏輯清晰內(nèi)存消耗大節(jié)點多時頻繁快照會卡命令模式每個操作定義 undo/redo 兩個方法內(nèi)存友好操作粒度細抽象成本高每個操作要寫兩遍邏輯我實際的項目里中等復雜度圖用了快照 節(jié)流的組合只有鼠標松開、鍵盤刪除這類操作結(jié)束時才生成快照拖拽過程中的實時移動不生成快照。這樣內(nèi)存壓力可控代碼也簡單得多。真到了圖譜特別大的場景再考慮命令模式也不遲。5. 常見問題與排查實錄把踩過的坑都攤開說5.1 圖表一多就卡頓到底卡在哪圖表設(shè)計器最常見的性能問題是節(jié)點上百個之后拖拽畫布、縮放開始掉幀交互有明顯的延遲。我排查性能問題的固定套路是三步走先確定瓶頸在渲染還是狀態(tài)。如果純 DOM 渲染卡資源面板里看 JS 執(zhí)行時間如果狀態(tài)更新頻繁導致大量組件重渲染就要看更新訂閱范圍。減少不必要的重渲染。用 Zustand 時每個組件按需訂閱它關(guān)心的字段別把整個 store 都放進去。這個點在 React 下特別有效。SVG 元素數(shù)量過大。幾百個節(jié)點在 SVG 里其實還好上千個就明顯吃力。此時可以選擇對離屏/不顯示的節(jié)點做懶渲染或按視口裁剪只渲染可視區(qū)域。我清楚的記得模擬項目X里節(jié)點一多畫布平移就卡后來定位到問題在所有節(jié)點都在 SVG 里常駐渲染平移時每個節(jié)點都要跟著重排。后來我把節(jié)點分組平移時只更新外層g的 transform內(nèi)層節(jié)點不動性能一下提了上來。這種靜態(tài)內(nèi)容打包成小組動態(tài)位移只動小組外層的思路特別適合 SVG 渲染的圖表編輯器。5.2 拖拽錯位坐標換算別踩坑拖拽錯位是圖表設(shè)計器里出現(xiàn)頻率最高、也最容易讓人迷惑的問題。癥狀是拖動節(jié)點時節(jié)點明顯偏離鼠標位置而且縮放比例越大偏得越多。我在排查這種問題時必查三處事件監(jiān)聽用的坐標是什么如果直接用e.clientX、e.clientY這是屏幕坐標如果用e.offsetX、e.offsetY那是相對于當前目標元素的坐標。兩者都要先轉(zhuǎn)世界坐標。節(jié)點位置和拖拽開始位置是否同一坐標口徑節(jié)點存的是世界坐標拖拽計算如果用屏幕坐標加一減一加就錯位了。CSS transform 有沒有影響坐標換算如果容器不是全屏svg.getBoundingClientRect()返回的 rect 會包含容器位置和縮放所以不要想當然地拿clientX做減法要先減去rect.left。這個排查思路幫我在好多次 Code Review 里一針見血地發(fā)現(xiàn)問題。遇到錯位問題別急著加偏移補償先把坐標口徑理清楚80% 的問題半小時內(nèi)就能定位。5.3 撤銷重做的幾個隱形坑撤銷重做看著簡單做起來全是細節(jié)。最典型的問題有三個撤銷后節(jié)點和連線不同步。比如節(jié)點刪了連到它的邊還在或者撤銷添加節(jié)點操作時節(jié)點沒了邊還懸空。根治辦法是操作封裝成變更集節(jié)點和受影響的邊一起進快照。撤銷時 viewport 要不要恢復用戶把一個地方放大然后撤銷編輯視圖卻跳回之前的狀態(tài)體驗很差。常規(guī)做法是視口不進撤銷快照單獨維護一個純視圖狀態(tài)。連按撤銷過快導致內(nèi)存爆炸。這個好解決限制快照數(shù)量比如只保留最近的 50 個快照超出就把最老的丟掉。還有一個細節(jié)特別容易忽略編輯器初始加載時不要生成快照否則用戶一進頁面按撤銷發(fā)現(xiàn)界面回到了一片空白。解決辦法是初始數(shù)據(jù)先應用完再初始化快照棧的起點。5.4 縮放后節(jié)點位置漂移或文字模糊如果使用 SVG 渲染矢量圖形理論上不會模糊。文字模糊常常是因為用了某些外部字體、或者 SVG 嵌入了foreignObject。解決辦法是文字統(tǒng)一用 SVG text 渲染字體用系統(tǒng)字體棧。節(jié)點位置漂移的問題多半還是出在坐標口徑或 transform 順序上。我之前調(diào)試過一個 bug縮放時節(jié)點位置看起來是飄的后來發(fā)現(xiàn)是scale寫在了translate前面縮放中心從原點變成了 0,0導致整個圖縮放時整體往一個方向跑。修正順序后一切恢復正常。記住transformtranslate(x y) scale(zoom)才是以 (x,y) 為錨點縮放的正確寫法。6. 一點自己的心思圖表設(shè)計器這類項目真正有價值的地方不是堆了多少炫酷功能而是把數(shù)據(jù)模型這個地基打扎實。我吃過的虧里十有八九是前期不重視數(shù)據(jù)模型后期返工補課。節(jié)點、邊、端口、視口這四類數(shù)據(jù)一開始分清楚職責邊界后面加功能都順。還有一個感受想分享做 diagram-design一定要多跟真實用戶一起操作幾輪。你真看用戶是怎么畫圖的會發(fā)現(xiàn)他們根本不關(guān)心技術(shù)選型只在乎拖得順不順、對齊準不準、連線好不好接、撤銷穩(wěn)不穩(wěn)。銷售說的用戶體驗就是這些看起來很不起眼的交互細節(jié)。把這些細節(jié)打磨好才是這個項目最值得投入的地方。如果你正要開始做類似的圖表設(shè)計器我的建議是先用最簡版本打通畫節(jié)點、拉連線、導出 JSON這條鏈路再回去填功能細節(jié)。別一上來就規(guī)劃宏偉藍圖先把一杯水倒?jié)M再考慮裝更大的壺。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91丨熟女丨首页| 人人操av| 91人人网| 国产精品成人网址| 可以看的av| 狠狠狠五月婷婷六月丁香| 久久九九婷婷| 丁香五月激情综合| 26uuu丁香婷婷五月| www.久久爱.com| 国产精品久久久久9999小说| 操操天堂| 天天草天天爽| 五月激情久久| 天天狠狠色| 91丨九色丨白浆秘| 五月丁香婷婷欧美色图视频五月丁香777电影| 天天做天天爱天天玩| 五月天婷五月天综合网在线观| 丁香五月婷婷天堂大香蕉| www.狠狠操| 夜夜夜夜夜骑撸| 99九色视频在线观看| 日本精品人妻无码77777| 99热1| 丁香六月婷婷高清| 青青操avbb| 色婷婷天堂| 成人国产欧美大片一区| 狠狠干,狠狠操| 五月天综合激情网| 99色爱| 激情综合啪啪啪| 亚洲AV无码影院| 怎么样可以看免费的一级av| 伊人综合网站| 99精品视频在线观看| 久久99精品久久久久久噜噜| 噜噜狠狠色综合久| 婷婷刺激综合| 久热 91| 操操操AV| 欧美成人网99网| 亚洲久热| 精品婷婷五| 久久综合中文字幕| 丁香婷婷五月色成人网站| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 五月天色婷婷综合| 97久久久| 国外亚洲成AV人片在线观看| 久操欧美在线观看97| 五月天另类视频| 97色啪| 天天情色综合网| 色婷婷五月基地在线| 婷婷五月丁香综合| 天天舔夜夜操www com| 99在线精品观看99| 婷婷爱综合| 丁香五月婷婷亚洲人| 九九九色综合| 久久婷婷五月国产色综合激情| 日本三级日本三级三级人妇四虎| 亚洲激情AV| 性一交一乱一交A片久久四色| 五月丁香婷婷成人版| 九九伦子片| 99热最新| 香港九九六区八区99| 字幕网AV中文字幕| 中文字幕无码成人电影| 97九色| 91视频精品99| 97人妻碰碰碰久| 无码啪啪| 停停色综合伊人| 开心日韩丁香婷婷五月| 五月丁香婷婷五月| 狠狠操狠狠爱| 久久精品国产AV一区二区三区 | #NAME?| 激情婷婷五月综合| 综合激情五月天| 玖玖国产视频一区| 99秘 在线| 色丁香六月| 99精彩视频| 色色无码| 成人无码精品1区2区3区免费看| 国产精产国品一二三在观看| 热婷婷久| 丁香婷婷综合精品六月初| 九九这里有精品| 超碰在线观看99| 激情五月婷婷五月| 国产欧美大香蕉一区| 亚洲爱婷婷| 超碰伊人碰婷婷五月| pom538精品视频| 色99在线视频| 色噜噜狠狠狠综合曰曰曰| 夜夜干夜夜操| 日本一级一级一级一级| 色婷亚洲五月丁香| 天天摸,天天爽| 婷婷色色播五月天| 9色在线| 久久免费精彩视频| 伊人综合色干| 五月天色婷婷av| 精品成人a v无码内射| 丁香六月婷婷久久综合| 99视频| 亚洲一区二区无遮挡A片| www.色五月.com| 26uuu淫色| 婷婷丁香人妻天天| 欧美大肥婆大肥BBBBB| 97日本在线播放| 成人Av在线大片| 这里只有精品99视频| 丁香六月婷婷综合在线| 久热大香蕉| 国产黄色大片| 婷婷在线播放| 男人天堂99| 五月婷婷激情色情网| 九九无码视屏| 五月丁香影院| 色v综合网| 99久久99热| 婷婷爱五月天人人爱| 91久久综合亚洲鲁鲁五月天| 啪啪色激情五月天| 思思精品久久艹| 日韩综合久久| 日本三级网址| 色五月婷婷色五月| 久久精品凹凸分类| 4399在线观看免费高清电视剧| 五月婷婷真爱激情网| 亚洲日日日| 欧洲区自拍| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 特级操b片| 天天插天天很| 五月丁香啪啪网| 色色色色区| 五月激情综合激情五月| 五月天激情网站| 日本在线视频看se99| 99这里有精品免费| 日韩婷婷| 激情五月开心五月在线视频| 丁香狠狠色婷婷| 五月丁香六月婷精品视频| 原琪琪色影院| 九九99九九99九九99视频网| 婷婷综合成人| 丁香五月婷婷综合精品素人| 五月丁香六月婷婷激情视频在线观看免费 | 狠狠久久婷五月综合色| 久久99热精品a片在线观看| 久久婷婷伊人| 激情小说五月天社区丁香| 五月丁香婷婷综合| 99九九在线视频| 欧美成人网99网| 久热在线中文字幕色999舞| 九九激情综合| 99热免费观看| 91艹人| 色五月激情五月天| aaaaaa片| 国产午夜精品AV一区二区麻豆| 色五月婷婷天天干| 欧洲第一无人区观看| 天天色天天射天天日| 91九色中文| 综合精品99| 另类综合婷婷五月天欧美视频| 超碰日韩成人| 国产裸舞表演WWWW| 亚洲AV另类| 五月婷婷啪啪啪啪| 伊人网啪啪| 五月天综合视频网| 婷婷五月天久久| 9色在线视频| 五月天丁香成人| 日日夜夜干| 色婷婷色综合久久精品V| 成 久久| 野战J办公桌椅H| 天天色,天天操,天天射| 大香蕉视频婷婷| 亚洲综合狠狠艹| 日本在线观看99| 开心五月婷婷激情网| 亚洲精品又粗又大又爽A片| 99爱免费在线观看| 成人精品免费在线观看| 婷婷五月,偷窥偷拍网| 五月婷久久久| 99熟女| 五月人人丁香婷婷五月人人丁香| www.亚洲激情.com| 六月婷婷久久| 天天日天天摸天天| 久久精品日| 五月婷婷成人| 99热这只有| 九九色情网站| 五月婷婷偷拍| 天堂五月婷婷| enecarbon-materials.com污K127封锁请涟系@wip1688 | VA日本视频| 乱岳熟女50岁| 五月婷婷视频| 久久99激情| 丁香婷婷成年| 91狠狠综合久久久| 久久婷鲁| 五月婷婷激情性爱| 国产精品激情五月天色婷婷| 日本综合色色| 欧美日本不卡黄色片| 99热精品在线在线| 五月丁香天天| 肏日网在线看| 久热久| 久色五月| www.超碰在线| 色婷婷aV四虎| 丁香五月婷婷基地| www.婷婷五月| 伊人婷婷激情| 粉嫩av蜜桃av蜜臀av| 99热色精品| 天堂草在线看www| 日韩成人av在线| 激情丁香婷婷| 色欲午夜无码久久久久久张津瑜 | 五月天激情婷婷| 操操操操操电影网| 超碰在线看| 婷婷情色开心五月天99| 亚洲欧美成人在线| www.久热| 亭亭社区五月天| 996热re视频精品视频| 欧美性生交XXXXX无码小说| 婷婷五月天小说网| 六月色色婷婷| 激情文学天天| 日本精品在线噜噜噜| 久久密臀婷婷| 少妇人妻丰满做爰XXX| 激情久久丁香| 深爱婷婷丁香五月激情| 5月色亭亭视频| 九九色院| 色综合久久综合| 久久婷五月天| 一级性爱视频| 激情婷婷色色| 婷婷伊人五月丁香天堂网| 色色色99| www.minyis.com【JT】实力收量可预付QQ2101460746 | 亚洲AV第二区国产精品| 精品九九久久| 91中文狠狠综合| 91色在线/日韩| 成人免费va| 丁六月激情| 五月天丁香网站| www.夜夜爱.com| 性一交一乱一交A片久久四色| 噜啊噜在线| 操一操| 婷婷五月小说色综合| 日韩综合久| ztEJj| 九九精品视频在线观看| 五月丁香六月日逼| 六月婷婷激情小说网| 91干在线| 成人色图情色成人网 www.5b5b5bcom 五月天| 天天射影院| 婷婷久久99| 日韩视频99| 五月天色导航| 婷婷狠狠五月综合| 99re这里有精品手机在线| 五月丁香六月婷婷综合在线| 九九热视频精品2| 大香蕉久久久| 丁香五月天激情四射网| 天天综合网~91| 国外亚洲成AV人片在线观看| 国外亚洲成AV人片在线观看| 99热首页在线30| 中文字幕av在线| 91久久综合亚洲噜噜成人在线 | 欧洲激情五月天婷婷| 大香蕉五月丁香| 狠狠99| wwww.色婷婷| 五月激情综| 天天爽成人综合网站| 婷婷在线中文字幕| 久婷婷色| 亚洲激情97五月天| 婷婷色婷婷| 色五月综合| 五月婷婷开心综合| 99干在线视频| 婷婷五月丁香A∨| 久草五月丁香婷婷综合| ww超碰在线| 丁香婷婷五月人体| 中文字幕在线不卡| 久久综合五月天| 射久久丁香五月| 丁香婷婷色色| 99在线爽| 亚洲情a| 狠狠操狠狠干综合| 激情五月婷黄版| 亚洲最大在线| 桃色成人网| 丁香五月色情av| 亚洲色五月婷婷| 9人人操人人看| 亚洲综合字幕色色| 色五月六月婷婷| 五月天 另类图片| 丁香五月天在线| 99无码| 久久久91| 亚洲妇女熟BBW| 狼人伊人干| 任你搞网站| 丁香六月婷婷久久综合八月| 婷婷五月天综合色| 99ri在线| 高清a片基地| 日亚二欧美| 播播网色播播| 激情玖玖综合网| 色噜噜夜夜夜综合网| 97色婷| 丁香五月天精品| 五月婷婷五月| 99久久国产宗和精品1上映| 99ER热精品视频| 9热在线视频精品| 五月婷丁香| 五月丁香久久久| 综合啪啪| 99热在线观看| 久久多色| 色色色9| 成人在线日韩| 日韩AV中文字幕在线| 亚洲色五月| 激情综合六月| 狠狠干综合| 久婷首页| 丁香五月亚洲天堂| 婷婷丁香在线| 92国产福利| 精品九九视频| 99热97| 91伦| 亚洲99在线视频| 久久9视频欧美| 91婷婷视频| 欧美日韩一a.无| 天天色天天爱天天爱天天爱y| 99热在线精品观看| 99re热在线视频观看| 五月天婷婷网站| 婷婷五月天堂| 天天综合91入口| 六月婷婷色五月| 影音先锋一区| 亚洲AVwwwwwww| 国产FREESEXVIDEOS性中国| 一起操 91N.com| 操人妻90p| 久久多色| 九九热精品99| 国产日韩亚洲欧美在线观看| 中文字幕黄色片| 日本久久超碰| 开心五月激情网| 久久涩视频| 深夜婷婷五月丁香| 狠狠干狠狠色| 丁香五月在线伊人| 欧美在线视频99| 激情视频网址| 五月丁香啪啪网| 涩涩婷婷五月| 五月婷婷六月丁香在线视频免费在线观看| AV片在线观看| 99视频这里有精品免费观看| 丁香婷婷综合激情五月色| 九九99九九99偷拍视频免费看| 色五月在线观看| 成人.在线日韩| 激情99。| 国产毛片精品一区二区色欲黄A片 欧美交换配乱吟粗大25P | 婷婷丁香五月综合激情小说| 欧美黄色一级录像| 影音先锋 婷婷| AA片在线观看视频在线播放| www.天天干.com| 99热网站| www.五月天婷婷.com| 色综合久| 激情婷婷五月| 99操视频| 婷婷五月天最新综合你懂的| 99热精品中文字幕| 色五月激情问网站| 伊人综合网站| 色5月婷婷| 五月婷视频| 五月婷护士| 丁香激情六月天婷婷| 少妇AB又爽又紧无码网站| 【乱子伦】黄色| 欧美性爱五月天| 午夜色色色极品视频| 成功精品影院| 色五月激情综合| 色色色色色色综合网| 色青五月天| 久久五月婷天天干| 丁香五月影院| 丁香婷婷六月激情文学 | 97福利视频| 无码se| 91狠狠综合久久久| 在线观看玖玖资源免费观看| 丁香六月婷婷社区| 99ri在线| 国产精品久久久99视频| 99精品视频在线观看| 偷拍视频五月天| 超碰无码老师| 久热一本| 99色丁香婷婷综合网| 大香蕉色婷婷伊人在线| 五月天色婷婷综合| 国产日批视频免费播放| 5月丁香美女影院| 97成人超碰免| 国产精产国品一二三在观看| 99久热| 五月丁香久| 久久丁香五月| 五月丁香综合| 91色吧网| 五月天开心色情网| 丁香婷婷性爱| 九九黄色网| 在线亚洲综合网| 丁香五月成人社区| 婷香五月激情视频| 色人久久| 欧美大肥婆大肥BBBBB| 久久人人九| 人人综合久| 亚洲熟妇AV乱码在线观看| 色五月婷婷色五月婷婷色五月婷婷| 日熟女| 激情综合五月婷婷| 日亚二欧美| av网址在线| 九九一区| 婷婷久久五月天| 99久久成人| 亚洲婷婷基地| AV成人在线网站| 色天堂A| 亚洲五月天综合| 97超级操操| 婷婷五月天成人网| 伊人久久五月天综合| 九月综合| 大香蕉久久久久久久久| 伊人日日干| 国产亚洲色婷婷99精品| 五月天婷婷7米| 亚洲av成人在线| 亚洲黄色操逼| 色婷婷五月成人网| 五月情涩综合婷婷| 丁香九月激情| 侠女刀之记忆电影在线看免费| 五月婷婷香蕉| 亚洲婷婷五月天激情| 91狠狠色丁香| 欧美经典片免费观看大全| 秋霞少妇AV网站| 婷婷六月成人| 五月丁香综合激情网| 日韩aaa| 这里只有精品视频在线| 五月丁香花开综合网| 欧美激情丁香五月| 1024操逼视频| 色五月婷婷天堂| 欧美日本免费一道免费视频| 中文av网站| 色色无码| 婷婷五月色天| 99re思思久久| 五月天婷婷丁香六月| 久久视频这里都是精品| 丁香婷婷六月婷婷六月婷婷六月婷婷| 91丨九色丨白浆秘| 爱狠射| 色婷婷激情五月天丁香| 国产人妻人伦精品一区二区| 五月色色网| 欧美激情丁香五月| 婷婷深爱五月丁香| 天天日人人| 另类的婷婷| 五月开心深深爱激情综合| 这里只精品热在线18| 色色色婷婷五月| 天天久久综合| 99视频在线| 97人操| 青青操avbb| WWW,婷婷,COM| 亚洲视频一区| 丁香色五月婷婷17C| 五月天婷综合| 久久狠色噜噜狠狠狠狠97| 天天五月香欧美| 天堂AV三级| 亚洲综人色综网| 伊人久久99| 激情四射五月天| 淫视馆aV二区一区| 99热在线爱| 久色视频在线| 免费AAAAA网| 久久天天天| 五月伊人综合| 五月婷色丁香| 亚洲va久久久噜噜噜久久天堂| 秋霞少妇AV网站| 婷婷五月丁香亚洲| 无码动漫AV| 欧美日韩成人高清在线| 天天色官网| 色99在线观看| 天堂网亚洲色图| 久婷婷色| 五月丁香六月激情综合| 国产69久久久欧美黑人A片| 婷婷色色五月| 色狠狠狠干| 激情综合婷婷| 99啪啪视频| 欧美综合五月丁香六月婷| 久热精品视频| 色婷婷久久9.com| 99成人小视频| 91人无码久久久久久| 婷婷综合五月色播| 色135综合网| 欧美色综合天天久久综合精品| 超碰在线成人| jiujiuxiangjiaowang| 丁香五月婷婷亚洲另类| 狠狠色色| 天天干天天爽天天操| 久久婷婷视频| 婷婷精品视频| 久久综合最新网址| 91偷拍视频| 丁香五月天婷婷久久综合| 另类激情五月天| 五月天婷婷基地综合网| 操骚货在线| 丁香五月开心七月| 久久激情五月天| 激情综合综合综合| 亚洲色网址| 婷婷深爱五月天| 丁香五月丐人妻| 精品久久99| 五月天婷婷涩涩| 激情av在线| 人妻丰满精品一区二区A片| 亚洲 25P| 青草视频在线观看视频| 五月丁香婷婷激情视频| 婷婷丁香花五月天| 双性美人被调教到喷水A片| 久热这里只有精品66| Www.久久| 色区久久| 色丁香五月综合网| 五月天操逼网| 天天操夜夜操| 欧美婷婷综合| 五月综合婷婷久久在线| 类似婷婷激情综合网站| 欧美色男人网站| 日韩久久视频| 色五月天在线观看| 玖玖在线视频| 99亚洲视频| 丁香五月婷婷激情123| 棕合影院色色| 天天操夜夜操| 婷婷久热| 噜一噜在线| 色五月,com| 六月婷婷深深爱| 天天插天天日| 北条麻妃伊人 | 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 六月激情婷婷| 婷婷丁香人妻天天久久| 五月丁香综合久久| 激情综合九月| 4399欧美另类视频| 天天摸天天日天天舔| 九九99精品| www.97碰碰com| 丁香五月天AV| 新激情五月天| 狠狠操综合| 五月天婷婷乱论小说| 91色色五月天| 操逼福利视频| 九九99九九99偷拍视频免费看| 大香蕉在线观看9| 久久有码| 熟妇内谢69XXXXXA片| www.久久爱| 超碰在线9| 4399欧美另类视频| 婷婷五月激情天| 久久久久久久久久久久久久久久一道本| 婷婷五月丁香五月丁香| 六月丁丁香| 婷婷婷五月香蕉| 婷婷五月丁香五月| AV操操操| 无码 av电影| 五月丁香六月婷婷色| 337p大胆噜噜噜噜噜91Av| 激情五月婷婷综合| 丁香六月激情| 99超级碰碰| 日韩无码亚欧无码| 人碰人人人玩91| 亚洲乱码日产精品BD| 色一情一乱一乱一区91Av| 激情丁香五月婷婷| 久久伊人五月天| 丁香五月激情鲁| 99操碰| 97九色视频| 丁香五月婷婷亚洲综合精品| 91狠狠色丁香婷婷综合久久| 五月天丁香婷| 五月婷丁香| 丁香六月婷婷激情综合| 丁香五月区| 亚洲无码播放| 黄网在线播放| 国产丁香五月天婷婷| 亚洲黄色影视| 思思热99er在线视频| 国产一区二区三区影院| 九月婷婷丁香| 婷婷激情97| 九九热精品| WWW.久久久久久久| 婷婷五月天伊人| 开心四月婷婷在线色播播| 激情五月婷婷| 九九热在线视频观看| 1区2区视频| 久久久激情| 欧美怡红院黄站| 五月天激情网站| 五月丁香91| 人人摸人人干| 色视五月天婷婷| Www.se.久久| 日韩黄色中文字幕| 国产日韩精品SUV| 综合久久激情久久| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 色五月色五天色情网址| 九九色院| 五月开心婷婷极品激情| 久久狼人天堂| 五月丁香啪啪激情| 婷婷伊人激情婷婷| 天天综合在线网| www999日韩精品| 日本综合久久| 操草草草| yellow视频在线观看91| 五月婷婷综合激情网| 五月丁香婷婷激情| 欧美日韩国产一区| 国产亚洲精品AAAAAAA片 | 国内裸舞二区| 激情婷婷丁香色五月| 99综合视频一体| 五月激情婷婷六月丁香| 亚洲无码成人网| 久久免片| 婷婷五月激情五月激情| AV伊人青草丁香六月| 热99玖玖99玖玖99九九| 五月婷婷大香蕉| 久久五月网| 97干视频在线| 色天堂婷婷| 91超碰人人操| 思思热久热| 亚洲激情图文小说| 天天草女人| 亚洲高清在线| 俺去也五月天婷婷| 丁香五月偷拍| 4438国产免费看| 天天拍夜夜撸| 强伦轩人妻一区二区电影| 狠狠五月婷婷| 久久精品99久久| 丁香五月香蕉在线| 久久婷婷视频| www.99在线| 99爱爱网| 操操操AV| 99久久户外勾搭| 五月丁香久久综合| 99热国产这里只有精品| 国产精品一区在线观看你懂的| 丰满少妇乱A片无码| 午夜免费试看| 99热成人精品网站| 久久六月婷婷| 丁香五月天天日| 婷婷五月天伊人| 亚洲视频在线观看| 综合五月草| 五月激情啪啪啪| 在线伦子99热| 丁香五月香蕉| 成人va在线播放| www.色综合.com| 丁香六月伊人| 精品香蕉99久久久久网站| 婷婷色亚洲| 久久婷婷欧美| 中文字幕按摩做爰| 狠色狠色狠狠色综合网| 九九色影视| 久久久欧美精品sm网站| 天天干夜夜谢| 久久爱综合| 五月精品免费XXX| 色六月婷婷| 六月丁香六月婷婷欧美| 色综合99| 欧美日本高清视频99| 色激情五月| 丁香婷婷五月激情四射网| 久热这里精品免费| 成人午夜天| 91激情五月开心| 97人人干视频| OYIWbGcPu8H| 超碰免费人人肏| seuuu婷婷| 丁香伍月婷电影全集| 美女婷婷激情亚洲| 丁香六月丁香婷婷激情| 五月J香蕉婷婷| 在线不卡视频| 2018国产大陆天天弄| 99热免费| 亚洲精品无人区| 激情人妻蜜夜系列区| 欧美情色电影一区二区| 99爱操| 91色综合久久| 丁香六月天婷婷| 久久综合55| 六月丁香网| 中文字幕黄色片| 伊人五月天在线| 婷婷在线视频| 色人久久| 影音先锋91在线资源站| 国产毛片精品一区二区色欲黄A片| 色婷婷五月天激情在线观看| 9久久狠狠的| 人人干人人操人人摸| 综合丁香婷婷五月天| 婷婷激情九月| 啪啪色激情五月天| 五月婷婷丁香伦理网| 色情久久久| www,五月丁,com| 天天色天天色天天色天天色天天色| www色综合亚洲92| 色情丁香五月天| 色噜噜狠狠色综无码久久合欧美| 久久久精久人妻| 国产精品视频网| 夜夜夜夜夜操| 婷婷五月色网| 九色PORNY自拍成人精彩视频| 91精品电影18T| 成人婷99最新| 国产超碰在线| 激情綜合網址| 婷婷五月丁香激情| 中文字幕成人| 五月色导航| www.91AV.com| 五月丁香激情啪啪| 婷婷五月色播网| 国产精品天天狠天天看| 激情五月色婷婷| 久久只有精| www色哟哟| 91综合色| 五月激情六月综合| 亚洲综合色成丁香五月色| 99热欧美精品| 激情综合5月| 丁香五月激情六月综合| 99∨VTV| 夜夜爽天天爽| 色综合av超碰| 五月色色色| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 狠狠爱五月婷婷| 超碰永久在线| 久久精品色| 五月欧美色色五月| 毛片新网地| 欧美日本免费一道免费视频 | 亚洲这里只有精品| 激情五月天丁香| 亚洲va久久久噜噜噜久久天堂| 欧美大香蕉视频| 五月综合婷婷久久在线| 久9视频| 中文婷婷狠狠| 日日操夜夜爽白洁| www.色婷婷| 成人在线视频网| 五月天婷婷亚洲| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 婷婷五月丁香五月| 国产AV不卡福利| 国产五月天激情小说| 伊人网色婷婷五月天| 天天精品视频免费观看| 丁香五月之久操视频| 五月婷婷色| 亚洲热综合| 97在线观看| 99热自拍| 亚洲综合另类| 日韩在线视频9色| 亚洲操人| 激情小说五月天| 丁香五月亚洲综合| 天天在线天天综合网色| 婷婷精品免费久久| 人妻操日日| 久久老码第一| 五月天精品视频| 99色五月| www一区二区三区| 国产成人精品一区二三区熟女在线| 六月婷久久| 激情五月天电影| www.91av.com| 婷婷色五月天在线观看| 五月婷婷亚洲| 噜噜噜精品欧美成人在线观看| 密臀久久| 精品无码人妻一区| 99色干| 丁香五月婷婷香| 国产精品国产| 欧洲激情精品婷婷| 9色操| www.夜夜騎夜夜狠| 欧美性生交XXXXX无码小说| 天天操夜夜夜夜爽| 超碰在线成人| 婷婷五月AV| 丁香九月综合| 99九九玖玖| 五月天婷婷五月| 午夜天天精品视频| 天天干天天 亚洲| 9久热精品在线视频| 天天色爽| 精品一二三区久久AAA片| 超碰操网| 九九热超碰| 精品五月视频婷婷在线观看| 天天色综网| 开心婷婷五月天综合| 亚州操人在线视频| 这里只有精品偷拍| 99热只有| 亚洲 精品 综合 精品| 色综合五月天| 婷婷在线午夜| 亚洲五月六月婷婷| 91精品综合久久久久久五月丁香 | 日韩色色小视频| 五月丁香天堂网婷婷| 99热中文字幕久久| 狠狠久久婷五月综合色| www.开心激情| 另类综合婷婷五月天欧美视频| 香蕉国产2013| www.99热这里精品 | 丁香六月久| 影音先锋综合网| 这里只有精品视频| 九九综舍久久| 国产 码在线成人网站| 他改变了拜占庭| 婷婷伊人五月天| 丁香婷婷综合五月天| 激情涩播| 久久久月丁香| 欧美三级韩国三级日本三斤| 天天操天天操天天操天天操天天操 | 99精品热| 人妻在线中文字幕久久| 香蕉AV福利精品导航| 久久深爱激情网| 亚洲人人艹| 日本婷婷色日| 九九热黄色| 成人片黄网站色大片免费毛片| 伊人久久五月天| 九九99九九精品免费 | 2015在线中文字幕| 色五月色综合| 久色88| 婷婷久久色| 五月天狠狠干| 五月 成人 婷婷| 丁香五月综合久久| 99热精品综合| 99er精品视频| 久久激情五月| 丁香五月婷婷av| 狠狠干 狠狠操| 六月丁香五月天| 最近免费中文字幕大全高清大全1| 99ri精品在线| 狠狠综合网| 精品一区二区三区四区五区六区介绍 | 日韩精品VIP| 青草激情综合| 婷婷爱综合| 婷婷五月综合免费在线| 久久婷婷影院| 五月婷婷九月婷婷九月婷婷| 欧美视频五区| 九九亚洲天堂| 开心五月激情网| 天天操天天操| 亚洲天堂啪啪| 桃色五月婷婷| 婷婷91| 五月天婷婷丁香蜜桃91| 婷婷精品综合| 大香久久综合网| 九九热精品在线| 噜噜噜噜综合在线| 婷婷无码视频| 亚洲啪| 五月婷婷啪啪| 99热都是精品| 99视频精品8 | 九九久久9 9在线观看| 五月婷婷真爱激情网| 婷婷激情综合无月| 另类视在线| WwW色婷婷| 中文字幕av久久爽一区| 日日夜夜小色哥| 国产亚洲在线| 国产成人AV在线| 91操在线视频| 99在线视频精品| 色婷婷9| 91丨九色丨老农村| 婷婷娌伦网| 九九热在线观看6| 国产精品视频网| 久久综合久色欧美综合狠狠| 婷婷少妇激情| 九九99精品视频在线观看| 色婷婷丁香五月观看| 丁香五月香蕉| 九月婷婷综合网| 91日在线视频| 黄桃AV无码免费一区二区三区| 国产成人av在线播放| 亚洲激情综合免费| 少妇丁香婷婷 | 天天日人人| 成人精品在线| 99干免费视频| 久久小说网| 五月丁香综合啪啪| 亚洲色五月| 亚洲aV写真天天综合网久久| 99亚洲大片精品永久在线观看 | 久色五月| 99热日本| www.精品99| 欧美噜噜噜草| 色五月婷婷激情基地| 人人人操 超碰| 99操99| 综合久| 99这里| 99视频在线精品| 色五开心五月五月深深爱| 天天日天天久久青青| 9这里只有精品| 99精品丁香五月| 99热99这里只有精品| 久久99人人| 亚洲激情另类| 激情五月天在线观看婷婷| 开心婷婷五月| 99er久久| 伊人成综合五月婷婷| 九九热99在线视频| 婷婷五月欧美AA片免费| 中文字幕av网站| 久久久香港| 婷香狠狠爱五月| 色五月婷婷影院| 99精品在线观看视频| 中文资源在线a| 婷婷无码视频| 九九色热| 色之综合网| 婷婷色影院| 九九视频这里是精品五月| 激情www.98com| 天天舔天天摸天天透| 婷婷六月综合激情| 美女五月狠狠| 色爱99| 色色色色网| 99精品在线观看| 色欲五月丁香| 超碰色女| 亚洲欧洲午夜成人精品av| 丁香五月婷婷狠狠色| 大波美女VA网站| 激情五月天免费视频| 激情文学五月丁香六月婷婷| 婷婷综合五月| 成人丁香五月| 日韩中文字幕| 色五月激情问网站| 久久久.COM| 婷婷五月天va| 久久性爰视频这里只有精品| 婷婷99狠狠| 丁香六月综合激情| 国产精产国品一二三在观看| 丁香色五月AV在线| 婷婷午夜精品久久久| 99色这里| 九九综合久久| 大香蕉久久婷婷| 99精品网| 色婷婷色人人射| 欧美天天爽| 五月婷婷丁香啪啪| 久综合4| 情色五月天网站| 五月激情小说| 俺去啦综合网| 狠狠狠人妻| 中文人妻主播久久| 激情五月天色网站| 在线视频婷婷| 久久免费试看120秒| 91色综合| 天天天天天天天操| 天堂网啪啪| 免费观看欧美成人AA片爱我多深| 51精品国内探花| www.婷婷| 婷婷五月激情天| 激情五月综合| 丁香五月狠狠在线观看| 久99久在线| 性99网站| 开心五月激情网| 操逼视频网址| 九九Av| 五月婷婷开心丁香| 五月综合久久| 99九九这里有免费视频| 91精品久久久久久| 亚洲成人在线五月天| 五月丁香福利| 91免费啪视频| 五月天激情小说婷婷| 9|在线观看视频| 五月六月播婷婷| 5月婷婷性视频| 久久99久久久久久| 97超碰9久热婷婷热| 色五月激情视频在线综合| 五月六月伦理| 久久A极片| 九九热中文| 丁香六月五月天| 午夜天堂一区人妻| 丁香伊人网| 五月天婷久精视频| 亚洲六月综合激情久久下卡| 婷婷操超碰| 激情婷婷五月基地| 六月丁香网| 婷婷九月丁香久久| 99精品无码网站| 激情五月天综合| 色噜噜狠噜噜视频| 超碰人人干| 五月丁香婷婷综合网| 五月天成人免费视频| 日本熟妇乱妇熟色A片蜜桃| 99视频精品| 五月丁香六月婷婷色情| 九月婷婷在线视频| 亚洲精品99| 99热日本精品| 色五月婷婷激情五月| 免费观看的av| 色色色色色色色色五月先| 亚洲五月天狠狠| 北京熟妇搡BBBB搡BBBB| 黄色三级日本| 天天爽天天摸| 成人无码髙潮喷水A片| 99视频这里只有免费精品| 五月婷婷说| 欧美特大片黄| 五月色导航| 欧美婷婷五月丁香| 日本九九视频| 久热黄色| 97视频91| 婷婷大乡焦噜噜| 操97免费超级视频| 五月丁香花视频| 亚洲av成人电影在线观看| 精品怡红九九九| 色五月综合激情网| 色婷婷成人在线| 色五月综合网| 久久99激情| 99在线免费观看| 99久热| 玖玖资源在线视频| 女婷久久| 99免费| 影音先锋综合网| 婷婷爱五月| 91久久电影| 色爱综合网| 日韩人妻在线观看| 久99久精品视频| 综合久久六月| 综合网啪| 综合久| 五月婷婷综合在线视频| 久久久中文| 天天日天天摸| 欧美性做爰大片免费看办公室| 一区二区三区视频| 日本久久精品18| 人人爽人人爽人人爽人人爽| 婷婷综合在线| 狠狠干狠狠操狠狠爱| 深爱激情网五月| 激情床戏| 国精产品一区一区三区免费视频| 日韩淑女人妻luan伦激情精品一区二 | 婷婷丁香五月天小说| 中文中文在线| 狠狠色噜噜狠狠| 九色综合五月天婷五月| 深爱婷婷丁香五月激情| 操逼巨乳91| 五月丁香综合网| 九九av| 九九视频在线观看视频6 | 天天精品视频在线观看视频| 色婷婷丁香A片区毛片区女人区| 中文无码精品一区二区三区| 91丨九色丨老熟女激情| 丁香久久综合| 久9久9久9久9久9久9| 欧美日韩成人在线| 丁香五月婷婷色| 久久婷婷国产| 欧美25p| 丁香五月在线视频黑人| 九伊人网| 婷婷色色欧美| 丁香色色色| 日韩av手机在线观看| 成年人最刺激的综合网| 九九九热精品| 中文字幕一色哟哟哟哟| 婷婷五月天成人网| 天天爱天天日| 五月天色软件| 综合色色网| 五月丁香婷中文字幕| 99小视频在线观看| 婷婷五月天黄色| 玖玖福利视频资源| 啪啪综合| 粉嫩AV久久一区二区三区| 婷婷五月天高清无码| 丁香五月天导航| 日本nghangse中文字幕| 日韩成人AV在线| 欧美综合婷婷网| 欧洲亚洲免费视频9|