欧美成人午夜精品久久久,国产?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
返回資訊列表
五月狠狠| 美日韩成人| 天天天干夜夜夜操| 色色色99| 国产乱子轮XXX农村| 久综合网| 色婷婷久久9.com| 久久久亚洲成人无码A片| 五月天婷婷Av| 色五月天丁香| 99热日| 色高清无码视频| 丁香婷婷在线| 天天爽天天干天天| 色五月天综合网| 五月丁香六月婷综合成人综合| 欧洲激情五月天| 婷婷五月六月激情| 六月丁香久久| 激情涩播| 婷婷久久五月| 丁香激激情网| 亚洲精品亚洲人成人网| 99超超碰| 婷婷色情网| 久久五月天激情婷婷| 成人九九视频| 亚洲六月色婷婷| 中文字幕成人| 91啪啪啪啪| 色婷婷久久| 婷婷丁香五月视频| 色色色色色色色色色色色色色97| 99婷婷| 五月丁香婷婷色播无码| 成人精品一区二区三区四区五区 | 婷婷欧美| www91色网站| 五月天婷婷免费| av在线超清中文| av操一操| 噼里啪啦在线观看免费完整版视频| 91女人18毛片水多国产| 人人爽在线视频综合网| www.9797国产| 亚洲AV成人精品网站在线播放| 日韩在线观看亚洲| 天天爽综合网| 欧美性生交XXXXX无码小说| 婷婷五月六月丁香| 五月天婷婷导航| 久草狼人| 大香蕉久久伊人网| 激情婷婷综合| 91爱啪啪| 99热插| 日韩狠狠色婷婷| 综合成人小说婷婷| JAPANRCEP老熟妇乱子伦视频| 微拍92| 久久五月婷| 久久99色色| 武则天精品久久| 九色综合网| 欧美色99| 婷婷 丁香 精品| 蜜臀AV在线观看| 成人免费在线电影| http://www.sd-xiangsu.com/| 亚洲色五月| 日韩啪图| Jh7Uf088VHafNm| 五月丁香色综合| 无码AV免费精品一区二区三区 | 午夜丁香| 大香蕉精品视频| 五月天啪啪| 影音先锋女人AA鲁色资源| 墨西哥毛片内射精| 五月在在观看| 99久久久久| 伊人网啪啪| 亚洲综合色网站| 久久999久久999久久999久久| 免费观看全黄做爰的视频| 草一草avb| 九九热思思| 久久AV无码精品人妻系列试探| 丁香色综合| 婷婷色日本| 亚洲午夜AV| 99在线播放| 1024在线一区| 天天肏天天插| 这里只有精品免费视频| 狠狠色丁香婷婷五月| 午夜精品777| 亭亭五月色男人| 91视频人人做97| 人人操人av| www.99视频| 97综合在线| 这里只有精品视频| 91九色国产熟女| 色五月婷婷丁香五月| 五月网站| 久久综合热17c| 91狠狠色丁香婷婷综合久久精品| 中文字幕不卡+婷婷五月| 九九这里有精品| www.99.色| 婷婷五月天激情综合| 26uuu精品国产| 亚洲色激情| 五月天综合在线观看视频| 玖久久网站| 亚洲99视频| 狠狠操狠狠爱| 99re6热在线精品视频播放速度| 4438激情网| 四射综合网| 99无吗| 一本色道久久综合狠狠躁一二三| 99热在线中文字幕| 国产,欧美,学生妹,视频| 婷婷AV丁香| 91九色精品熟女内射| 色播综合| 五月天啪啪| 九九99九九精品免费| 狠狠艹狠狠艹| .精品久久久麻豆国产精品| 综合久久婷婷五月丁香| av亚洲国产小电影| 欧美婷婷色五月| 少妇性BBB搡BBB爽爽爽视頻| 亚洲综合视频天天精品| 色五月天在线观看| 色9色| 五月婷婷六月丁香| 青青福利网| 丁香婷婷欧美综合| 亚洲最大视频| 丁香五月综合婷婷| 午夜69成人做爰视频| 天天色爽| 9999热在线| 五月婷婷丁香在线| 色色九九五月天| 五月婷婷综合在线| 婷婷成人网五月天| 国产婷伊人| 夜夜撸日日骑| 激情九色| 99人人干| 九九精品视频在线6| 五月丁香六月停停停| 99re这里只有精品视频了| 婷婷五月色播天| 午夜丁香五月天综合| 伊人激情网| 天天综合精品| 婷婷,五月天,丁香,第一| 天天日天天插| 激情五月综合网最新 | 另类国产欧美视频| 久99综合婷婷| 婷婷丁香人妻| 狠狠久综合| 大香蕉久久久久| 色色五月天婷婷| 91碰碰| 婷婷基地成人五月天| 丁香五月天资源网| 91成人视频| 五月激情综合网| 五月天婷婷久久综合| 99情色五月天| 日韩aaa| 激情五月天之五月婷婷| 99精日本久久| 色玖玖爱| 成人丁香色| 久久婷婷网站| 大香蕉院线| 欧美在线视频9| 97精品欧美91久久久久久久| 五月天婷婷色小说| 激情综合网五月丁香| 久久久久久欧美精品se一二三四| 色五月综合激情| www.五月天婷婷| 久久人妻精品| 丁香五月婷婷AV在线| 婷婷操逼| av在线观看网址| www.操.com| 五月天电影网| 日韩啪啪视频| 欧美成综合在线观看| 亚洲无码成人| 99久久婷婷国产综合| 亚洲黄色影视| 欧美色色色色色色色色色色| 日日做天天操夜夜爽| 六月婷婷最新网址| 日本久久爱| 国产免费AV网站| 97色婷婷| 91超级碰碰碰| 九九热这里| 婷婷四月 成人 狠狠干| 五月激情婷婷国产精品久久久久久| 五月婷婷中文| 精品无码99| 另类天堂| 五月天婷婷亚洲| 婷婷久久久| 久色国产| 日本丁香五月婷婷| 九月丁香八月婷婷久久综合久97| www久视频com| 婷婷五月天伊人网| 丁香六月激情综合| 丁香五月丁香伊人| 久久人妻久久久久| 玖玖五月| 99色爱| WWW.99热| 九九激情| 婷婷五月色网| ,99视频久久| 操日视频| 去色色五月天| 超极99精品| 色综合激情| 五月丁香六月婷婷网| 99久久99热| 五月丁香婷婷婷激情爱爱| 丁香六月激情综合| 婷婷综合视频| 国产激情在线| 成人 AV播放| 久久伊人大香蕉| 五月丁香色婷婷色| 99久在线精品99re8| 五月婷婷高清| 久久婷婷色情7777网站| 伊人五月综合网| 五月婷婷av在线| 五月丁香五月综合欧美| 久久99网| 嫩草乱码一区三区四区| 五月婷婷狠狠干| 激情小说婷婷小说| 色情五月天小说| 丁香五月激情综合婷综| 91狼友视频在线观看| 99热在线播放| 色色激情五月天| 九九精品免费| 婷婷五月天播播| 亚洲 精品 综合 精品| 色碰碰| 色99免费视频中文| 色色网91| 97人人操人| a性生活久久无| 99精品网| 黑人糟蹋人妻HD中文字幕| 久/久精品99看9| 亚洲综合草草| 色婷婷操逼| 九九热免费视频| 狠狠色噜噜狠狠狠888了| 5月婷婷综合| 五月天社区| 99久久综合网| 日本一级黄色电影| 女性自慰系列第五页| 天天操天天国产三级片处女学生妹| 日韩AV免费看| 九九草草逼| AV大片在线播放| 国产精产国品一二三在观看| 五月天啪啪| 色啪网| 日本精品99网站| 五月天激情网站| 五月天综合色| 丁香六月狠狠干| 婷婷五月丁香综合激情| 日韩无码专区| 91超碰在线观看| 丁香五月色| 丁香五月天成人网站| 99视频在线精品免费观看2| 五月天天天色| 狠狠爱五月婷婷| 色五月婷婷综合在线| 丁香六月成人| 亚洲成人中心| 激情四射五月天| 色婷婷亚洲婷婷| 99久久综合| 五月综合视频| 4438亚洲欧美| 秋霞网在线免费基地五月婷婷丁香| 亚洲中字AV电影在线网站| 牛牛澡牛牛爽| 伊人影院久久网| 99狠狠操一| 久久电影4399| 97碰在线| 色五月在线| 99热首页在线30| 婷婷丁香五月天在线| 这里只有精彩视| 婷婷六月啪啪| 91操人视频| 亚洲欧美婷婷五月色综合| 婷婷色狠狠| 五月激情婷婷在线| 99精品自拍视频| 日韩另类| 色婷婷AV久久| 婷婷干| 99久久国产综合精品五月天喷水\| AV片在线观看| 欧美色99| 夜夜天天久久婷婷| 99热欧美精品| 最新av在线观看| 97色碰碰公开视频| 中文字幕欧美日韩VA免费视频| 亚洲无码AV片| 91夫妻视频| 玖玖热视频| 亚洲五月天第一综合干| 亚洲五月天色色| 天天狠狠综合精区| 久久综合色五月| 婷婷丁香亚洲色综合91| 99黄色性生活| 五月丁香婷婷激激激综合网色播| 五月色综合| 人妻久久久久久久| 影音先锋男人av资源站| 婷婷无码视频| 婷婷五月天成人影片| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 成片免费观看视频大全| 五婷婷综合网| 五月丁香婷婷综合久久| 久久久久人无码人妻| 五月天色不卡| 超碰在线91| 欧美日韩二区在线| www91精品| www.激情在线| 日韩在线婷婷五月天综合| 日本啪啪网| 少妇大叫太大太粗太爽了A片| 99精品福利视频| 伦乱天堂| 桃色五月婷婷| 就要爱综合| 99在线精品视频免费观看20| 免费精品99| 色吊丝99| 一区二区三区四区五区| 六月久久婷婷| 黄色高清无码| 五月婷婷亚洲天堂激情在线| 五月丁香六月激情| 久久加勤综合| 亚洲国产精品五月天| 艾小青av| 久久婷婷六月综合综合| 婷婷六月综合| 色色COm| 久久精彩视频| 久久色天堂| 五月天婷婷丁香花| 婷婷五月激情小说| 欧洲一区二区| 五月综合婷婷五月| 666555。COm毛片| 99综合在线| 丁香五月在线观看完整版| 激情综合九月| 五月丁香888| www99热| 天天操综合网| 亚洲精级| 西瓜美女a片| 99久久性爱| 色综合香蕉| 另类综合网| 色婷婷丁香| 国产av基地| 午夜无码精品色综合久久| 狠狠五月天| 婷婷丁香五月天色色| 操逼123网| 91婷婷| 91美女被操| 5月丁香婷婷激情网| 成人无码髙潮喷水A片| 六月色色| 大香蕉婷婷色| 五月天婷婷操逼视频| 五月婷婷自拍| 97超级啪啪在线观看| 图片区 小说区 区 亚洲五月| 日本黄色精品| 五月天激情日色在线| 色婷婷狠狠18禁| 亚洲不卡| 久久久18| 五月停停色| 伊人啪啪网| 伊人99久久| 九九视频这里是精品五月| 婷婷综合激情| 五月天色图| xxxx久| 色婷婷久久视屏| 综合五月网| 婷婷五月综合社区在线| 色色亚卅| 日韩一级片| 91人妻色色网| 天天干天天干天天干| 99久久9| 婷婷九月亚洲| 99操中文视频| 激情五月婷| 色噜噜狠狠色综| 婷婷五月综合在线| 色频玖玖五月天| 色色色热热热| 青青热视频| 亚洲色图五月丁香| 激情综合婷婷| 丁香六月天| 9久久精品| 91狠狠色丁香婷婷综合久久精品| 九月色婷婷| 99久视频| www,欧美干干干干干干| 综合久久十三| 激情五月天伊人av| 久婷婷五月天影院| 色婷婷操逼| 大香蕉五月天婷婷丁香91| 婷婷五月天在线观看免费| 五月色情婷婷| 亚洲午夜电影| 久久婷婷五月丁香网| 五月婷婷伦理| 天天躁日日躁狠狠躁日日躁2022年5月9日 | 极品少妇高潮啪啪AV无码| 免费日韩99| 公的粗大挺进了我的密道| 2020久久婷婷五月| 久婷狼色诱惑在线| 黄色激情五月天| 中文成人在线| 91日本在线| Xx色综合| 丁香五月综合狠狠| 色色网站免费| 大香蕉九操| 看片视频在线免费日产在线看| 五月色婷婷影视在线电影| 无码视频国内精品久久久| 五月婷婷久| 亚洲中文AV网站| 久久综合丁香激情五月| 99久在线视频| 欧美久久一级内射wwwwww.| 婷婷王月天影院| 亚洲另类AV| 婷婷久久大香蕉| 日日色五月天| 日韩无码亚欧无码| 久久婷婷伊人| 亚洲人妻一区二区 | A片一曲| 99热思思在线观看| 91九色无码内射| 五月丁香综合啪啪| 婷婷激情欧美| 97人人做| 色色色色色色综合网| 狠狠色噜噜色狠狠狠综合久久成人波 | 久一网站| 图片区 小说区 区 亚洲五月| www.av骚货| 亚洲天堂啪啪| 六月 丁香 视频| 亚洲精品国产setv| 懂色av粉嫩AV蜜臀AV| 婷婷五月综合久久中文字幕| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 丁香五月 无码| 97人人操人人爽| 九九热在线视频,| 人妻激情久久| 色色无码| 99热这里只有精品96| 4399在线观看免费毛片| 欧类av怡春院| 中文无码婷婷| 久久久精品色色色| 高潮毛片遮挡费高一百度| 色婷婷久久9.com| 538在线精品| 九九热免费观看视频| 久久日韩婷婷五月| 人妻熟人中文字幕一区二区| 91免费看片| 五月丁香六月停停| 五月丁香网视频| 色色网91| 国产日产亚洲系列最新| 亚洲欧美婷婷五月色综合| 色人五月婷婷| 国产亚洲av片| 青青草大香| 99综合视频一体| 午夜做爱影院| 26UUU在线观看| 激情综合五月天| 欧美成综合在线观看| 九九AV| 9久热在线视频精品| 天天插天天日天天爽| 97香蕉久久超级碰碰高清版| 99久久色| 五月停性愛| 丁香五月激情综合| 91日本在线| 玖玖婷婷五月天| 九九热视频免费观看| 色综合久久久久| 无码激情AAAAA片-区区| 久久伦乱| 亚洲婷婷五月天激情| 久久综合伊人综合在线| 丁香六月婷婷久久综合八月| 99re在线精品视频| 日韩大片艹艹| 五月婷无码| 六月综合婷婷开心伊人| 9九色首页| 婷婷五月天亚洲综合| 青青草搞屄视频网站| 日韩色五月| 免费操超碰| 激情五月婷在线精品| 九九热这里只有精品556| 久久五月情| 五月天操逼激情| 高清无码网址| 99色天堂| 99久久婷婷国产综合| 日韩性视频| 操逼巨乳91| 久久婷婷综合五月天| 九九草热在线观看| 欧美色骚婷婷五月天| 九月婷婷激情| 国产综合婷婷| 98永久精品| 日本三级网址| 五月丁香人妻| 成人在线视频男人的天堂4399| 日本V在线观看不卡视频网站| www久久久| www.久久爱| 原琪琪色影院| 超碰在线视屏| 99热超碰在线| 香蕉狠狠爱视频| 欧美在线视频免费播放| 综合图片色色| 色婷婷丁香| 久久少妇视频| 99爱视频在线| 91视频综合网| 久久久久久97| 久久HD| 丁香婷婷基地| 色婷婷电影| 天天色天天| 丁香九月久久| 五月婷婷开心网| 人人操AV| 亚洲V国产V欧美V久久久久久| 国产AV一区二区三区日韩| 大地9中文在线观看免费高清 | 日韩成人无码片| 另类国产欧美视频| 精品国产乱码久久久久久免费 | 99热这里是精品| 天天肏高清在线| 在线视频另类| 天天干天天拍| 五月天婷婷婷| 欧美久久久中文字幕| 久久久婷婷色五月资源网| 五月丁香人妻| 婷婷五月花| 欧美成人一区二区三区在线视频| 99riAV成人在线视频| 丁香九色不卡aaa | 色婷婷在线播放| www久| 婷婷综合网| 色综啪啪网| 这里只有精品96| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 久热久69| 丁香五月婷婷久久久| 婷婷激情啪啪| 亚洲超碰在线| 99热这里只有精品2016| 五月丁香六月婷婷操操操| 色情久久久| 成人在线精品| 亚洲经典三级| 欧美A A A A A| 九九综舍久久| 亚洲色婷婷色| 日日撸天天干| 殴美综合激情五月天免费视频| 日本三级日本三级99| 国产精品久久欧美久久一区| 久操香蕉| 五月婷婷五月天| 色综合天天网| 久久婷婷五月综合色播| 欧洲色| 97啪啪| 亚洲天堂玖玖| 大香蕉久久草| 五月丁香| 六月丁香色婷婷| 婷婷五月六月| 九九成人视频| 婷婷性爱综合| 日本久久综合| 五月丁香六月婷婷综合免| 色在线视频网2025| 色婷| 色综合77777| 97碰| 婷婷丁香五月噜噜噜| 婷婷婷久久久| 一本色道久久88加勒比| 激情综合色图| 色五月噜噜| 婷婷五月天久久久| www夜夜操comwww| 丁香五月天啪啪| 日日做A爰片久久毛片A片英语 | 九色激情| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 999热在线视频| 日本久久网| www.99热在线| 色大综合| 无码区婷婷五月花开| 蜜桃人妻无码AV天堂三区| 色欲色欲久久宗合网| 国产99久久久| 五月婷婷丁香俺日污视频| 婷婷五月天影院| 国产成人亚洲综合亚洲| 99热99色| 丁香五月天色婷婷| 婷婷丁香五月综合| 先锋资源91| 思思久久青草热| 99热8| 玖玖色综合色| 天天天天天天天干| 婷婷五月天视频亚洲| 精品无码久久久久久久久| 久久婷婷啪啪视频| 99思思热只有在这里看| 狠狠色色| 丁香大香蕉| 五月丁香六月欧美综合网站| 婷婷五月天网| 色综合综合色| 天天日天天舔| 啪啪五月婷婷| 密乳视频| 97色色网| 成人综合视频在线| 人人操人人爱丁香五月| 涩五月婷婷| 国产综合视频婷婷| 天天操天天干天天日| 国产乱人偷精品人妻A片| 国产精品电影| AA丁香综合激情| 色9999综合久久| 五月天激情婷婷五月天久久| 六月婷婷五月丁香| 99在线观看| 婷婷综合五月| 欧美 日韩 成人| 伊人丁香五月天丁香在线婷| 99亚洲综合| 91精品综合久久久久久五月丁香| 久久婷网| 影音先锋91资源站| 黄色五月婷| 久久人妻视步| 少妇做爰免费视看片| 色情五月天小说| 五月丁香影院| 成年人夜夜喷水| 狠狠99| 九九视屏| 欧美综合丁香网| 熟妇人妻中文字幕无码老熟妇| 99爱视频精品| 五月婷婷之综合激情| 97色片| 99久久婷婷五月综合| 99久久户外勾搭| 亚洲五月天综合| 中文字幕人妻熟女在线| 狠狠擼综合| 国产精品18久久久| 91视屏在线观看com.wwwvv| 大香蕉啪啪啪| 99在线观看视频蜜臀| 色婷婷激情| 91免费在线视频6| 精品一区二区三区免费毛片爱| 丁香六月婷婷五月天| 激情婷婷五月天| 激情丁香婷婷五月天| 五月天婷婷久久| 婷婷久久网| 婷婷午夜天| 啪啪色激情五月天| 欧洲色| 色五月婷婷五月久久| 日本不卡高字幕在线2019| 婷婷一本和五月丁香| 黄色片久久| 五月丁香婷庭在线| 99福利视频导航| 狠狠五月激情婷婷直播片| 亚洲av电影网站| 久草五月天| 婷婷九色| 日韩成人综合网| 五月天无码| 极品人妻VIDEOSSS人妻| 国产精品在线视频| 99热成人| 综合综合网| 狠狠色噜噜狠狠亚洲A∨| 五月天国产| 影音先锋一区| 免费播放片大片| 婷婷综合五月天| 综合久久五月| 先锋男人91资源| 欧美在线97| 久久这里只有国产| 精品无码久久久久久久久 | 五月丁香毛片| 97人人操人人爽| 免费AV黄在线播放| 67久久| 这里只有精品视频| 亚洲视频a| 怡红院视频| 天天插夜夜爽| 青青草婷婷五月天| 综合婷婷五月天| 大香蕉综合网| 极品精品一区二区三区在线| 99热这里只有精品96| 91VIP在线观看| 五月丁香婷婷综合久久| 五月丁香六月日逼| 1769在线观看欧美国产| 殴美激情综合网| 欧美色偷拍| 99看片| 97人人操人人干| 99视频这里有精品| 欧美日韩AAAA| 五月天大香蕉| WwW色婷婷| 99热6色| 激情色播| 狼人伊人天堂| 五月天成人综合| 五月婷婷五月天| 国产精品18久久久| 在线观看婷婷5月| 欧美婷婷六月丁香综合色连续高潮抽搐| 久久女婷| 色婷婷色婷婷五月| 97色碰| 精品一二三区久久AAA片| 久久精品视频在这里有| www色婷婷| 成人做爰A片免费看视频| 日本五月天婷婷丁香| 久久总和99| 中文字幕精品无码一区二区| 五月婷网站| 97碰久久| 亚洲无AV在线中文字幕| 9l视频自拍9l九色9l成人| 激情五月丁香色婷婷| 九九Y精品热播| 狠狠干婷婷| 在线观看中文字幕| 亚洲性受XXXX五月丁香| 欧美日韩国产成人在线| 91操片| 婷婷五月色亚洲| 依人大香蕉| 丁香六月婷| 六月丁香五月亭亭| 五月丁香啪啪啪综合网| 久久久全国免费视频| 五月丁香婷婷色| 久久久思思热| 久久婷婷五月天激情| 国产午夜精品AV一区二区麻豆| 991精品在线视频| 99re思思热在线视频| 欧美五月婷婷综合| 久/久精品99看9| 日本九九网| 丁香五月老师| 九九99免费视频| www.99热精品99.com| 婷婷大香蕉| 九九这里都是精品| 五月天开心激情网色欲无码| www.五月丁香| 色99久草在线| 操碰97| 日韩综合大黄| 免费AV黄在线播放| 99色综合网| 97色射| 亚洲久久激情| 91精品国产99久久久久久天美| 天天精品视频在线观看视频| 99热老网站| 综合激情肏逼网| 大香蕉福利导航| 欧美成人精品A片免费一区99| h在线看免费版在线看| 5月丁香综合网| 天天爱天天做天天日| 狠狠99| 五月丁香婷婷伊人日韩| 中文字幕成人| 夜夜久久综合网| 色婷婷五月视频| 五月丁香 啪啪啪| sS丁香五月婷婷| 亚洲综合99| 久久9热| 影音先锋五月婷婷| 99热这里只有精品8| 婷婷五月丁香在线视频| 99er视频在线| 激情五月五月五月婷婷| 99视频地址| 五月丁香六月婷婷亚洲天堂网站| 91色九| 五月婷婷久久久久| 97在线观视频免费观看| 婷婷久久五月丁香| 国产偷人妻精品一区| 另类综合婷婷五月天欧美视频| 色五月婷婷激情五月| 九九热只有这里是精品| 色婷婷婷av| 五月天婷婷色| 操操啪| 亚洲成人综合在线| 久久综合爱| 玖玖爱导航| 国产精品成人网站| 婷婷丁香五月综合网| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 99日本在线| 天天婷婷综合亚洲亚洲| 婷婷综合精品视频97| 九九精品在线网| 五月丁香六月婷婷不卡免费无码| 五月色亭丁香| 色必久悠悠影院| 精品婷婷五月视| 婷婷色播色五月五色五月天色妇| 天天日天天添| 激情五月天在线观看色婷婷| 成人va在线观看视频| 99操碰| 综合另类视频| 香蕉久久国产AV一区二区| 五月婷婷啪| 五月婷婷偷拍| 国产成人AV在线| 热婷婷在线视频| 亚洲操B视频| 亚洲av电影在线| 99热成人| 天天色天天操天天射| 色综合久久久久| 亚洲操精品| 久久久中文| 99热在线观看亚洲区| 婷婷丁香六月激情综合| 丁香六月毛片| 99热这里只有精品2| AAAA亚洲| 激情丁香久久| 婷婷成人丁香色情基地30 | 婷婷九月在线| 色婷婷激情| 美女黄频aⅴ视频| 中文字幕成人| 成人必爱视| 99热99思午夜精品| 久久这里都是精品视频| 岛国av网| 丁香五月a| www.五月丁香| 色婷婷在线播放| 久久曰曰| 男人大jjc女人免费视频| 99只有精品9| 欧美精品久| 风流少妇A片一区二区蜜桃 | 婷婷五月天xxx| 五月天色网站| 婷婷综合网| 五月婷婷啪| 婷婷色丁香五月| 99性爱视频| 激情综合网五月婷婷| 国产伦亲子伦亲子视频观看| 欧美精品999| 超碰超碰在线| 婷婷五月天堂| 男人先锋久久| 婷婷五月六月| 四月婷婷五月丁香| 高清无码.com| 五月丁香六月综合激情网| 天天狠狠色噜噜| www婷婷| 激情第四色| 久久综合五月天| 99热综合| www婷婷色| 一区操| 九九热re99re6在线精品| 婷婷五月激情热播| 91视屏在线观看com.wwwvv| 亚洲婷婷免费| 99精品综合视频| 日韩成人中文| www.久久综合| 色五月亚洲五月天| 丁香五月五婷| 五月天大香蕉| 亚洲亚洲人成综合网络| 少妇婷婷五月天| 美妞av| 婷婷久久色| 久久xxxx| 九九精品碰| 婷婷色五月婷婷姐妹| 五月花综合视频| 啪啪综合网| www.色五月| 99ER热精品视频| 婷婷色在线播放| 婷婷导航| 亚洲综合色色| 大香蕉久久婷婷| 欧美丰满熟妇BBB久久久| 99久久五月丁香野外| 国产亚洲av片| www.99在线| 日日日影院| 亚洲 无码 中文字幕 中出| 婷婷五月天中文字幕| 99色色视频| 丁香大香蕉| 色爱爱综合网| 日韩欧美一区二区三区四区| 五月婷婷激情五月| 丰满少妇猛烈A片免费看观看| 亚洲午夜Av| 激情丁香网| 91啪啪网| 久热伊人| 五月天激情四射网站| 艾小青av| 五月丁香偷拍| 99热传媒| 日日操夜夜爽白洁| 五月丁香六月婷婷成人电影| 激婷网| 五月婷婷黄色| 五月丁香婷婷综合| 色狠狠色综合久久久绯色aⅴ影视| 亚洲xx网| 五月丁香无码| 婷婷五月av| 婷婷狠狠青青| 99re思思在线视频| 欧美成人A片AAA片在线播放| 六月丁香激情网| 五月婷A V在线| .操區COm| 激情五月天色色网| 免费在线观看AV网站| 99玖玖精品| 婷婷娱乐丁香综合网| 婷婷五月色| 99这里有精品| 亚洲爱婷婷| 亚洲综合婷婷| 五月婷婷五月天| 激情熟女网| 全国最新疫情| 日韩啪啪网| 超碰人妻公开在线| 全高清无码视頻| 五月丁香狠狠| 国产亚洲成AV人片在线观黄桃| 大天天伊人| 久久人妻伦理| 97日本在线播放| 天天干天天日天天插| 色婷婷www| 光棍影院日韩精品| 午夜婷婷五月天在线| www.超碰在线| 色丁香五月| 99热精品在线观看| 婷婷狠狠狠爱| 婷婷色丁香六月| 色婷网| 五月丁香另类图片| 丁香婷婷色九月| 亚洲精品网址| 丁香五月婷婷性爱| 久久精品性爱| 9精品在线| 久久精品夜色噜噜亚洲a∨| 六月婷婷AV| 丁香五月冃欧美| 成人五月丁香花| 色愛综合网| 五月婷婷综合网| 日本三级中国三级99| 色播五月| 久久青青日本视频| 五月天色婷婷基地| 激情久久伊人| 色婷婷丁香五月天激情综合网| 国产成人精品一区二三区熟女在线 | 天天操比比| 91精品久| 伊人五月天婷婷| 九九XX视频| 久久开心五月婷婷| 99青青草99| 夜夜撸日日骑| 丁香五月激情五月色综合| 襙逼网| 婷婷丁香综合网| 亚洲婷婷乱乱丁香| 色婷婷成人色网| 丁香六月婷婷综合啪啪| 五月综合激情啪啪啪啪啪| 操逼棍操逼| 中文网婷婷字幕婷| 天天激情| 9有码中文| 丁香婷婷影院| 五月丁香婷婷AV天堂| 精品成人无码A片观看香草视频| 婷婷免费无视频| 毛片九九九九九九| 丁香婷婷激情五月天无毒不卡蜜桃| 久一网站| 99re热视频这里只精品| 丁香五月婷婷无码AV| 香蕉AV777XXX色综合一区| 婷婷精品性性性性性性性| 丁香五月婷婷少妇| 色婷婷五月在线| 伊人久久激情图区五月| 国产欧美日韩综合精品一区二区| www.夜夜騎夜夜狠| 99久久五月天| 五月婷婷三级| 99热精品少| 色天使久久综合| 色婷婷偷拍| 一区色色色色网| 99人妻碰碰久久久禁片| 精品乱码久久久久| 婷婷99热| 久草热8精品视频在线观看| 五月综合六月婷婷| 五月天丁香综合在线| 99自拍视频| 五月丁香综合啪啪対白| 五月天久久激情| 精品成人久久久久久久_一二三四视| 激情婷婷内射| 玖玖综合色区在线观看| 干一干xxxx| 狠狠干天天内射| 亚洲影院婷婷色| 91丨九色丨丰满人妖| 热久久77777| 韩国97天堂| www.zbzhongsen.com| 亚洲丁香五月美女| 久久青青日本视频| 99激情视频| 丁香五月六月欧美| www.91.com黄| 91男同视频| 五月天婷婷免费| 99久久a线观| 狠狠久久婷婷| 五月丁香影视| 色情五月停停丁香| 狠狠综合| 丁J香六月首页| 亚洲五月婷婷| 精品九九在线观看| 97人妻碰碰碰久久久久-最近国语高清| 久久久久久久人妻| 九九精品在线网| 超碰免费人人| 91久久18| 五月天丁香综合| 欧美日本一区二区三区| 五月婷婷激情| 色五月综合激情网| www.久久爱.com| 欧美视频在线观看噜噜| AV网站免费在线| 中文成人在线| 日本爆乳片手机在线播放| 天天 日综合| 国产激情av| 热思思九九| 色欲天天综合网| 激情五月天伊人av| 六月丁香五月婷婷首页| 婷婷丁香五月天色色| 久热91| 99爱爱网| 天天综合久久| 百度4399有码精品V在线观看| 五月婷婷亚洲色图| 亚洲岛国电影| 激情九月丁香婷婷| 任你搞免费视频观看| 婷婷五月丁香人妻无码高清| 五月天丁香综合在线| 欧美日韩123| 婷婷丁香五月天色播网站| 五月天亚洲最大成人| 波多野结衣不卡AV| 色久天| 国产精品日韩十五区| site:wpjngj.com| 99精品久久久久久久| 狠狠操狠狠色| 九九热只有精品| 色婷婷六月| 婷婷五月天激情五月天网站| 婷婷天堂伊人| 7777激情基地| 草五月| 婷婷五月天六月丁香| 91成人视频| 成人在线观看精品| 超碰97干| 天天色天天操天天射| 在线婷婷| 播五月,色五月,开心五月播放器| 丰满人妻一区三区三区| 亚洲性受XXXX五月丁香| 伊人综合婷婷| 中文字幕在线视频播放| 国产成人精品123区免费视频| 五月丁香中文| 婷婷六月天亚州| 色五月av伊人| 色久播播| 色婷婷777狠狠| 亚洲婷婷丁香五月| 97超级碰人人| 99视频这里有精品| 天天日天天干天天操| 亚州色婷婷| 色欲久久久久久综合网综合网| 五月婷在线播放| 婷婷五月丁香成人| 亚洲五月六丁香激情| 久久视频66| 久/久精品99看9| txt五月激情四射网综合俺也来了| 色情终和网| 国产乱妇乱子在线播视频播放网站| 99色色视频| 久热综合| 生活片五区| 婷婷综合一二三| 国产激情综合五月久久| 性生活视频98791| 六月丁香综合999| 久久久久综合激动五月天| 天天五月香欧美| 99热99ai| 99热精品在线播放| 久久激情综合| AV在线中文| 99在线视频色版| 日本WWW九九九| 婷婷五月综合啪| 欧美日韩国产一区二区| 丁香五月综合无码趴趴| 一区二区乱视频码| 色婷婷色丁香色欲av| 色九月综合| 丁J香六月首页| 97超碰99热99| 狠狠色综合无线观看| 99久久婷婷国产综合亚洲| 操碰99在线视频观看| 激情婷婷丁香色五月| 激情婷婷黄色五月| 69精品人妻不卡视频|