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

實戰三個有趣案例,十分鐘入門Canvas

開發 前端
canvas在前端的地位是越來越重要了,為此,我特地寫了3個小項目,讓你們10分鐘就能入門canvas。

前言

大家好,我是林三心,回想起我當年校招的時候啊,多次被面試官問到canvas,但是我卻不會,后來一直想找個機會學一下canvas,但是一直沒時間。canvas在前端的地位是越來越重要了,為此,我特地寫了3個小項目,讓你們10分鐘就能入門canvas,是的,我的心里沒有她,只有你們

一、canvas實現時鐘轉動

實現以下效果,分為幾步:

1、找到canvas的中心,畫出表心,以及表框

2、獲取當前時間,并根據時間畫出時針,分針,秒針,還有刻度

3、使用定時器,每過一秒獲取新的時間,并重新繪圖,達到時鐘轉動的效果

圖片圖片

1.1 表心,表框

畫表心,表框有兩個知識點:

1、找到canvas的中心位置

2、繪制圓形

//html

<canvas id="canvas" width="600" height="600"></canvas>

// js

// 設置中心點,此時300,300變成了坐標的0,0
ctx.translate(300, 300)
// 畫圓線使用arc(中心點X,中心點Y,半徑,起始角度,結束角度)
ctx.arc(0, 0, 100, 0, 2 * Math.PI)
ctx.arc(0, 0, 5, 0, 2 * Math.PI)
// 執行畫線段的操作stroke
ctx.stroke()

讓我們來看看效果,發現了,好像不對啊,我們是想畫兩個獨立的圓線,怎么畫出來的兩個圓連到一起了:

圖片圖片

原因是:上面代碼畫連個圓時,是連著畫的,所以畫完大圓后,線還沒斬斷,就接著畫小圓,那肯定會大圓小圓連一起,解決辦法就是:beginPath,closePath

ctx.translate(300, 300) // 設置中心點,此時300,300變成了坐標的0,0

// 畫大圓
+ ctx.beginPath()
// 畫圓線使用arc(中心點X,中心點Y,半徑,起始角度,結束角度)
  ctx.arc(0, 0, 100, 0, 2 * Math.PI)
  ctx.stroke() // 執行畫線段的操作
+ ctx.closePath()

// 畫小圓
+ ctx.beginPath()
  ctx.arc(0, 0, 5, 0, 2 * Math.PI)
  ctx.stroke()
+ ctx.closePath()

1.2 時針,分針,秒針

畫這三個指針,有兩個知識點:

1、根據當前時,分,秒去計算角度

2、在計算好的角度上去畫出時針,分針,秒針 如何根據算好的角度去畫線呢,比如算出當前是3點,那么時針就應該以12點為起始點,順時針旋轉2 * Math.PI / 12 * 3 = 90°,分針和秒針也是同樣的道理,只不過跟時針不同的是比例問題而已,因為時在表上有12份,而分針和秒針都是60份

圖片截屏2021-07-19 下午10.07.19.png

這時候又有一個新問題,還是以上面的例子為例,我算出了90°,那我們怎么畫出時針呢?我們可以使用moveTo和lineTo去畫線段。至于90°,我們只需要將x軸順時針旋轉90°,然后再畫出這條線段,那就得到了指定角度的指針了。但是上面說了,是要以12點為起始點,我們的默認x軸確是水平的,所以我們時分秒針算出角度后,每次都要減去90°。可能這有點繞,我們通過下面的圖演示一下,還是以上面3點的例子:

圖片圖片

截屏2021-07-19 下午10.30.23.png

圖片圖片

這樣就得出了3點指針的畫線角度了。

又又又有新問題了,比如現在我畫完了時針,然后我想畫分針,x軸已經在我畫時針的時候偏轉了,這時候肯定要讓x軸恢復到原來的模樣,我們才能繼續畫分針,否則畫出來的分針是不準的。這時候save和restore就派上用場了,save是把ctx當前的狀態打包壓入棧中,restore是取出棧頂的狀態并賦值給ctx,save可多次,但是restore取狀態的次數必須等于save次數

