成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > 詳解如何在Canvas中添加事件的方法

詳解如何在Canvas中添加事件的方法

熱門(mén)標(biāo)簽:江西ai電銷機(jī)器人如何 通遼地圖標(biāo)注app 地圖標(biāo)注沿海城市房?jī)r(jià) 西安金倫外呼系統(tǒng) 威海語(yǔ)音外呼系統(tǒng)平臺(tái) 地圖標(biāo)注員工作內(nèi)容 中國(guó)地圖標(biāo)注城市的 高德地圖標(biāo)注廁所 智能語(yǔ)音電銷機(jī)器人客戶端

作為一個(gè)前端,給元素添加事件是一件司空見(jiàn)慣的事情??墒窃贑anvas中,其所畫(huà)的任何東西都是無(wú)法獲取的,更別說(shuō)添加事件,那么我們對(duì)其就束手無(wú)策了嗎?當(dāng)然不是的!我們?cè)谄綍r(shí)項(xiàng)目中肯定都用過(guò)許多Canvas的框架,我們發(fā)現(xiàn)事件在這些框架中已經(jīng)使用的十分成熟了,而且并沒(méi)有出現(xiàn)特別嚴(yán)重的問(wèn)題。那么我們可以肯定的是,事件在Canvas中并不是一個(gè)無(wú)法觸及的事情。

一個(gè)傻瓜式的方式

我們都知道一個(gè)元素在觸發(fā)一個(gè)事件時(shí),其鼠標(biāo)的位置基本處于該元素之上,那么我們就自然而然的想到通過(guò)當(dāng)前鼠標(biāo)的位置以及物體所占據(jù)的位置進(jìn)行比對(duì),從而我們就能得出該物體是否應(yīng)觸發(fā)事件。這種方式比較簡(jiǎn)單,我就不用代碼演示了,不過(guò)既然我叫它傻瓜式的方式,很明顯它不是一個(gè)有效的解決方式。因?yàn)槲矬w所占據(jù)的位置并不一定是十分容易獲取,如果是矩形、圓形等我們還能通過(guò)一些簡(jiǎn)單的公式獲取其占據(jù)的位置,可是在復(fù)雜點(diǎn)的多邊形,甚至是多邊形的某些邊是弧線的,顯而易見(jiàn),我們這時(shí)候再獲取其所占據(jù)的位置時(shí)是一件極其復(fù)雜且難度極大的事情,所以這種方式只適合自己在做一些demo中使用,并不適用于大多數(shù)的情況。

一個(gè)較聰明的方式

既然上面這種方式碰壁了,那么我們只能另辟蹊徑。在翻閱CanvasAPI的時(shí)候,找到了一個(gè)方法isPointInPath,貌似正是我們苦苦尋找的良藥。

介紹isPointInPath

isPointInPath的作用:顧名思義,我們很直觀的可以知道該方法用以判斷點(diǎn)是否處于路徑當(dāng)中。

isPointInPath的入?yún)⒊鰠ⅲ篶tx.isPointInPath([path, ]x, y [, fillRule]),該方法的參數(shù)有4個(gè),其中path和fillRule為選填,x和y為必填。我們依次介紹4個(gè)參數(shù)。

path:看到這個(gè)參數(shù),我開(kāi)始以為是beginPath或者closePath的返回值,很可惜的是這兩個(gè)方法并沒(méi)有返回值,在查閱了資料后,發(fā)現(xiàn)是Path2D構(gòu)造函數(shù)new的對(duì)象。Path2D構(gòu)造函數(shù)具體用法。不過(guò)可惜的是該方法可能由于兼容性的問(wèn)題,目前看了一些開(kāi)源框架都還未使用。

x,y:這兩個(gè)參數(shù)很好理解,就是x軸和y軸的距離,需要注意的是,其相對(duì)位置是Canvas的左上角。

fillRule:nonzero(默認(rèn)),evenodd。非零環(huán)繞規(guī)則和奇偶規(guī)則是圖形學(xué)中判斷一個(gè)點(diǎn)是否處于多邊形內(nèi)的規(guī)則,其中非零環(huán)繞規(guī)則是Canvas的默認(rèn)規(guī)則。想具體了解這兩種規(guī)則的,可以自己去查閱資料,這里就不增加篇幅介紹了。

上面介紹完了入?yún)ⅲ敲磇sPointInPath方法的出參想必大家都可以猜到了,就是true和false。

