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

前端圖形學實戰: 從零開發幾何畫板(vue3 + vite版)

開發 前端
我們繼續沿用上一篇文章幾何學在前端邊界計算中的應用和原理分析的工程, 由于幾何畫板相當于一個獨立的小應用, 具備一定的復雜度, 這里我們來對 vite 工程配置一下對 less 的支持。

前言

hello, 大家好, 我是徐小夕, 今天又到了我們的博學時間。

本文是 100+前端幾何學應用案例 專欄的第二篇文章, 在第一篇文章幾何學在前端邊界計算中的應用和原理分析 中我介紹了幾何學在前端領域里的應用, 同時用 vue3 帶大家一起實現了常見圖形的邊界計算算法, 并且分享了如何用幾何原理和Web Dom生成任意三角形的方式:

圖片

如果大家感興趣可以在 gitee 查看我的具體代碼實現: https://gitee.com/lowcode-china/euryd

接下來就繼續這個話題, 我們進一步擴展, 來從零實現一個幾何畫板。

你將收獲

  • vue3 + vite的實用技巧
  • 幾何畫板的基本開發思路

元素創建,

編輯,

拖拽,

圖層管理

撤銷和重做

導入導出

  • 利用幾何和代數學知識解決前端問題

demo演示

在分享方案之前, 我先給大家演示一下做好的demo, 這樣可以更好的理解我們接下來要做的事情:

圖片

技術實現

我們繼續沿用上一篇文章幾何學在前端邊界計算中的應用和原理分析的工程, 由于幾何畫板相當于一個獨立的小應用, 具備一定的復雜度, 這里我們來對 vite 工程配置一下對 less 的支持:

安裝 less 和less-loader (推薦yarn, pnpm)

在vite.config.ts里做如下配置:

export default defineConfig({
plugins: [vue()],
css: {
preprocessorOptions: {
less: {
modifyVars: {
hack: `true; @import (reference) "${path.resolve("src/base.less")}";`,
},
javascriptEnabled: true,
},
},
},
})

這樣配置完成之后我們就可以在 vite項目 里用 less 的方式寫樣式代碼了, modifyVars屬性里面的配置是為了指定 less 全局變量的地址, 這樣我們可以把主題, 通用樣式放在該目錄下, 以便直接在項目的任何頁面直接使用。

好了, 準備工作完成了, 我們開始接下來的實現部分。

1. 畫板搭建

畫板搭建主要是靜態和交互部分, 這里簡單和大家介紹一下基本構造:

圖片

上圖可知畫板主要分兩個部分:

  • 畫布區(包含記錄鼠標移動坐標的文本提示)
  • 側邊控件區

畫布的點陣背景我們用 css 的背景樣式實現, 這塊網上也有很多教程, 我就不一一和大家分析了,這里直接上實現的代碼, 大家可以拿來就用:

section .card {
position: relative;
height: 480px;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);
background-image: radial-gradient(rgba(9, 89, 194, 0.3) 6%, transparent 0),
radial-gradient(#faf9f8 6%, transparent 0);
background-size: 10px 10px;
background-position: 0 0, 2px 2px;
}

整個畫板應用的基本結構如下:

圖片

如果大家對這一塊知識感興趣的可以參考我實現的代碼, 具體代碼地址: https://gitee.com/lowcode-china/euryd

接下來我們開始進行比較核心的方案設計。

2. 創建并繪制幾何圖形?

因為是畫版應用, 所以圖形的創建一定要簡單且靈活, 控制權交給用戶和鼠標, 所以這里實現的效果如下:

圖片

用戶只需要選擇對應的圖形, 用鼠標在畫布里拖動即可創建任意大小比例的圖形, 為了實現這一效果, 我們需要做如下準備:

  • 定義圖形的schema結構
  • 根據鼠標光標的位置計算圖形創建的元信息(圖形id, 頂點坐標, 寬高樣式等屬性)

(1)定義圖形的schema結構