圖片圖片

截屏2021-07-19 下午10.42.06.png

懂得了上面所說,剩下畫刻度了,起始刻度的道理跟時分秒針道理一樣,只不過刻度是死的,不需要計算,只需要規則畫出60個小刻度,和12個大刻度就行

const canvas = document.getElementById('canvas')
const ctx = canvas.getContext('2d')

ctx.translate(300, 300) // 設置中心點,此時300,300變成了坐標的0,0
// 把狀態保存起來
+ ctx.save()

// 畫大圓
ctx.beginPath()
// 畫圓線使用arc(中心點X,中心點Y,半徑,起始角度,結束角度)
ctx.arc(0, 0, 100, 0, 2 * Math.PI)
ctx.stroke() // 執行畫線段的操作
ctx.closePath()

// 畫小圓
ctx.beginPath()
ctx.arc(0, 0, 5, 0, 2 * Math.PI)
ctx.stroke()
ctx.closePath()

----- 新加代碼  ------

// 獲取當前 時,分,秒
let time = new Date()
let hour = time.getHours() % 12
let min = time.getMinutes()
let sec = time.getSeconds()

// 時針
ctx.rotate(2 * Math.PI / 12 * hour + 2 * Math.PI / 12 * (min / 60) - Math.PI / 2)
ctx.beginPath()
// moveTo設置畫線起點
ctx.moveTo(-10, 0)
// lineTo設置畫線經過點
ctx.lineTo(40, 0)
// 設置線寬
ctx.lineWidth = 10
ctx.stroke()
ctx.closePath()
// 恢復成上一次save的狀態
ctx.restore()
// 恢復完再保存一次
ctx.save()

// 分針
ctx.rotate(2 * Math.PI / 60 * min + 2 * Math.PI / 60 * (sec / 60) - Math.PI / 2)
ctx.beginPath()
ctx.moveTo(-10, 0)
ctx.lineTo(60, 0)
ctx.lineWidth = 5
ctx.strokeStyle = 'blue'
ctx.stroke()
ctx.closePath()
ctx.restore()
ctx.save()

//秒針
ctx.rotate(2 * Math.PI / 60 * sec -  - Math.PI / 2)
ctx.beginPath()
ctx.moveTo(-10, 0)
ctx.lineTo(80, 0)
ctx.strokeStyle = 'red'
ctx.stroke()
ctx.closePath()
ctx.restore()
ctx.save()

// 繪制刻度,也是跟繪制時分秒針一樣,只不過刻度是死的
ctx.lineWidth = 1
for (let i = 0; i < 60; i++) {
    ctx.rotate(2 * Math.PI / 60)
    ctx.beginPath()
    ctx.moveTo(90, 0)
    ctx.lineTo(100, 0)
    // ctx.strokeStyle = 'red'
    ctx.stroke()
    ctx.closePath()
}
ctx.restore()
ctx.save()
ctx.lineWidth = 5
for (let i = 0; i < 12; i++) {
    ctx.rotate(2 * Math.PI / 12)
    ctx.beginPath()
    ctx.moveTo(85, 0)
    ctx.lineTo(100, 0)
    ctx.stroke()
    ctx.closePath()
}

ctx.restore()

圖片圖片

最后一步就是更新視圖,使時鐘轉動起來,第一想到的肯定是定時器setInterval,但是注意一個問題:每次更新視圖的時候都要把上一次的畫布清除,再開始畫新的視圖,不然就會出現千手觀音的景象

圖片圖片

附上最終代碼:

const canvas = document.getElementById('canvas')
const ctx = canvas.getContext('2d')