使用isPointInPath

上一節(jié)介紹完isPointInPath方法后,我們現(xiàn)在就來(lái)使用它吧。

先來(lái)一個(gè)簡(jiǎn)單的demo:

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

  ctx.beginPath()
  ctx.moveTo(10, 10)
  ctx.lineTo(10, 50)
  ctx.lineTo(50, 50)
  ctx.lineTo(50, 10)
  ctx.fillStyle= 'black'
  ctx.fill()
  ctx.closePath()

  canvas.addEventListener('click', function (e) {
    const canvasInfo = canvas.getBoundingClientRect()
    console.log(ctx.isPointInPath(e.clientX - canvasInfo.left, e.clientY - canvasInfo.top))
  })

如圖所示,灰色部分為Canvas所占據(jù)的區(qū)域,黑色為我們實(shí)際添加事件的區(qū)域,在我們點(diǎn)擊黑色區(qū)域后,實(shí)際也的確如我們所愿,打印出來(lái)的值為true。貌似Canvas的事件監(jiān)聽(tīng)就這么簡(jiǎn)單的解決了,不過(guò)事情真有這么簡(jiǎn)單嗎。顯然是不可能的!我們?cè)賮?lái)舉個(gè)例子,這時(shí)候有兩個(gè)區(qū)域,并且我們需要分別給其綁定不同的事件:

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

  ctx.beginPath()
  ctx.moveTo(10, 10)
  ctx.lineTo(10, 50)
  ctx.lineTo(50, 50)
  ctx.lineTo(50, 10)
  ctx.fillStyle= 'black'
  ctx.fill()
  ctx.closePath()

  ctx.beginPath()
  ctx.moveTo(100, 100)
  ctx.lineTo(100, 150)
  ctx.lineTo(150, 150)
  ctx.lineTo(150, 100)
  ctx.fillStyle= 'red'
  ctx.fill()
  ctx.closePath()

  canvas.addEventListener('click', function (e) {
    const canvasInfo = canvas.getBoundingClientRect()
    console.log(ctx.isPointInPath(e.clientX - canvasInfo.left, e.clientY - canvasInfo.top))
  })

這個(gè)時(shí)候,結(jié)果就不再如同我們所預(yù)計(jì)的一樣,當(dāng)點(diǎn)擊其中黑色區(qū)域時(shí),打印的值為false,點(diǎn)擊紅色區(qū)域時(shí),打印的值為true。

其實(shí)原因很簡(jiǎn)單,因?yàn)樯鲜龃a,我們實(shí)際創(chuàng)建了兩個(gè)Path,而isPointInPath方法實(shí)際只檢測(cè)當(dāng)前點(diǎn)是否處于最后一個(gè)Path當(dāng)中,而例子中紅色區(qū)域?yàn)樽詈笠粋€(gè)Path,所以只有點(diǎn)擊紅色區(qū)域時(shí),isPointInPath方法才能判斷為true?,F(xiàn)在我們改造一下代碼:

  const canvas = document.getElementById('canvas')
  const ctx = canvas.getContext('2d')
  let drawArray = []

  function draw1 () {
    ctx.beginPath()
    ctx.moveTo(10, 10)
    ctx.lineTo(10, 50)
    ctx.lineTo(50, 50)
    ctx.lineTo(50, 10)
    ctx.fillStyle= 'black'
    ctx.fill()
  }

  function draw2 () {
    ctx.beginPath()
    ctx.moveTo(100, 100)
    ctx.lineTo(100, 150)
    ctx.lineTo(150, 150)
    ctx.lineTo(150, 100)
    ctx.fillStyle= 'red'
    ctx.fill()
    ctx.closePath()
  }

  drawArray.push(draw1, draw2)  

  drawArray.forEach(it => {
    it()
  })

  canvas.addEventListener('click', function (e) {
    ctx.clearRect(0, 0, 400, 750)
    const canvasInfo = canvas.getBoundingClientRect()
    drawArray.forEach(it => {
      it()
      console.log(ctx.isPointInPath(e.clientX - canvasInfo.left, e.clientY - canvasInfo.top))
    })
  })