像任何可視化低代碼產品一樣, 我們都需要一個統一且可擴展的組件schema結構, 目的是為了更好的識別組件和派發屬性。畫板應用里的圖形, 我們可以設計如下 schhema 結構:

type IShapeTypes = 'rect' | 'circle' | 'line';

interface IShapeProps {
id: string,
type: IShapeTypes,
style: {
width: number,
height: number,
left: number,
top: number,
...otherStyle
},
isEditable: boolean,
...otherSchema
}

具體配置只要具備通用性, 我們就可以結合自己的業務來配置。

定義好了 schema, 我們只需要實現對應的圖形即可, 這里以矩形為例和大家分享一下實現細節。

(2)根據鼠標光標的位置計算圖形創建的元信息

我們都知道, 要想通過鼠標拖動來創建任意一個矩形, 我們需要知道幾個條件:

  • 鼠標按下的初始點的坐標
  • 鼠標拖動過程中的實時位置

這兩個問題其實都可以在全局實現, 基于組件設計的原子化原則, 我們可以在畫布組件里捕獲并計算出鼠標的實時位置, 然后派發給其他組件消費, 這樣我們也可以是實現記錄鼠標移動坐標的文本提示 這一功能了。

在上一篇文章中已經介紹了如何用 vue3 的組合式函數來實現通用 hooks, 我們接下來要做的就是把 useMouse 獲取到的結果加工后讓其他組件能使用, 這里我用 vue3 的toRefs 來實現。先來看一下代碼:

// BaseBoard.tsx
<script setup lang="ts">
import { ref, onMounted, onUnmounted, toRefs } from "vue";
import { useMouse } from "../hooks/mouse";
import { getElPagePos } from "../utils/math";

const props = defineProps<{
msg: string;
onMouseChange: (x: number, y: number) => void;
}>();

const { onMouseChange } = toRefs(props);

const cardOffset = ref({ x: 0, y: 0 });
const boardDom = ref<any>(null);
const { x, y } = useMouse(window, (x, y) => {
onMouseChange && onMouseChange.value(x - cardOffset.value.x, y - cardOffset.value.y);
});

onMounted(() => {
const { x, y } = getElPagePos(boardDom.value);
cardOffset.value.x = x;
cardOffset.value.y = y;
});

onUnmounted(() => {});

defineExpose({ boardDom });
</script>

<template>
<section>
<h3>{{ msg }}</h3>
<div class="card" ref="boardDom">
<slot></slot>

<div style="user-select: none">
x: {{ x - cardOffset.x }} , y: {{ y - cardOffset.y }}
</div>
</div>
</section>
</template>

BaseBoard 就是我們的畫布組件, 我們使用這個組件可以在頁面上創建任意數量的畫布, 同時由于vue3 的組合函數支持使用defineProps 來定義組件的props, 所以我們可以通過它定義組件的屬性, 這里對外暴露了兩個屬性:

  • msg 用來在外部控制畫布的名稱
  • onMouseChange 用來將內部鼠標監聽的事件傳到外部, 讓外部可以拿到內部是事件運行時

我們使用 useMouse 的時候就可以實時拿到鼠標的x, y的絕對坐標, 再減去畫布在頁面的實際偏移cardOffset.x, cardOffset.y, 就可以得出鼠標在畫布中正確的坐標:

圖片

這樣我們就可以通過onMouseChange回調把鼠標相對畫布的坐標實時傳給父組件了:

const { x, y } = useMouse(window, (x, y) => { 
onMouseChange &&
onMouseChange.value(x - cardOffset.value.x, y - cardOffset.value.y);
});

同時我們在代碼中發現了 defineExpose, 這個 api 作用就是把需要暴露的數據導出,供父組件使用,相當于子傳父, 我們可以在父組件里拿到暴露的值, 在這里我們把畫布的 dom 暴露出來, 讓父組件可以拿到子組件的dom。

有了以上的前提, 我們就可以來創建矩形元素了, 為了更好的管理畫布中的元素, 我們定義一個元素集合canvasBox:

type shapeType = "rect" | "circle" | "line";

interface IBaseShapeProp {
type: shapeType;
key: string;
style: any;
}