setInterval(() => {
    ctx.save()
    ctx.clearRect(0, 0, 600, 600)
    ctx.translate(300, 300) // 設置中心點,此時300,300變成了坐標的0,0
    ctx.save()

    // 畫大圓
    ctx.beginPath()
    // 畫圓線使用arc(中心點X,中心點Y,半徑,起始角度,結束角度)
    ctx.arc(0, 0, 100, 0, 2 * Math.PI)
    ctx.stroke() // 執行畫線段的操作
    ctx.closePath()

    // 畫小圓
    ctx.beginPath()
    ctx.arc(0, 0, 5, 0, 2 * Math.PI)
    ctx.stroke()
    ctx.closePath()

    // 獲取當前 時,分,秒
    let time = new Date()
    let hour = time.getHours() % 12
    let min = time.getMinutes()
    let sec = time.getSeconds()

    // 時針
    ctx.rotate(2 * Math.PI / 12 * hour + 2 * Math.PI / 12 * (min / 60) - Math.PI / 2)
    ctx.beginPath()
    // moveTo設置畫線起點
    ctx.moveTo(-10, 0)
    // lineTo設置畫線經過點
    ctx.lineTo(40, 0)
    // 設置線寬
    ctx.lineWidth = 10
    ctx.stroke()
    ctx.closePath()
    ctx.restore()
    ctx.save()

    // 分針
    ctx.rotate(2 * Math.PI / 60 * min + 2 * Math.PI / 60 * (sec / 60) - Math.PI / 2)
    ctx.beginPath()
    ctx.moveTo(-10, 0)
    ctx.lineTo(60, 0)
    ctx.lineWidth = 5
    ctx.strokeStyle = 'blue'
    ctx.stroke()
    ctx.closePath()
    ctx.restore()
    ctx.save()

    //秒針
    ctx.rotate(2 * Math.PI / 60 * sec - Math.PI / 2)
    ctx.beginPath()
    ctx.moveTo(-10, 0)
    ctx.lineTo(80, 0)
    ctx.strokeStyle = 'red'
    ctx.stroke()
    ctx.closePath()
    ctx.restore()
    ctx.save()

    // 繪制刻度,也是跟繪制時分秒針一樣,只不過刻度是死的
    ctx.lineWidth = 1
    for (let i = 0; i < 60; i++) {
        ctx.rotate(2 * Math.PI / 60)
        ctx.beginPath()
        ctx.moveTo(90, 0)
        ctx.lineTo(100, 0)
        // ctx.strokeStyle = 'red'
        ctx.stroke()
        ctx.closePath()
    }
    ctx.restore()
    ctx.save()
    ctx.lineWidth = 5
    for (let i = 0; i < 12; i++) {
        ctx.rotate(2 * Math.PI / 12)
        ctx.beginPath()
        ctx.moveTo(85, 0)
        ctx.lineTo(100, 0)
        // ctx.strokeStyle = 'red'
        ctx.stroke()
        ctx.closePath()
    }

    ctx.restore()
    ctx.restore()
}, 1000)

效果 very good啊:

clock的副本clock的副本

二、canvas實現刮刮卡

小時候很多人都買過充值卡把,懂的都懂啊哈,用指甲刮開這層灰皮,就能看底下的答案了。

圖片圖片

思路是這樣的:

1、底下答案是一個div,頂部灰皮是一個canvas,canvas一開始蓋住div

2、鼠標事件,點擊時并移動時,鼠標經過的路徑都畫圓形開路,并且設置globalCompositeOperation為destination-out,使鼠標經過的路徑都變成透明,一透明,自然就顯示出下方的答案信息。

關于fill這個方法,其實是對標stroke的,fill是把圖形填充,stroke只是畫出邊框線

// html
<canvas id="canvas" width="400" height="100"></canvas>
<div class="text">恭喜您獲得100w</div>
<style>
        * {
            margin: 0;
            padding: 0;
        }
        .text {
            position: absolute;
            left: 130px;
            top: 35px;
            z-index: -1;
        }
</style>


// js
const canvas = document.getElementById('canvas')
const ctx = canvas.getContext('2d')