上面的代碼我們進(jìn)行了一個(gè)很大的改造,我們將每個(gè)Path放入到一個(gè)單獨(dú)的函數(shù)當(dāng)中,并將它們push到一個(gè)數(shù)組當(dāng)中。當(dāng)觸發(fā)點(diǎn)擊事件時(shí),我們清空Canvas,并遍歷數(shù)組重新繪制,每當(dāng)繪制一個(gè)Path進(jìn)行一次判斷,從而在調(diào)用isPointInPath方法時(shí),我們能實(shí)時(shí)的獲取當(dāng)前的最后一個(gè)Path,進(jìn)而判斷出當(dāng)前點(diǎn)所處的Path當(dāng)中。

現(xiàn)在我們已經(jīng)間接的實(shí)現(xiàn)了對(duì)每個(gè)Path的單獨(dú)事件監(jiān)聽(tīng),可是其實(shí)現(xiàn)的方式需要一次又一次的重繪,那么有辦法不需要重繪就能監(jiān)聽(tīng)事件嗎?

首先我們需要知道一次又一次重繪的原因是因?yàn)閕sPointInPath方法是監(jiān)聽(tīng)的最后一個(gè)Path,不過(guò)我們?cè)诮榻B這個(gè)方法的時(shí)候,說(shuō)過(guò)其第一個(gè)參數(shù)是一個(gè)Path對(duì)象,當(dāng)我們傳遞了這個(gè)參數(shù)后,Path就不再去取最后一個(gè)Path而是使用我們傳遞進(jìn)去的這個(gè)Path,現(xiàn)在我們來(lái)個(gè)demo來(lái)驗(yàn)證其可行性:

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

  const path1 = new Path2D();
  path1.rect(10, 10, 100,100);
  ctx.fill(path1)
  const path2 = new Path2D();
  path2.moveTo(220, 60);
  path2.arc(170, 60, 50, 0, 2 * Math.PI);
  ctx.stroke(path2)

  canvas.addEventListener('click', function (e) {
    console.log(ctx.isPointInPath(path1, e.clientX, e.clientY))
    console.log(ctx.isPointInPath(path2, e.clientX, e.clientY))
  })

如上圖所示,我們點(diǎn)擊了左邊圖形,打印true,false;點(diǎn)擊右邊圖形,打印false,true。打印的結(jié)果表明是沒(méi)有問(wèn)題的,不過(guò)由于其兼容性還有待加強(qiáng),所以目前建議還是使用重繪方式來(lái)監(jiān)聽(tīng)事件。

結(jié)語(yǔ)

Canvas的事件監(jiān)聽(tīng)講到這里基本就差不多了,原理很簡(jiǎn)單,大家應(yīng)該都能掌握。

github地址 歡迎start

附錄