const canvasBox = ref<{ [key in shapeType]: IBaseShapeProp[] }>({
rect: [],
circle: [],
line: [],
});

當用戶選擇一個圖形, 在畫布中按下鼠標的那一刻, 我們創建一個基本的元數據:

const handleMouseDown = () {
const { x, y } = mouseAbsPos.value;
if (curShape.value) {
templateDot = [x, y];
templateDot[2] = Date.now() + "";
canvasBox.value["rect"].push({
type: "rect",
key: templateDot[2],
style: {},
});
}
};

由上面的代碼可知, 我們會創建一個矩形的元數據, 包含了矩形的:

  • 元素類型
  • 矩形的唯一key(方便后續快速查找該圖形)
  • 矩形的初始化樣式

同時我們在 templateDot 變量中緩存了鼠標的初始位置, 方便后續生成矩形完整的元數據。

圖片

我們在圖中可以看出當拖動鼠標時矩形是實時跟隨鼠標創建的, 要想實現這個效果, 我們需要對鼠標的mousemove 進行監聽, 并動態更新矩形的元數據, 如下:

const handleMouseChange = (x: number, y: number) => {
mouseAbsPos.value = { x, y };
// 1.如果有選中的元素, 則判斷為移動當前選中元素
if (curSelect.value && templateDot.length) {
// something...
return;
}
// 2.否則則生成元素
const [a1, b1, key] = templateDot;
if (curShape.value && templateDot.length) {
let dx = x - a1;
let dy = y - b1;
let curIndex = canvasBox.value["rect"].findIndex((v) => v.key === key);
if (curIndex > -1) {
canvasBox.value["rect"][curIndex] = {
...canvasBox.value["rect"][curIndex],
style: {
left: (dx > 0 ? a1 : x) + "px",
top: (dy > 0 ? b1 : y) + "px",
width: Math.abs(dx) + "px",
height: Math.abs(dy) + "px",
},
};
}
}
};

由代碼可知我是通過實時改變矩形元素的 left 和 top 來實現矩形跟隨鼠標實時更新的, 我們使用 transform 也可以實現同樣的效果, 感興趣的朋友可以嘗試一下。

這里順便擴展一下, 我們平時看到的拖拽框架, 對組件進行多選操作時也用了同樣的方式, 通過鼠標拖拽滑動來產生多選區域:

圖片

感興趣的朋友可以把這個方案進行擴展, 實現更有意思的應用場景。

3. 移動, 編輯幾何圖形

有了上面創建元素的基礎, 我們繼續來實現移動和編輯元素的功能。

3.1 移動元素

首先我們需要找到當前要移動的元素, 然后動態改變它的位置, 因為每個元素我都設置唯一的key, 所以當元素被選中的時候我們就可以根據key找到此元素, 并只對該元素進行操作:

// 如果有選中的元素, 則判斷為移動當前選中元素
if (curSelect.value && templateDot.length) {
const [x0, y0] = templateDot;
canvasBox.value["rect"] = canvasBox.value["rect"].map((v) => {
if (v.key === curSelect.value) {
const { left, top } = v.style;
templateDot = [x, y];
return {
...v,
style: {
...v.style,
left: parseFloat(left) + (x - x0) + "px",
top: parseFloat(top) + (y - y0) + "px",
},
};
}
return v;
});
return;
}

以上代碼中主要是通過計算鼠標移動的位置差(通過緩存鼠標上一步的坐標)來改變元素的 left 和top 值, 在 mouseup 時重置緩存變量即可完成一次移動過程。

const handleMouseUp = () {
const { x, y } = mouseAbsPos.value;
if (curShape.value) {
// 1. 如果開始點和結束點一樣,則不創建
if (templateDot[0] === x && templateDot[1] === y) {
canvasBox.value["rect"] = canvasBox.value["rect"].filter(
(v) => v.key !== templateDot[2]
);
templateDot = [];
return;
}
}
// 重置
templateDot = [];
};