// 填充的顏色
ctx.fillStyle = 'darkgray'
// 填充矩形 fillRect(起始X,起始Y,終點X,終點Y)
ctx.fillRect(0, 0, 400, 100)
ctx.fillStyle = '#fff'
// 繪制填充文字
ctx.fillText('刮刮卡', 180, 50)

let isDraw = false
canvas.onmousedown = function () {
    isDraw = true
}
canvas.onmousemove = function (e) {
    if (!isDraw) return
    // 計算鼠標在canvas里的位置
    const x = e.pageX - canvas.offsetLeft
    const y = e.pageY - canvas.offsetTop
    // 設置globalCompositeOperation
    ctx.globalCompositeOperation = 'destination-out'
    // 畫圓
    ctx.arc(x, y, 10, 0, 2 * Math.PI)
    // 填充圓形
    ctx.fill()
}
canvas.onmouseup = function () {
    isDraw = false
}

效果如下:

guaguaka.gifguaguaka.gif

三、canvas實現畫板和保存

框架:使用vue + elementUI

其實很簡單,難點有以下幾點:

1、鼠標拖拽畫正方形和圓形

2、畫完一個保存畫布,下次再畫的時候疊加

3、保存圖片

第一點,只需要計算出鼠標點擊的點坐標,以及鼠標的當前坐標,就可以計算了,矩形長寬計算:x - beginX, y - beginY,圓形則要利用勾股定理:Math.sqrt((x - beginX) * (x - beginX) + (y - beginY) * (y - beginY))

第二點,則要利用canvas的getImageData和putImageData方法

第三點,思路是將canvas生成圖片鏈接,并賦值給具有下載功能的a標簽,并主動點擊a標簽進行圖片下載

看看效果吧:

圖片圖片

圖片圖片

具體代碼我就不過多講解了,說難也不難,只要前面兩個項目理解了,這個項目很容易就懂了:

<template>
  <div>
    <div style="margin-bottom: 10px; display: flex; align-items: center">
      <el-button @click="changeType('huabi')" type="primary">畫筆</el-button>
      <el-button @click="changeType('rect')" type="success">正方形</el-button>
      <el-button
        @click="changeType('arc')"
        type="warning"
        style="margin-right: 10px"
        >圓形</el-button
      >
      <div>顏色:</div>
      <el-color-picker v-model="color"></el-color-picker>
      <el-button @click="clear">清空</el-button>
      <el-button @click="saveImg">保存</el-button>
    </div>
    <canvas
      id="canvas"
      width="800"
      height="400"
      @mousedown="canvasDown"
      @mousemove="canvasMove"
      @mouseout="canvasUp"
      @mouseup="canvasUp"
    >
    </canvas>
  </div>
</template>