自己寫(xiě)的一個(gè)demo

  const canvas = document.getElementById('canvas')

  class rectangular {
    constructor (
      ctx, 
      {
        top = 0,
        left = 0,
        width = 30,
        height = 50,
        background = 'red'
      }
    ) {
      this.ctx = ctx
      this.top = top
      this.left = left
      this.width = width
      this.height = height
      this.background = background
    }

    painting () {
      this.ctx.beginPath()
      this.ctx.moveTo(this.left, this.top)
      this.ctx.lineTo(this.left + this.width, this.top)
      this.ctx.lineTo(this.left + this.width, this.top + this.height)
      this.ctx.lineTo(this.left, this.top + this.height)
      this.ctx.fillStyle = this.background
      this.ctx.fill()
      this.ctx.closePath()
    }

    adjust (left, top) {
      this.left += left
      this.top += top
    }
  }

  class circle {
    constructor (
      ctx, 
      {
        center = [],
        radius = 10,
        background = 'blue'
      }
    ) {
      this.ctx = ctx
      this.center = [center[0] === undefined ? radius : center[0], center[1] === undefined ? radius : center[1]]
      this.radius = radius
      this.background = background
    }

    painting () {

      this.ctx.beginPath()
      this.ctx.arc(this.center[0], this.center[1], this.radius, 0, Math.PI * 2, false)
      this.ctx.fillStyle = this.background
      this.ctx.fill()
      this.ctx.closePath()
    }

    adjust (left, top) {
      this.center[0] += left
      this.center[1] += top
    }
  }

  class demo {
    constructor (canvas) {
      this.canvasInfo = canvas.getBoundingClientRect()
      this.renderList = []
      this.ctx = canvas.getContext('2d')
      this.canvas = canvas
      this.rectangular = (config) => {
        let target = new rectangular(this.ctx, {...config})
        this.addRenderList(target)
        return this
      }

      this.circle = (config) => {
        let target = new circle(this.ctx, {...config})
        this.addRenderList(target)
        return this
      }
      this.addEvent()
    }

    addRenderList (target) {
      this.renderList.push(target)
    }

    itemToLast (index) {
      const lastItem = this.renderList.splice(index, 1)[0]

      this.renderList.push(lastItem)
    }

    painting () {
      this.ctx.clearRect(0, 0, this.canvasInfo.width, this.canvasInfo.height)
      this.renderList.forEach(it => it.painting())
    }

    addEvent () {
      const that = this
      let startX, startY

      canvas.addEventListener('mousedown', e => {
        startX = e.clientX
        startY = e.clientY
        let choosedIndex = null
        this.renderList.forEach((it, index) => {
          it.painting()
          if (this.ctx.isPointInPath(startX, startY)) {
            choosedIndex = index
          }
        })
        
        if (choosedIndex !== null) {
          this.itemToLast(choosedIndex)
        }

        document.addEventListener('mousemove', mousemoveEvent)
        document.addEventListener('mouseup', mouseupEvent)
        this.painting()
      })

      function mousemoveEvent (e) {
        const target = that.renderList[that.renderList.length - 1]
        const currentX = e.clientX
        const currentY = e.clientY
        target.adjust(currentX - startX, currentY - startY)
        startX = currentX
        startY = currentY
        that.painting()
      }

      function mouseupEvent (e) {
        const target = that.renderList[that.renderList.length - 1]
        const currentX = e.clientX
        const currentY = e.clientY

        target.adjust(currentX - startX, currentY - startY)
        startX = currentX
        startY = currentY
        that.painting()
        document.removeEventListener('mousemove', mousemoveEvent)
        document.removeEventListener('mouseup', mouseupEvent)
      }
    }
  }

  const yes = new demo(canvas)
    .rectangular({})
    .rectangular({top: 60, left: 60, background: 'blue'})
    .rectangular({top: 30, left: 20, background: 'green'})
    .circle()
    .circle({center: [100, 30], background: 'red', radius: 5})
    .painting()

到此這篇關(guān)于詳解如何在Canvas中添加事件的方法的文章就介紹到這了,更多相關(guān)Canvas添加事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