這里有一個細節需要注意, 就是如果在鼠標按下之后沒有拖動(也就是好點擊畫布的操作), 其實需要把mousedown創建的元素清空刪除, 所以才有了上述代碼的第一步判斷。

3.2 編輯元素

編輯元素其實和移動元素的模式差不多, 改變的是元素的靜態屬性, 比如我們可以編輯元素的背景顏色, 邊框樣式等, 這里我以刪除元素為例給大家介紹一下實現過程。

圖片

首先我們展示一下元素的 dom 結構:

<div
v-for="item in canvasBox.rect"
:key="item.key"
:class="['shape', 'rect', curSelect === item.key ? 'active' : '']"
:style="{
left: item.style.left,
top: item.style.top,
width: item.style.width,
height: item.style.height,
}"
:data-key="item.key"
@dblclick.stop="handleSelected(item.key)"
>
<span v-if="curSelect === item.key" @click="handleDel(item.key)">x</span>
</div>

當我們雙擊元素的時候, 我們通過key會給當前選中元素一個激活態, 此時v-if的刪除按鈕就會顯示, 我們綁定一個刪除方法 handleDel :

const handleDel = (key: string) => {
canvasBox.value["rect"] = canvasBox.value["rect"].filter((v) => v.key !== key);
curSelect.value = "";
templateDot = [];
};

刪除元素的方法是典型的單向操作, 比較簡單, 如果我們要改變元素的整體屬性, 我們需要設計一個屬性面板,并實現表單渲染器來動態的更新元素的屬性, 類似于 H5-Dooring 中的編輯面板:

圖片

在后面的文章中我會實現一個min版的屬性編輯器來完善我們的幾何畫板。

4. 圖層管理, 圖片導出等方案介紹

圖層管理也是編輯器常用的功能, 有了我們之前設計的 canvasBox, 我們就很容易實現一個圖層管理面板了, 我們只需要把存儲在canvasBox 元素數組遍歷到圖層面板, 并對其綁定操作方法即可實現涂圖層管理的常用功能, 比如:

  • 顯示隱藏
  • 快捷刪除
  • 批量刪除
  • 多選
  • 圖層移動
  • 切換元素

等等功能, 如 H5-Dooring 中的圖層管理面板:

圖片

責任編輯:武曉燕 來源: 趣談前端
相關推薦

2022-11-29 09:32:11

前端圖形學縮略圖

2022-12-29 08:35:13

變換矩陣計算機圖形學

2016-01-22 11:09:40

計算機圖形學虛擬現實三維建模

2022-01-13 08:13:14

Vue3 插件Vue應用

2024-12-30 14:40:20

2022-07-27 08:40:06

父子組件VUE3

2023-04-27 11:07:24

Setup語法糖Vue3

2022-08-09 10:00:57

ViteTypeScripVue3

2022-07-28 08:26:18

Vue3Uni-appVite

2021-11-26 05:59:31

Vue3 插件Vue應用

2024-10-18 10:49:03

Actions異步函數

2021-12-01 08:11:44

Vue3 插件Vue應用

2024-11-06 10:16:22

2024-09-05 08:50:11

2021-04-20 10:28:49

計算機互聯網 技術

2021-11-30 08:19:43

Vue3 插件Vue應用

2023-11-28 09:03:59

Vue.jsJavaScript

2022-08-15 07:34:36

vite項目Vue3

2023-03-13 07:52:13

2022-09-06 12:20:30

Vue3CVCRUD
點贊
收藏

51CTO技術棧公眾號