<script>
export default {
  data() {
    return {
      type: "huabi",
      isDraw: false,
      canvasDom: null,
      ctx: null,
      beginX: 0,
      beginY: 0,
      color: "#000",
      imageData: null,
    };
  },
  mounted() {
    this.canvasDom = document.getElementById("canvas");
    this.ctx = this.canvasDom.getContext("2d");
  },
  methods: {
    changeType(type) {
      this.type = type;
    },
    canvasDown(e) {
      this.isDraw = true;
      const canvas = this.canvasDom;
      this.beginX = e.pageX - canvas.offsetLeft;
      this.beginY = e.pageY - canvas.offsetTop;
    },
    canvasMove(e) {
      if (!this.isDraw) return;
      const canvas = this.canvasDom;
      const ctx = this.ctx;
      const x = e.pageX - canvas.offsetLeft;
      const y = e.pageY - canvas.offsetTop;
      this[`${this.type}Fn`](ctx, x, y);
    },
    canvasUp() {
      this.imageData = this.ctx.getImageData(0, 0, 800, 400);
      this.isDraw = false;
    },
    huabiFn(ctx, x, y) {
      ctx.beginPath();
      ctx.arc(x, y, 5, 0, 2 * Math.PI);
      ctx.fillStyle = this.color;
      ctx.fill();
      ctx.closePath();
    },
    rectFn(ctx, x, y) {
      const beginX = this.beginX;
      const beginY = this.beginY;
      ctx.clearRect(0, 0, 800, 400);
      this.imageData && ctx.putImageData(this.imageData, 0, 0, 0, 0, 800, 400);
      ctx.beginPath();
      ctx.strokeStyle = this.color;
      ctx.rect(beginX, beginY, x - beginX, y - beginY);
      ctx.stroke();
      ctx.closePath();
    },
    arcFn(ctx, x, y) {
      const beginX = this.beginX;
      const beginY = this.beginY;
      this.isDraw && ctx.clearRect(0, 0, 800, 400);
      this.imageData && ctx.putImageData(this.imageData, 0, 0, 0, 0, 800, 400);
      ctx.beginPath();
      ctx.strokeStyle = this.color;
      ctx.arc(
        beginX,
        beginY,
        Math.round(
          Math.sqrt((x - beginX) * (x - beginX) + (y - beginY) * (y - beginY))
        ),
        0,
        2 * Math.PI
      );
      ctx.stroke();
      ctx.closePath();
    },
    saveImg() {
      const url = this.canvasDom.toDataURL();
      const a = document.createElement("a");
      a.download = "sunshine";
      a.href = url;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
    },
    clear() {
        this.imageData = null
        this.ctx.clearRect(0, 0, 800, 400)
    }
  },
};
</script>

<style lang="scss" scoped>
#canvas {
  border: 1px solid black;
}
</style>


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

2023-10-12 09:31:27

SkyWalking微服務

2020-12-17 06:48:21

SQLkafkaMySQL

2022-06-16 07:31:41

Web組件封裝HTML 標簽

2012-07-10 01:22:32

PythonPython教程

2019-04-01 14:59:56

負載均衡服務器網絡

2023-03-13 07:52:13

2023-06-07 08:27:10

Docker容器

2024-06-19 09:58:29

2021-09-07 09:40:20

Spark大數據引擎

2023-04-12 11:18:51

甘特圖前端

2024-01-29 00:20:00

GolangGo代碼

2023-11-30 10:21:48

虛擬列表虛擬列表工具庫

2024-05-13 09:28:43

Flink SQL大數據

2015-09-06 09:22:24

框架搭建快速高效app

2025-03-18 12:20:00

編程

2024-11-07 16:09:53

2022-08-26 09:01:07

CSSFlex 布局

2023-07-15 18:26:51

LinuxABI

2009-10-09 14:45:29

VB程序

2019-09-16 09:14:51

點贊
收藏

51CTO技術棧公眾號