標(biāo)簽:眉山 河池 崇左 北海 阜陽(yáng) 營(yíng)口 晉中 青海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解如何在Canvas中添加事件的方法》,本文關(guān)鍵詞  詳解,如,何在,Canvas,中,添加,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解如何在Canvas中添加事件的方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于詳解如何在Canvas中添加事件的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    a级精品国产片在线观看| 日本不卡1234视频| 国产不卡在线| 激情视频在线观看免费| 丰满人妻一区二区三区无码av| 韩国18福利视频免费观看| 青青草原亚洲| 成人精品国产免费网站| 亚洲精品suv精品一区二区| 日韩欧美aⅴ综合网站发布| 午夜精品在线播放| 国产精品白丝喷水在线观看| 国产精品无码免费专区午夜| 中文字幕欧美人妻精品一区蜜臀| 99爱在线观看| 日韩成人手机在线| 中日韩美女免费视频网站在线观看| 美国成人毛片| 精品日韩一区二区| 性色av一区二区怡红| 韩国美女主播一区| 国产午夜精品一区二区三区| 黑人精品欧美一区二区蜜桃| 免费观看又污又黄在线观看国产| 欧美老女人在线视频| 欧美日韩三级| 欧美一区二区性放荡片| 波多野结衣国产| 久久99精品久久久久久久久久久久| 超碰成人在线免费观看| 免费91在线观看| 欧美日韩亚洲在线| 黄色国产在线观看| 欧美激情精品久久久久久黑人| 久久99精品国产.久久久久| 国产精品久久久久久久久久白浆| 91国自产精品中文字幕亚洲| 一区二区三区高清在线| 日韩伦理在线视频| 精品国产乱码久久久久久久久| 日韩一区国产二区欧美三区| 日本肉肉一区| 在线免费观看av网址| 欧美成人一二三| 久久黄色免费视频| 超碰在线观看91| 亚洲国产合集| 欧美交受高潮1| 亚洲午夜在线| 欧美日韩水蜜桃| 国产精品suv一区二区三区| 国产精品久久久久一区二区三区共| 五月婷婷免费视频| 丝袜久久网站| 在线观看日本一区| 亚洲一区二区三区四区五区黄| 一级毛片电影| 久久97精品| 亚洲福利电影网| 国产女主播一区| 亚洲一区二区三区sesese| 少妇精品一区二区| 亚洲一区二区三区在线观看网站| 狠狠狠色丁香婷婷综合久久五月| 免费av网站在线看| 欧美日韩高清一区| 国产另类第一区| 一级黄色片免费| 一级少妇精品久久久久久久| 亚洲成人av中文字幕| 麻豆网站视频在线观看| 熟女少妇一区二区三区| 色噜噜狠狠色综合欧洲selulu| 国产黄在线看| 国产精品免费丝袜| 最近更新在线中文字幕一页| 亚洲美女少妇无套啪啪呻吟| 久久精品国产亚洲一区二区三区| 女海盗2成人h版中文字幕| 亚洲精品一区中文字幕乱码| 国产亚洲精品久久777777| 亚洲自拍一区在线观看| 中文字幕亚洲一区在线观看| 国产精品一区一区三区| 国产三级一区| 国产伦精品一区二区三区四区视频| 一级片avav网址| 91中文在线| www.99色.com| 国产一区二区视频在线免费观看| 中文字幕一区二区三区四区五区| 亚洲欧美日韩在线| 最好看的中文字幕久久| 噜噜噜久久亚洲精品国产品小说| 欧美人伦禁忌dvd放荡欲情| 人与嘼交av免费| www.av在线| 欧美日韩亚洲国产成人| 69精品国产久热在线观看| 一本一道无码中文字幕精品热| 日韩精品社区| 欧美一区三区三区高中清蜜桃| 国产免费久久久| 国产福利91精品一区二区三区| 视频一区亚洲| 黄毛片在线观看| 免费观看羞羞视频网站| 国产精品毛片高清在线完整版| 中文精品久久久久人妻不卡| 肉色丝袜一区二区| www.精选视频.com| 日韩欧美不卡在线| 日韩亚洲欧美精品| 丰满少妇被猛烈进入| h版电影在线播放视频网址| 国产精品玖玖玖在线资源| 欧美亚洲成人精品| 五月天网站亚洲| 国产亚洲网站| 黄色日韩精品| 国产亚洲综合久久| 精品国产一区二区三区在线观看| 手机看片国产1024| 另类春色校园亚洲| 精品国产免费人成在线观看| 超碰在线免费av| 大桥未久一区二区三区| 欧美激情一级欧美精品| 欧美黑人疯狂性受xxxxx喷水| 精品欧美一区二区三区免费观看| 欧美一区二区三区爽大粗免费| 在线中文字幕-区二区三区四区| 中文字幕一区综合| 老司机福利在线观看| 五月激情综合| 91蝌蚪视频九色| 日韩一二三四| 国产精品传媒在线观看| 亚洲日本视频在线| 天堂俺去俺来也www久久婷婷| 91高清免费在线观看| 久久精品亚洲欧美日韩精品中文字幕| 91亚洲国产成人精品一区二区三| 欧美丰满熟妇bbbbbb百度| 精品视频久久| 综合国产第二页| 国产永久免费视频| 亚洲欧美乱综合图片区小说区| 国产成人精品视频ⅴa片软件竹菊| 国内精品**久久毛片app| 日本黄色a视频| 网站永久看片免费| 国产精品成人av性教育| 久久精品国产色蜜蜜麻豆| 国产精品亚洲成在人线| av激情在线| 欧美日韩一级片网站| 国产区一区二区三区| 精品视频在线一区二区| 91蝌蚪在线| 精品麻豆国产| 亚洲精品国产熟女久久久| 国产剧情在线观看一区二区| av中文在线资源| 日韩精品在线影院| 日韩一区二区三区四区在线| 国模私拍一区二区国模曼安| 免费不卡中文字幕在线| 野战少妇38p| 激情综合丁香五月| 日本国产一区| 成人性视频欧美一区二区三区| 日韩在线你懂得| 午夜在线观看视频网站| 国产美女黄色| 91福利电影| 日本超碰在线观看| 久久精品影视伊人网| 天天干天天舔天天射| 黄色一级片在线免费观看| 成人黄色免费网站在线观看| 欧美jizzhd欧美精品巨大| 国产成人麻豆精品午夜在线| 精品久久久久久久免费人妻| 图片婷婷一区| 一级片在线观看| 97**国产露脸精品国产| 亚洲激情第一区| 国产不卡在线| 一本大道久久a久久精品| 久久久欧美精品sm网站| 日本久久久久久久久久| 欧美日韩精品一区| 久久国产成人午夜av影院宅| 五月香视频在线观看| 91超碰国产在线| 538在线观看| 午夜一级毛片| 色狠狠综合天天综合综合| 亚洲区一区二区| 国产中文在线观看| 在线观看高清免费视频| www操com| 中文字幕国产综合| 四虎国产精品成人免费4hu| 周于希免费高清在线观看| 国产成人精品一区二区三区在线观看| 国产精品久久久久久一区二区三区| 日韩男人天堂| 中文字幕不卡在线视频极品| 蜜臀av国产精品久久久久| 色视频在线播放| 先锋影音日韩| 欧美视频在线看| 久久手机免费视频| 337p粉嫩大胆色噜噜噜噜亚洲| 国产美女诱惑一区二区| 欧美日韩第一| av成人手机在线| 亚洲激情午夜| 国产欧美短视频| 国产剧情在线观看一区二区| 日韩av在线天堂| 国产999在线观看| 97在线观看免费高清视频| 韩国av免费观看| 国产精品毛片一区二区| 亚洲精品国产精品国自产观看| 精品国产美女a久久9999| 成人综合婷婷国产精品久久免费| 日本不卡在线播放| 亚洲欧美日本一区二区| 97在线视频国产| 蜜桃色一区二区三区| 国产高清免费观看| 永久在线免费观看| 黄色av网站在线看| 97在线免费观看视频| www.国产精品一二区| 亚洲天堂日韩av| 亚洲日本高清| 杨幂一区二区三区免费看视频| 丝袜美腿一区二区三区| 91日韩在线视频| 天天综合日日夜夜精品| 久久久视频在线| 国产黄色一级电影| 国产自产自拍视频在线观看| 国产日产精品1区| 欧美艾v福利视频在线观看| 国产综合内射日韩久| 一二区成人影院电影网| 欧美性xxxxx极品| 国产夫绿帽单男3p精品视频| 精品亚洲aⅴ乱码一区二区三区| 黑人巨大精品欧美一区二区奶水| 九九视频这里只有精品| 超碰在线免费公开| 91免费看片| 精品亚洲精品福利线在观看| 亚洲不卡视频| 四虎4hutv紧急入口| 日本色七七影院| 欧美激情综合色| 国产精品第七页| 亚洲男同性恋视频| 国产视频网站一区二区三区| 欧美国产日韩在线播放| 精品久久久久久一区二区里番| 欧美猛交ⅹxxx乱大交视频| 国产一区二区三区不卡在线| 综合在线视频| 99久久精品国产精品久久| 亚洲成人自拍网| 亚洲天天做日日做天天谢日日欢| 九色在线观看视频| 精品日韩美女的视频高清| av在线播放不卡| 免费黄色小视频在线观看| 超碰中文在线| 久久久久99精品成人| 6080成人| 午夜精品婷婷| 91免费在线视频观看| 中文字幕第88页| 成年人免费看的视频| 国内精品久久久久影院一蜜桃| 国产91在线高潮白浆在线观看| 免费欧美视频| 午夜欧美福利视频| 97久久综合区小说区图片区| 91看片在线播放| av综合在线观看| 在线观看中文字幕码| 人禽交欧美网站免费| 亚洲高清不卡一区| 91精品久久久久久| 成人女性视频| 国产精品爱久久久久久久小说| 少妇高潮在线观看| 蜜桃成人在线视频| 亚洲狼人综合| 99热99在线| 国产精品理论在线观看| 国产美女精品在线| 不卡视频一区二区三区| 中文字幕三区| 色诱亚洲精品久久久久久| 小小水蜜桃在线观看| 国产伦精品一区二区三区视频我| 久久影视中文字幕| 成人av无码一区二区三区| 精品麻豆一区二区三区| www.在线欧美| 麻豆视频在线免费观看| 先锋影音在线资源站91| 国产精品午夜久久久久久| 你懂的一区二区| www.色五月| 97久久精品人人爽人人爽蜜臀| 亚洲国产综合自拍| 男女羞羞视频教学| 欧美日韩日日摸| 国内精品国产成人| 欧美最猛性xxxx免费| 国产一区三区三区| 国产丰满果冻videossex| h在线观看视频免费网站|