日本福利片在线观看| 国产树林野战在线播放| 手机看片久久久| 欧美艳星介绍134位艳星| 欧美在线观看18| 黄色录像特级片| 国产女无套免费视频| 欧美成熟视频| 亚洲人成网站免费播放| 在线观看免费视频高清游戏推荐| a√在线中文网新版址在线| 麻豆久久一区二区| 久久久久国产精品免费网站| 国产无套精品一区二区三区| 性xxxfreexxxx性欧美| 91丨九色porny丨蝌蚪| 国产精品久久久久av免费| 久久福利免费视频| 九九热爱视频精品视频| 6080午夜不卡| 岳毛多又紧做起爽| 欧美男男video| 国产女人18毛片水真多成人如厕| 91国产在线免费观看| 欧美国产成人精品一区二区三区 | 国产精品一区二区三区免费观看| 伊人手机在线视频| 亚洲手机视频| 久久久精品视频成人| 偷拍女澡堂一区二区三区| 成人av在线播放| 欧美天堂一区二区三区| 日韩欧美国产综合在线| 午夜激情视频在线| 国产午夜精品久久久久久免费视 | 日韩一本精品| 青青草原国产视频| 久久影视一区| 亚洲一区二区国产| 久久久久国产精品区片区无码| 99只有精品| 欧美网站在线观看| 欧美 日韩 亚洲 一区| 久做在线视频免费观看| 欧美韩日一区二区三区四区| 99视频网站| 亚洲va欧美va| 东方欧美亚洲色图在线| 91久久夜色精品国产网站| 无码视频一区二区三区| 中文久久精品| …久久精品99久久香蕉国产| 老司机成人免费视频| 欧美美女视频| 亚洲最大在线视频| 亚洲av无码国产精品麻豆天美| 欧美三级午夜理伦三级小说| 91精品在线免费| 日本中文字幕在线不卡| 成人污污视频| 精品少妇一区二区| 国产a级黄色片| 成人高清网站| 国产 日韩 欧美 综合 一区| 色综合久久中文综合久久牛| 欧美日韩激情四射| 国产高清在线a视频大全| 亚洲激情综合网| 岛国大片在线播放| 亚洲性色av| 欧美中文字幕一区| 国产乱码一区二区三区四区| 69堂精品视频在线播放| 欧美在线免费播放| 亚洲精品www.| 蜜桃精品视频| 亚洲激情视频在线观看| 丰满少妇一区二区三区| 蜜桃精品噜噜噜成人av| 在线观看91久久久久久| 国产福利在线导航| 欧美日韩三级电影在线| 久久久久久亚洲精品| 精品91久久久| 免费高清在线视频一区·| 国产女同一区二区| 亚洲精品久久久久久久久久久久久久 | 视频免费1区二区三区| 国产精区一区二区| 亚洲成人久久电影| x88av在线| 欧美三级视频| 国产成人一区三区| 亚洲成人黄色片| 国产午夜精品美女毛片视频| 日韩一区二区三区资源| a级片国产精品自在拍在线播放| 一区二区三区四区在线| 国产精品无码av在线播放| 色成人免费网站| 亚洲欧美色图| 亚洲级视频在线观看免费1级| 麻豆av免费看| 精品一区av| 久久久久国产精品免费| 自拍偷拍校园春色| 国产不卡在线一区| 亚洲国产精品久久久久久女王| 国精产品一区| 色av综合在线| 亚洲天堂美女视频| 国产精品久久久久久麻豆一区软件| 精品中文字幕在线2019| 国产精品va无码一区二区三区| 久久国产精品99精品国产| 国产精品三区在线| 国产三级在线播放| 欧美视频一二三区| a级在线观看视频| 欧美日韩免费观看一区=区三区| 日韩av理论片| 午夜视频1000| 亚洲国产中文字幕在线视频综合| 一级在线免费视频| 亚洲精华一区二区三区| 大胆欧美人体视频| 在线播放一级片| 国产日本亚洲高清| 欧美精品99久久| 给我免费播放日韩视频| 久久久国产精品x99av| 天堂网免费视频| 欧美高清视频手机在在线| 看电视剧不卡顿的网站| 91精品久久久久久久久久| 色综合久久网女同蕾丝边| 亚洲精品国产高清久久伦理二区| 国产麻花豆剧传媒精品mv在线| 日韩一区二区三区色| 自拍偷拍免费精品| 国产91国语对白在线| 成人小视频免费在线观看| 一本二本三本亚洲码 | 91精品久久久久久久久青青| 少妇荡乳情欲办公室456视频| 亚洲美女精品一区| 久久久福利影院| 66视频精品| 97国产超碰| 欧美另类tv| 亚洲国产精品悠悠久久琪琪| 国产乱国产乱老熟300| 久久99精品一区二区三区三区| 日韩av一区二区三区在线| 咪咪网在线视频| 亚洲女人天堂色在线7777| 狠狠躁夜夜躁人人爽天天高潮| 成人av电影免费观看| 日韩精品久久一区二区| 日韩精品中文字幕一区二区| 影音先锋日韩有码| 亚洲综合一区中| 亚洲精品午夜久久久| 777视频在线| 亚洲乱码电影| 国产精品播放| 在线观看网站免费入口在线观看国内 | 在线观看日韩精品视频| 国产精品美女| 日韩一本精品| 青草伊人久久| 97不卡在线视频| 国产小视频免费在线网址| 欧美午夜精品久久久久久超碰 | 日韩网站在线免费观看| 97久久综合精品久久久综合| 久久影视免费观看| 肥臀熟女一区二区三区| 亚洲一区二区高清| 中文字幕第4页| 国产一区 二区 三区一级| 日本a级片在线观看| 91麻豆精品国产91久久久久推荐资源| 97视频在线观看成人| 青青久草在线| 91精品国产综合久久久久久久 | 91精品国产综合久久福利| 国产女人被狂躁到高潮小说| 国产一区二区h| 久久国产成人精品国产成人亚洲 | 精品亚洲国产视频| а中文在线天堂| 一区二区欧美国产| 在线观看日本中文字幕| 狠狠色综合色综合网络| www.国产在线播放| 成人在线免费观看网站| 成人精品一区二区三区电影免费 | 91麻豆蜜桃| 超碰一区二区| 欧美成在线视频| eeuss影院www在线观看| 精品剧情在线观看| 中文字幕一区二区三区人妻四季 | 欧日韩免费视频| 久久精品高清| 就去色蜜桃综合| 视频国产精品| 国产日本欧美一区| xxx欧美xxx| 欧美精品久久久久a| 1769在线观看| 日韩精品极品视频免费观看| 精品乱码一区内射人妻无码| 一区二区三区在线播放| 亚洲第一综合网| 99久久精品国产观看| 91亚洲精品久久久蜜桃借种| 国内在线观看一区二区三区| 美女黄毛**国产精品啪啪| 精品国产亚洲一区二区三区在线 | 欧美a∨亚洲欧美亚洲| 国产精品成人在线观看| 黄色国产在线观看| 国产69精品久久久久777| 亚洲精品一区二区三区av| a级影片在线| 在线国产精品视频| 乱色精品无码一区二区国产盗| 欧美性猛片xxxx免费看久爱| 免费中文字幕在线| 国产精品美女一区二区三区| 国产a级片视频| 国产一区二区三区综合| 亚洲成人av免费看| 亚洲永久免费精品| 欧美精品自拍视频| 伊人久久成人| 波多野结衣av一区二区全免费观看| 色777狠狠狠综合伊人| 久久久久久亚洲精品不卡4k岛国 | 羞羞的网站在线观看| 中文字幕少妇一区二区三区| 色呦呦中文字幕| 亚洲国产成人精品一区二区 | 亚洲精品久久视频| 国精产品乱码一区一区三区四区| 4438成人网| ,一级淫片a看免费| 欧美精三区欧美精三区| 一级片免费网站| 91精品国产综合久久福利| 亚洲一卡二卡在线| 在线成人免费观看| 国内精品国产成人国产三级| 欧美色男人天堂| 97超碰资源站| 欧美一级日韩一级| 懂色av蜜臀av粉嫩av分享吧| 制服丝袜亚洲网站| 国产女人18毛片18精品| 日韩欧美美女一区二区三区| 91精品视频免费在线观看| 制服丝袜亚洲播放| a天堂视频在线| 亚洲成人黄色在线| 九色视频成人自拍| 日韩在线欧美在线| av片在线观看永久免费| 欧美高清一级大片| 精品众筹模特私拍视频| 97免费视频在线播放| 黄色视屏在线免费观看| 日本成人激情视频| 精品69视频一区二区三区| 成人黄色片在线| 凹凸av导航大全精品| 精品中文字幕一区| 成久久久网站| av在线观看地址| 日本va欧美va瓶| 欧美一区二区三区影院| 成人久久久精品乱码一区二区三区| 少妇一级淫免费观看 | 日本在线一级片| 午夜精品一区在线观看| 中日韩黄色大片| 欧美疯狂性受xxxxx喷水图片| 一区二区精品视频在线观看| 欧美男同性恋视频网站| www黄色在线观看| 亚洲免费人成在线视频观看| 色中色在线视频| 欧美成人午夜激情在线| 蜜桃视频动漫在线播放| 国产精品丝袜视频| 久久男人av| 中文字幕中文字幕一区三区| 欧美国产另类| 一区二区在线播放视频| 国产乱一区二区| 天天干天天舔天天操| 一区二区在线观看av| 中文字幕亚洲乱码熟女1区2区| 在线不卡中文字幕播放| 亚州av在线播放| 久久国产精品视频| 国产成人精品一区二区三区在线 | 日本人妻一区二区三区| 久久久蜜桃精品| 久久精品国产亚洲av麻豆色欲| 91精品办公室少妇高潮对白| 91麻豆成人精品国产| 亚洲护士老师的毛茸茸最新章节 | 欧美精品一二区| av成人在线播放| 欧美第一黄网| 激情综合电影网| 91丨porny丨九色| 中文字幕亚洲成人| 国产精品xxxxxx| 亚洲精品一区二区在线| 啦啦啦中文在线观看日本| 国产精品永久免费观看| 亚洲黄页网站| 每日在线更新av| 成人av资源站| 久久久久无码国产精品不卡| 色88888久久久久久影院按摩| 亚洲产国偷v产偷v自拍涩爱| 亚洲深夜福利视频| 日韩伦理在线| 精品一区二区三区视频日产| 亚洲国产老妈| 四季av一区二区三区| 国产亚洲精品bt天堂精选| 丰满少妇乱子伦精品看片| 精品日韩一区二区三区| 成人区精品一区二区不卡| 国产免费观看久久黄| 精品国产一区二区三区久久久蜜臀 | 国产精品久久77777| 日本一道高清一区二区三区| 看一级黄色录像| 国产精品66部| 国产亚洲精品女人久久久久久| 欧美一卡在线观看| 18加网站在线| 国产98在线|日韩| 99成人免费视频| 91精品人妻一区二区| 欧美午夜无遮挡| 九九九伊在人线综合| 日韩免费中文字幕| 欧美亚洲国产一区| 天堂av8在线| 亚洲综合激情网| 日韩一级片免费| 国产91免费看片| 成人精品视频| 国产精品久久久久久9999| 日韩码欧中文字| а√中文在线资源库| 欧美黑人一级爽快片淫片高清| 久久久久亚洲精品中文字幕| 夜夜爽www精品| 国产激情一区二区三区四区 | 在线视频亚洲| 国产三级av在线播放| 欧美日韩免费高清一区色橹橹| 香蕉视频网站在线观看| 成人av番号网| 亚洲激情自拍| 日本污视频网站| 欧美一二区视频| 麻豆视频在线看| 一区二区三区视频在线播放| 日本欧美在线观看| 2021亚洲天堂| 日韩精品在线私人| 亚洲三级在线| 国产视频一视频二| 最新中文字幕一区二区三区 | 国产黄色片视频| 亚洲男女自偷自拍图片另类| 都市激情综合| 最近中文字幕免费mv| 成人免费av在线| 在线观看一二三区| 97成人在线视频| 亚洲91中文字幕无线码三区| 红桃视频一区二区三区免费| 一区二区在线观看免费视频播放| 婷婷开心激情网| 91色视频在线导航| 久久激情视频| 麻豆疯狂做受xxxx高潮视频| 亚洲风情亚aⅴ在线发布| 香蕉久久免费电影| 国产成人在线小视频|