精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

麻豆免费在线视频| 97视频在线免费观看| 国产欧美日韩专区发布| 中国xxxx性xxxx产国| 国产强伦人妻毛片| 日韩精品福利一区二区三区| 蜜臀91精品一区二区三区 | 成人福利视频网站| 日韩在线免费高清视频| 国内外成人免费激情视频| 999久久久久久| 日韩午夜黄色| 日韩精品一区二区三区swag| 亚洲在线不卡| 日批视频免费观看| 欧美人与物videos另类xxxxx| 香港成人在线视频| 国产九色精品| 国产一级视频在线观看| 久久gogo国模啪啪裸体| 一区二区中文视频| 国产伦精品免费视频| 中文字幕伦理片| 日韩精品三区| 国产欧美精品一区二区三区四区| 欧美一级淫片播放口| 亚洲天堂2024| 色999久久久精品人人澡69| 国产精品色在线观看| 国产精品美女www| 国产传媒国产传媒| xxxxx.日韩| 国产精品美日韩| 好吊色欧美一区二区三区| 日本熟妇成熟毛茸茸| 免费成人三级| 91福利精品视频| 色一情一乱一伦一区二区三区 | 欧美日韩午夜| 精品国产污网站| 奇米影视亚洲色图| 国产精品欧美综合亚洲| 91精品蜜臀一区二区三区在线| 欧美日韩不卡视频| 大桥未久一区二区三区| 午夜精品一区二区三| 樱桃成人精品视频在线播放| 精品在线欧美视频| 亚洲三级视频网站| а√天堂官网中文在线| 成人v精品蜜桃久久一区| 成人免费大片黄在线播放| www.色小姐com| 极品国产人妖chinesets亚洲人妖 激情亚洲另类图片区小说区 | 国产精品久久一区二区三区不卡| 奇米888四色在线精品| 亚洲最新在线视频| 天天操精品视频| 91九色porn在线资源| 91性感美女视频| 国产精品国产福利国产秒拍| 三级av在线免费观看| 成人高潮视频| 欧美性videosxxxxx| 糖心vlog在线免费观看| 精品国产白色丝袜高跟鞋| a美女胸又www黄视频久久| 国产精品电影网| 波多野结衣毛片| 亚洲一级电影| 久久久免费电影| 久久久精品成人| 久久国产中文字幕| 亚洲国产精品久久91精品| 狠狠躁狠狠躁视频专区| 动漫一区二区| 国产精品免费丝袜| 中文字幕欧美人与畜| 香蕉视频国产在线| 国产高清不卡一区| 国产精品视频一区国模私拍| 中文字幕日产av| 国产视频一区三区| 久久影院模特热| 精品人伦一区二区三电影| 91成人精品在线| 欧美日韩国产首页| 亚洲综合123| 福利片在线一区二区| 欧美精品免费视频| 黑鬼大战白妞高潮喷白浆| 天堂亚洲精品| 国产精品免费视频观看| 少妇久久久久久被弄到高潮| a天堂中文在线88| 91免费看片在线观看| 婷婷久久青草热一区二区| a黄色片在线观看| 欧美日韩国产在线看| 欧美亚洲色图视频| 69久久精品| 国产欧美一区二区精品性色超碰 | 国产精品极品尤物在线观看| 97在线视频人妻无码| 9l国产精品久久久久麻豆| 日韩免费电影一区二区| 五月激情婷婷网| 国产精品欧美久久久久一区二区| 精品人妻人人做人人爽| 成人软件在线观看| 欧美日韩在线另类| 99日在线视频| 91精品网站在线观看| 欧美写真视频网站| 99久久久无码国产精品性波多| 久久免费福利| 亚洲一区www| 五月天综合视频| 黑丝一区二区| 亚州成人av在线| 一女二男一黄一片| 国产综合久久久久久鬼色| 国产一区二区丝袜| 青青青手机在线视频观看| 久久嫩草精品久久久精品| 裸体丰满少妇做受久久99精品| 手机亚洲第一页| 久久久国际精品| 先锋影音欧美| 日本不卡1234视频| 日本高清无吗v一区| 国产精品日日摸夜夜爽| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 亚洲级视频在线观看免费1级| 最新版天堂资源在线| 99精品全国免费观看视频软件| 日本国产高清不卡| 在线视频欧美亚洲| 韩国三级电影一区二区| 亚洲伊人一本大道中文字幕| av老司机久久| 成人精品亚洲人成在线| 精品伦精品一区二区三区视频| 国产视频在线播放| 欧美精品自拍偷拍| 黑人と日本人の交わりビデオ| 久久久久电影| 国产精品嫩草影院久久久| 国产原创av在线| 亚洲欧美欧美一区二区三区| 嫩草影院中文字幕| 日韩精品久久久久久久软件91| 欧美精品一区二区久久久| 人妻人人澡人人添人人爽| 亚洲午夜激情在线| eeuss一区二区三区| 日韩专区一区二区| 午夜视黄欧洲亚洲| 黄色av网址在线观看| 欧美综合在线视频观看| 久久国产精品久久国产精品| 日本中文字幕免费| 不卡视频免费播放| 无码人妻丰满熟妇区96| 日韩午夜视频在线| 久久精品国产电影| 亚洲视频 欧美视频| 国产一区二区三区av电影| 中文字幕在线观看一区二区三区| 亚洲国产一区二区久久| 欧美大肥婆大肥bbbbb| 韩国av免费在线| 中文字幕一区二区三区精华液| 波多野结衣之无限发射| 啪啪国产精品| 国产精品入口夜色视频大尺度| 日本视频不卡| 亚洲高清免费观看高清完整版在线观看| 国产精品69页| 手机亚洲手机国产手机日韩| 欧洲中文字幕国产精品| av成人手机在线| 91精品国产综合久久精品图片| 巨胸大乳www视频免费观看| 欧美高清不卡| 成人黄色影片在线| 欧美人与禽猛交乱配| 欧美精品视频www在线观看| 欧美日韩在线观看免费| 99久久国产综合精品色伊| 青青在线免费视频| 欧美97人人模人人爽人人喊视频| 精品香蕉一区二区三区| 日韩乱码一区二区三区| 亚洲免费观看高清在线观看| 97人妻精品一区二区三区免费| 久久欧美肥婆一二区| 精品一区二区三区国产| 国产精品99精品一区二区三区∴| 蜜月aⅴ免费一区二区三区| 蜜桃视频在线入口www| 欧美午夜精品久久久久久人妖 | 国产成人av电影在线| 婷婷久久伊人| 极品束缚调教一区二区网站| 国产精品日韩欧美大师| 国产污视频在线播放| 亚洲国产精品视频在线观看 | 欧美电影一区二区| 久久露脸国语精品国产91| 国产成都精品91一区二区三| 精品免费国产一区二区| 欧美日韩福利| 一区国产精品| 免费视频国产一区| 高清不卡一区二区三区| 黄污视频在线观看| 中文字幕日韩综合av| 一区二区视频播放| 韩曰欧美视频免费观看| 校园春色 亚洲| 国产精品理论片| www.中文字幕av| 久久性色av| 日本xxxxxxxxxx75| 午夜日韩激情| 欧美 另类 交| 77成人影视| 成人国产在线激情| 成人日韩av| 国产z一区二区三区| 97电影在线| 亚洲乱码国产乱码精品精| 波多野结衣毛片| 欧美性猛交xxxx乱大交| 无码人妻精品一区二区三区夜夜嗨| 国产日韩欧美高清在线| 中文字幕线观看| 美女一区二区视频| 国产一级不卡毛片| 91精品国产自产拍在线观看蜜| 欧美亚洲精品日韩| 欧美xxxx网站| 国产精品99久久久久久久久久久久| 麻豆国产在线| 国外成人性视频| av男人的天堂在线观看| 992tv在线成人免费观看| 韩国免费在线视频| 亚洲欧美中文日韩在线| 国产又大又黑又粗| 欧美日韩不卡一区| 国产美女主播在线观看| 在线综合视频播放| 99精品视频99| 欧美日韩一区二区免费视频| 成人午夜视频在线播放| 亚洲欧美另类久久久精品| 男人的午夜天堂| 99国产欧美另类久久久精品| 韩国三级hd两男一女| 不卡视频一二三| 亚洲激情视频小说| 欧美国产成人在线| 熟妇人妻久久中文字幕| 免费在线成人网| 亚洲精品成人在线播放| 国产不卡在线一区| 爱爱的免费视频| 中文字幕乱码亚洲精品一区| 亚洲av无一区二区三区| 久久美女艺术照精彩视频福利播放| 亚洲av无码国产精品久久| 欧美国产一区二区在线观看| 小早川怜子一区二区的演员表| 亚洲激情图片小说视频| 欧美波霸videosex极品| 亚洲视频精选在线| 国产一级久久久久毛片精品| 国产精品妹子av| 久久久久久久福利| 最新高清无码专区| 国产真实乱偷精品视频| 91福利在线导航| 国产成人免费看一级大黄| 亚洲国产精品一区二区久| 成年午夜在线| 欧美日韩成人在线视频| 乱人伦中文视频在线| 欧美日韩成人网| 最新欧美电影| 97超碰最新| 亚洲欧美一级| 国产尤物99| 日韩成人18| 欧美精品国产精品久久久| 久久久五月天| 成人在线免费在线观看| 亚洲三级国产| 国产一区 在线播放| 丝袜亚洲另类欧美综合| 色男人天堂av| 国产精品一区二区在线观看网站 | 国产污视频在线播放| 国产一区二区香蕉| 精品福利一区| 一区二区三区我不卡| 美女网站久久| 国产性xxxx18免费观看视频| 久久99久久99| 天天干天天色天天干| av在线不卡免费看| av最新在线观看| 色婷婷国产精品综合在线观看| 99热只有这里有精品| 精品久久久久久亚洲国产300| 五月天婷婷丁香| 91精品国产91热久久久做人人| 欧美黄色小说| 欧美精品18videosex性欧美| 黄毛片在线观看| 亚洲伊人一本大道中文字幕| 欧美日韩一区二区综合| 无码人妻精品一区二区蜜桃网站| 奇米影视一区二区三区| 91av在线免费| 久久久久亚洲蜜桃| 国产精品theporn动漫| 8v天堂国产在线一区二区| 六十路在线观看| 91av在线看| 成人在线视频你懂的| 先锋影音男人资源| 男男视频亚洲欧美| 天天躁日日躁aaaxxⅹ| 性久久久久久久久| 丰满岳乱妇国产精品一区| 欧美精品在线播放| 精品中文视频| 免费国产成人看片在线| 久久99精品久久久久婷婷| 亚洲无人区码一码二码三码的含义| 日韩欧美一区二区三区久久| 天天操天天操天天干| 夜夜躁日日躁狠狠久久88av| 免费毛片b在线观看| 国产综合 伊人色| 一区二区三区成人精品| 精品少妇人妻av一区二区三区| 亚洲一区二区高清| 看黄色一级大片| 亚洲欧美日韩一区在线| 欧美性suv| 午夜欧美一区二区三区免费观看| 日本色综合中文字幕| 娇妻被老王脔到高潮失禁视频| 欧美怡红院视频| 婷婷在线视频| 91九色视频在线| 欧美a级网站| 一女被多男玩喷潮视频| 久久亚洲精华国产精华液| 中文字幕国产在线观看| 国产一区二区三区视频| 韩国理伦片久久电影网| 一区二区三区我不卡| 国产精品1区2区| 日韩美女视频网站| 亚洲摸下面视频| 久久免费资源| 在线观看17c| 不卡视频一二三四| 91视频久久久| 久久久精品国产亚洲| eeuss国产一区二区三区四区| 黄色一级片在线看| 久久夜色精品国产噜噜av| 最新在线中文字幕| 久久国产加勒比精品无码| 久久大胆人体视频| 三级a在线观看| 亚洲精品伦理在线| 精彩国产在线| 91精品综合视频| 亚洲黄色精品| 美女100%露胸无遮挡| 91精品国产欧美日韩| 欧美少妇精品| 一区高清视频| 97超碰欧美中文字幕| 一区二区三区免费在线视频| 欧美激情二区三区| 国产区一区二| 中国成人亚色综合网站| 国产成人av一区| 中文字幕日本视频| 欧美激情精品久久久久久大尺度| 亚洲妇女av| 欧美日韩亚洲一| 一区在线观看视频|