色婷婷久久久亚洲一区二区三区| 蜜桃av噜噜一区| 精品福利视频一区二区三区| 亚洲人成无码网站久久99热国产| 偷拍自拍在线视频| 琪琪一区二区三区| 欧美日本高清视频| 成人免费网站黄| a一区二区三区亚洲| 一区二区三区91| 欧美成熟毛茸茸复古| 国产又黄又爽视频| 在线视频亚洲| 久久中文字幕在线视频| 日本护士做爰视频| 青青在线精品| 精品国产乱码久久久久酒店| 亚洲免费在线精品一区| 丰满岳乱妇国产精品一区| 久久天天综合| 久久久视频在线| 激情无码人妻又粗又大| 欧美偷窥清纯综合图区| 欧美一级高清片| 黄色av免费在线播放| 密臀av在线| 国产精品第四页| 久久亚洲国产精品日日av夜夜| 国产又粗又猛又黄又爽无遮挡| 中文高清一区| 欧美成人午夜免费视在线看片| 全黄一级裸体片| 国产精品极品| 欧美一区午夜视频在线观看| 欧美亚洲日本在线观看| 四虎影视国产在线视频| 中文一区在线播放| 欧美在线视频二区| 日本大臀精品| 99国产精品久久久久久久久久久| 97se亚洲综合| 国产精品久久久久久69| 毛片不卡一区二区| 国产成人鲁鲁免费视频a| 日韩在线观看第一页| 韩国在线视频一区| 欧美日韩国产91| 国产乱国产乱老熟300| 色天天综合网| www.欧美三级电影.com| 亚洲AV成人无码网站天堂久久| 免费不卡中文字幕在线| 精品调教chinesegay| 在线免费观看污视频| 精品女人视频| 日韩精品一区二区三区第95| 中文字幕一区二区久久人妻网站| 欧美大胆视频| 亚洲女同精品视频| 日本二区在线观看| 成人综合久久| 精品国偷自产在线视频99| 懂色av蜜臀av粉嫩av永久| 国产精品99久久| 麻豆成人在线看| 久久久久久天堂| 亚洲国产日本| 欧美亚州一区二区三区| 无码人妻精品一区二区| 视频一区视频二区中文| 国产精品丝袜高跟| 中文永久免费观看| 国内欧美视频一区二区| 99热最新在线| 午夜福利视频一区二区| 久久精品亚洲乱码伦伦中文| 日本精品二区| 精品黄色免费中文电影在线播放| 亚洲蜜臀av乱码久久精品蜜桃| 97av中文字幕| 亚洲少妇视频| 欧美日韩精品一区二区天天拍小说| 加勒比av中文字幕| 成人另类视频| 亚洲图片制服诱惑| 免费国产羞羞网站美图| 99热免费精品在线观看| 国产精品久久二区| 国产按摩一区二区三区| 91视频国产观看| 99精品视频网站| hd国产人妖ts另类视频| 欧美亚洲动漫另类| 巨乳女教师的诱惑| 亚洲图区在线| 久久成人一区二区| 国产成人在线免费视频| 久久精品999| 精品视频一区二区三区四区| 天堂а√在线资源在线| 亚洲成av人影院在线观看网| 人人爽人人av| 国产精品白丝av嫩草影院| 中文字幕国产亚洲| 欧美亚韩一区二区三区| 裸体一区二区三区| 久久综合毛片| 色爱综合区网| 欧美喷水一区二区| 国产熟妇搡bbbb搡bbbb| 你懂的视频一区二区| 国产91在线播放| 亚洲av无码一区二区三区dv | 中文字幕天堂av| 欧美丝袜丝交足nylons172| 欧美激情亚洲精品| 91福利在线观看视频| 26uuu国产一区二区三区| 日韩成人午夜影院| 福利视频亚洲| 亚洲免费av片| 国产午夜福利一区二区| 极品少妇xxxx精品少妇| 欧美一卡2卡3卡4卡无卡免费观看水多多| 中国av在线播放| 欧美丝袜丝交足nylons| 日韩av一二区| 国产日韩亚洲欧美精品| 国产高清在线精品一区二区三区| 日本高清视频在线观看| 欧美在线一区二区三区| 大黑人交xxx极品hd| 影音先锋中文字幕一区二区| 亚洲精品日韩激情在线电影| 日本不卡视频| 欧美日韩国产高清一区二区三区 | 无码精品一区二区三区在线 | 午夜精品免费观看| 99精品欧美一区二区三区综合在线| 91xxx视频| 亚洲男人在线| 中文字幕一精品亚洲无线一区| 精品人妻一区二区三区潮喷在线| 99re热视频精品| 亚洲熟妇无码另类久久久| 成人福利免费在线观看| 久久久亚洲精选| 欧美天堂在线视频| 午夜精品福利在线| 国产国语性生话播放| 国产日韩高清一区二区三区在线| 精品免费一区二区三区蜜桃| 日本а中文在线天堂| 日韩av在线免费看| 国产精品久久久久久久久久久久久久久久久 | 欧美日韩久久精品| 国产成人在线亚洲欧美| 超碰97在线免费观看| 欧美日韩卡一卡二| 国产在线一卡二卡| 粉嫩av亚洲一区二区图片| 国产va亚洲va在线va| 欧洲精品一区| 国产精品久久久久久久久久ktv| yiren22亚洲综合伊人22| 欧美日韩在线播放一区| 国产精品国产精品88| 国产成人精品影院| 无码精品a∨在线观看中文| 蜜桃一区二区三区| 国产在线观看一区二区三区| 亚洲欧美成人影院| 亚洲精品国产精品自产a区红杏吧| 日韩精品一区二区亚洲av| 欧美高清一级片在线观看| 国模私拍视频在线观看| 欧美淫片网站| 蜜桃日韩视频| 亚洲男人在线| 久久久噜噜噜久久中文字免| 日韩美女激情视频| 国产精品一区二区性色av| 91国内在线视频| 久久精品99久久久久久| 国产69精品久久777的优势| 日韩av中文字幕第一页| 综合亚洲自拍| 成人国产精品一区| jizz一区二区三区| 中文字幕国产亚洲| 色婷婷av一区二区三区之红樱桃 | 国产成人一二三区| 要久久爱电视剧全集完整观看| 国产精品一区专区欧美日韩| 后进极品白嫩翘臀在线播放| 亚洲欧美制服中文字幕| 99久久一区二区| 一本色道久久综合精品竹菊| 黄色片子在线观看| 久久蜜桃香蕉精品一区二区三区| 国产美女18xxxx免费视频| 亚洲少妇诱惑| 四虎影院一区二区| 国产精品一区二区av交换| av日韩免费电影| 国产a亚洲精品| 91精品国产高清自在线| 老司机午夜在线视频| 亚洲欧美成人精品| www.好吊色| 欧美探花视频资源| 青青草成人av| 亚洲黄网站在线观看| 国产三级短视频| 97se亚洲国产综合自在线不卡 | bt7086福利一区国产| 亚洲午夜激情影院| 日韩电影在线观看电影| 亚洲国产成人精品无码区99| 91精品91| 亚洲一区二区高清视频| 亚洲色图丝袜| 精品久久久久久一区二区里番| 欧美国产亚洲精品| 国产日韩欧美中文| 欧美va在线观看| 欧美怡春院一区二区三区| 欧美女同一区| 欧美日韩成人在线观看| www在线观看播放免费视频日本| 伊人久久精品视频| 日韩av视屏| 日韩av综合网| 亚洲三区在线播放| 亚洲电影av在线| 六月婷婷中文字幕| 欧美大片顶级少妇| 精品区在线观看| 欧美一卡二卡在线观看| 国产露脸国语对白在线| 欧美精品一级二级三级| 中文字幕第31页| 欧美日韩免费视频| 亚洲一级特黄毛片| 欧美人妇做爰xxxⅹ性高电影 | 成人免费看片98| 一区二区在线观看av| 亚洲国产美女视频| 亚洲卡通欧美制服中文| 波多野结衣不卡视频| 一区二区三区四区精品在线视频 | 婷婷五月在线视频| 最近更新的2019中文字幕| 婷婷免费在线视频| 欧美猛交免费看| av2020不卡| 2023亚洲男人天堂| 日韩国产网站| 91久久在线视频| 国产成人在线中文字幕| 精品日产一区2区三区黄免费 | 在线观看视频99| 大片免费在线观看| 欧美国产精品日韩| 日韩精品极品| 国产精品久久不能| 精品一区二区三区视频在线播放| 99re在线国产| 五月综合久久| 亚洲一区三区视频在线观看| 亚洲国产不卡| 男人用嘴添女人下身免费视频| 久久亚洲美女| 久久久久久久久久一区二区| 国产成人欧美日韩在线电影| 日本xxxx裸体xxxx| 国产精品免费看片| 国产一级视频在线观看| 在线免费观看日本欧美| 国产色片在线观看| 亚洲国产欧美一区| 成人动漫在线播放| 欧美日韩国产二区| 偷拍视频一区二区三区| 91色p视频在线| 婷婷国产精品| 99精品一区二区三区的区别| 亚洲免费精品| 午夜剧场在线免费观看| 粉嫩av亚洲一区二区图片| 中文字幕在线观看免费高清| 亚洲日本青草视频在线怡红院| 日本少妇bbwbbw精品| 欧美日韩视频在线第一区 | 国产午夜精品视频| 蜜臀av在线| 91精品久久久久久久久久久久久 | 欧美乱做爰xxxⅹ久久久| 可以免费看不卡的av网站| 欧美人与性动交α欧美精品| 久久精品夜夜夜夜久久| 国产亚洲欧美精品久久久久久| 欧美色区777第一页| 熟妇人妻一区二区三区四区| 精品国产欧美成人夜夜嗨| 在线观看爽视频| 9a蜜桃久久久久久免费| 色婷婷一区二区三区| 亚洲国产精品久久久久婷蜜芽| 国产一区二区免费视频| 中文字幕在线1| 亚洲mv大片欧洲mv大片精品| 国产精品久久久久久免费免熟| 国产亚洲精品美女久久久久| caoporn视频在线观看| 亚洲曰本av电影| 日韩欧美一区二区三区在线视频| 日韩精品xxxx| 丁香婷婷综合激情五月色| 小泽玛利亚一区| 欧美午夜不卡在线观看免费| 青青草在线播放| 国内精品久久久久久久久| 麻豆国产一区二区三区四区| 亚洲在线欧美| 蜜桃视频免费观看一区| 3d动漫精品啪啪一区二区下载| 亚洲国产日韩a在线播放性色| 国产精品羞羞答答在线| 日韩视频第一页| 久久免费资源| 亚洲免费在线精品一区| 日韩av网站免费在线| 日本一道本视频| 在线观看亚洲精品视频| 欧美新色视频| 日韩av不卡在线| 国产一区二区三区四区五区| 青青草原av在线播放| 91在线码无精品| 欧美在线观看不卡| 国产丝袜一区二区三区免费视频| 国产欧洲在线| 免费日韩电影在线观看| 亚洲一区二区三区四区五区午夜| 精品无码在线视频| 懂色av一区二区三区| 天堂网www中文在线| 日产精品久久久一区二区福利| 国产成人1区| 日日噜噜夜夜狠狠| **性色生活片久久毛片| 国产乱人乱偷精品视频a人人澡| 精品国偷自产在线视频| 日韩一区二区三区精品视频第3页| 日本大片免费看| www.爱久久.com| 精品免费囯产一区二区三区| 一本一道久久a久久精品逆3p | 91桃色在线| 免费中文日韩| 免费日本视频一区| 91麻豆免费视频网站| 欧美变态凌虐bdsm| 嗯啊主人调教在线播放视频| 欧美日韩在线观看一区| 美女脱光内衣内裤视频久久网站 | 精品乱人伦小说| 三级中文字幕在线观看| 视频一区二区在线观看| 狠狠狠色丁香婷婷综合激情| 欧美人妻精品一区二区三区| 日韩av在线最新| 久久青草免费| 九色自拍视频在线观看| 欧美激情一区二区三区全黄| 国产精品爽爽久久久久久| 久久久久久久久网站| 国产在视频线精品视频www666| 香蕉视频999| 亚洲成人一二三| 91精彩在线视频| 高清国产在线一区| 日韩av二区在线播放| 欧美成人精品欧美一级| 亚洲精品午夜精品| www 久久久| 国产淫片av片久久久久久| 亚洲欧洲综合另类在线| 四虎影视2018在线播放alocalhost| 国产狼人综合免费视频| 在线日韩电影| 来吧亚洲综合网| 亚洲国产精品va在线| 国产极品一区| 女人喷潮完整视频| 亚洲免费资源在线播放| 毛片在线播放网址| 成人久久18免费网站漫画| 日韩成人午夜精品|