日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

HTML5 Canvas

發布時間:2025/3/15 HTML 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTML5 Canvas 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HTML5 Canvas

轉自:https://blog.csdn.net/u012468376/article/details/73350998

一、canvas簡介

??  <canvas>?是?HTML5?新增的,一個可以使用腳本(通常為JavaScript)在其中繪制圖像的?HTML?元素。它可以用來制作照片集或者制作簡單(也不是那么簡單)的動畫,甚至可以進行實時視頻處理和渲染。

?   它最初由蘋果內部使用自己MacOS X WebKit推出,供應用程序使用像儀表盤的構件和?Safari?瀏覽器使用。 后來,有人通過Gecko內核的瀏覽器 (尤其是Mozilla和Firefox),Opera和Chrome和超文本網絡應用技術工作組建議為下一代的網絡技術使用該元素。

??  Canvas是由HTML代碼配合高度和寬度屬性而定義出的可繪制區域。JavaScript代碼可以訪問該區域,類似于其他通用的二維API,通過一套完整的繪圖函數來動態生成圖形。

?   Mozilla 程序從 Gecko 1.8 (Firefox 1.5)開始支持?<canvas>, Internet Explorer 從IE9開始<canvas>?。Chrome和Opera 9+ 也支持?<canvas>。

二、Canvas基本使用

2.1?<canvas>元素

<canvas id="tutorial" width="300" height="300"></canvas>
<canvas>看起來和<img>標簽一樣,只是?<canvas>?只有兩個可選的屬性?width、heigth?屬性,而沒有?src、alt?屬性。

? 如果不給<canvas>設置widht、height屬性時,則默認?width為300、height為150,單位都是px。也可以使用css屬性來設置寬高,但是如寬高屬性和初始比例不一致,他會出現扭曲。所以,建議永遠不要使用css屬性來設置<canvas>的寬高。

替換內容

? 由于某些較老的瀏覽器(尤其是IE9之前的IE瀏覽器)或者瀏覽器不支持HTML元素<canvas>,在這些瀏覽器上你應該總是能展示替代內容。

? 支持<canvas>的瀏覽器會只渲染<canvas>標簽,而忽略其中的替代內容。不支持?<canvas>?的瀏覽器則 會直接渲染替代內容。

文本替換:

<canvas>你的瀏覽器不支持canvas,請升級你的瀏覽器 </canvas>

用?<img>?替換::

<canvas><img src="./美女.jpg" alt=""> </canvas>

?

結束標簽</canvas>不可省

與?<img>元素不同,<canvas>元素需要結束標簽(</canvas>)。如果結束標簽不存在,則文檔的其余部分會被認為是替代內容,將不會顯示出來。

2.2 渲染上下文(Thre Rending Context)

??<canvas>會創建一個固定大小的畫布,會公開一個或多個?渲染上下文(畫筆),使用?渲染上下文來繪制和處理要展示的內容。

? 我們重點研究 2D渲染上下文。 其他的上下文我們暫不研究,比如, WebGL使用了基于OpenGL ES的3D上下文 (“experimental-webgl”) 。

var canvas = document.getElementById('tutorial'); //獲得 2d 上下文對象 var ctx = canvas.getContext('2d');

?

2.3 檢測支持性

var canvas = document.getElementById('tutorial');if (canvas.getContext){var ctx = canvas.getContext('2d');// drawing code here } else {// canvas-unsupported code here }

?

2.4 代碼模板

<html> <head><title>Canvas tutorial</title><style type="text/css">canvas {border: 1px solid black;}</style> </head> <canvas id="tutorial" width="300" height="300"></canvas> </body> <script type="text/javascript">function draw(){var canvas = document.getElementById('tutorial');if(!canvas.getContext) return;var ctx = canvas.getContext("2d");//開始代碼 }draw(); </script> </html>

?

2.5 一個簡單的例子

繪制兩個長方形:

<html> <head><title>Canvas tutorial</title><style type="text/css">canvas {border: 1px solid black;}</style> </head> <canvas id="tutorial" width="300" height="300"></canvas> </body> <script type="text/javascript">function draw(){var canvas = document.getElementById('tutorial');if(!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.fillStyle = "rgb(200,0,0)";//繪制矩形 ctx.fillRect (10, 10, 55, 50);ctx.fillStyle = "rgba(0, 0, 200, 0.5)";ctx.fillRect (30, 30, 55, 50);}draw(); </script> </html>

?

三、繪制形狀

3.1 柵格(grid)和坐標空間

? 如下圖所示,canvas元素默認被網格所覆蓋。通常來說網格中的一個單元相當于canvas元素中的一像素。柵格的起點為左上角(坐標為(0,0))。所有元素的位置都相對于原點來定位。所以圖中藍色方形左上角的坐標為距離左邊(X軸)x像素,距離上邊(Y軸)y像素(坐標為(x,y))。

? 后面我們會涉及到坐標原點的平移、網格的旋轉以及縮放等。

3.2 繪制矩形

??<canvas>?只支持一種原生的 圖形繪制:矩形。所有其他圖形都至少需要生成一種路徑(path)。不過,我們擁有眾多路徑生成的方法讓復雜圖形的繪制成為了可能。

canvast 提供了三種方法繪制矩形:

  • fillRect(x, y, width, height)

    繪制一個填充的矩形

  • strockRect(x, y, width, height)

    繪制一個矩形的邊框

  • clearRect(x, y, widh, height)

    清除指定的矩形區域,然后這塊區域會變的完全透明。

  • 說明:

    ? 這3個方法具有相同的參數。

    ??x, y:指的是矩形的左上角的坐標。(相對于canvas的坐標原點)

    ??width, height:指的是繪制的矩形的寬和高。

    function draw(){var canvas = document.getElementById('tutorial');if(!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.fillRect(10, 10, 100, 50); //繪制矩形,填充的默認顏色為黑色ctx.strokeRect(10, 70, 100, 50); //繪制矩形邊框 } draw();

    ?

    ctx.clearRect(15, 15, 50, 25);

    四、繪制路徑(path)

    ? 圖形的基本元素是路徑。

    ? 路徑是通過不同顏色和寬度的線段或曲線相連形成的不同形狀的點的集合。

    ? 一個路徑,甚至一個子路徑,都是閉合的。

    使用路徑繪制圖形需要一些額外的步驟:

  • 創建路徑起始點
  • 調用繪制方法去繪制出路徑
  • 把路徑封閉
  • 一旦路徑生成,通過描邊或填充路徑區域來渲染圖形。
  • 下面是需要用到的方法:

  • beginPath()

    新建一條路徑,路徑一旦創建成功,圖形繪制命令被指向到路徑上生成路徑

  • moveTo(x, y)

    把畫筆移動到指定的坐標(x, y)。相當于設置路徑的起始點坐標。

  • closePath()

    閉合路徑之后,圖形繪制命令又重新指向到上下文中

  • stroke()

    通過線條來繪制圖形輪廓

  • fill()

    通過填充路徑的內容區域生成實心的圖形

  • 4.1 繪制線段

    function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.beginPath(); //新建一條pathctx.moveTo(50, 50); //把畫筆移動到指定的坐標ctx.lineTo(200, 50); //繪制一條從當前位置到指定坐標(200, 50)的直線.//閉合路徑。會拉一條從當前點到path起始點的直線。如果當前點與起始點重合,則什么都不做 ctx.closePath();ctx.stroke(); //繪制路徑。 } draw();

    ?

    ?

    4.2 繪制三角形邊框

    function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.beginPath();ctx.moveTo(50, 50);ctx.lineTo(200, 50);ctx.lineTo(200, 200);ctx.closePath(); //雖然我們只繪制了兩條線段,但是closePath會closePath,仍然是一個3角形ctx.stroke(); //描邊。stroke不會自動closePath() } draw();

    ?

    ?

    4.3 填充三角形

    function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.beginPath();ctx.moveTo(50, 50);ctx.lineTo(200, 50);ctx.lineTo(200, 200);ctx.fill(); //填充閉合區域。如果path沒有閉合,則fill()會自動閉合路徑。 } draw();

    ?

    ?

    4.4 繪制圓弧

    有兩個方法可以繪制圓弧:

  • arc(x, y, r, startAngle, endAngle, anticlockwise):

    以(x, y)為圓心,以r為半徑,從?startAngle弧度開始到endAngle弧度結束。anticlosewise是布爾值,true表示逆時針,false表示順時針。(默認是順時針)

    注意:

  • 這里的度數都是弧度。
  • 0弧度是指的x軸正方形
  • radians=(Math.PI/180)*degrees //角度轉換成弧度
    • 1
  • arcTo(x1, y1, x2, y2, radius):

    根據給定的控制點和半徑畫一段圓弧,最后再以直線連接兩個控制點。

  • 圓弧案例1:

    function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.beginPath();ctx.arc(50, 50, 40, 0, Math.PI / 2, false);ctx.stroke(); } draw();

    ?

    ?

    圓弧案例2:

    function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.beginPath();ctx.arc(50, 50, 40, 0, Math.PI / 2, false);ctx.stroke();ctx.beginPath();ctx.arc(150, 50, 40, 0, -Math.PI / 2, true);ctx.closePath();ctx.stroke();ctx.beginPath();ctx.arc(50, 150, 40, -Math.PI / 2, Math.PI / 2, false);ctx.fill();ctx.beginPath();ctx.arc(150, 150, 40, 0, Math.PI, false);ctx.fill();} draw();

    ?

    ?

    圓弧案例3:

    function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.beginPath();ctx.moveTo(50, 50);//參數1、2:控制點1坐標 參數3、4:控制點2坐標 參數4:圓弧半徑ctx.arcTo(200, 50, 200, 200, 100);ctx.lineTo(200, 200)ctx.stroke();ctx.beginPath();ctx.rect(50, 50, 10, 10);ctx.rect(200, 50, 10, 10)ctx.rect(200, 200, 10, 10)ctx.fill() } draw();

    ?

    ?

    arcTo方法的說明:

    ? 這個方法可以這樣理解。繪制的弧形是由兩條切線所決定。

    ? 第 1 條切線:起始點和控制點1決定的直線。

    ? 第 2 條切線:控制點1 和控制點2決定的直線。

    ??其實繪制的圓弧就是與這兩條直線相切的圓弧。

    4.5 繪制貝塞爾曲線

    4.5.1 什么是貝塞爾曲線

    ? 貝塞爾曲線(Bézier curve),又稱貝茲曲線或貝濟埃曲線,是應用于二維圖形應用程序的數學曲線。

    ? 一般的矢量圖形軟件通過它來精確畫出曲線,貝茲曲線由線段與節點組成,節點是可拖動的支點,線段像可伸縮的皮筋,我們在繪圖工具上看到的鋼筆工具就是來做這種矢量曲線的。

    ? 貝塞爾曲線是計算機圖形學中相當重要的參數曲線,在一些比較成熟的位圖軟件中也有貝塞爾曲線工具如PhotoShop等。在Flash4中還沒有完整的曲線工具,而在Flash5里面已經提供出貝塞爾曲線工具。

    ? 貝塞爾曲線于1962,由法國工程師皮埃爾·貝塞爾(Pierre Bézier)所廣泛發表,他運用貝塞爾曲線來為汽車的主體進行設計。貝塞爾曲線最初由Paul de Casteljau于1959年運用de Casteljau演算法開發,以穩定數值的方法求出貝茲曲線。

    一次貝塞爾曲線(線性貝塞爾曲線)

    ? 一次貝塞爾曲線其實是一條直線。

    二次貝塞爾曲線

    三次貝塞爾曲線

    4.5.2 繪制貝塞爾曲線

    繪制二次貝塞爾曲線

    quadraticCurveTo(cp1x, cp1y, x, y):

    說明:

    ? 參數1和2:控制點坐標

    ? 參數3和4:結束點坐標

    function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.beginPath();ctx.moveTo(10, 200); //起始點var cp1x = 40, cp1y = 100; //控制點var x = 200, y = 200; // 結束點//繪制二次貝塞爾曲線 ctx.quadraticCurveTo(cp1x, cp1y, x, y);ctx.stroke();ctx.beginPath();ctx.rect(10, 200, 10, 10);ctx.rect(cp1x, cp1y, 10, 10);ctx.rect(x, y, 10, 10);ctx.fill();} draw();

    ?

    ?

    繪制三次貝塞爾曲線

    bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y):

    說明:

    ? 參數1和2:控制點1的坐標

    ? 參數3和4:控制點2的坐標

    ? 參數5和6:結束點的坐標

    function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.beginPath();ctx.moveTo(40, 200); //起始點var cp1x = 20, cp1y = 100; //控制點1var cp2x = 100, cp2y = 120; //控制點2var x = 200, y = 200; // 結束點//繪制二次貝塞爾曲線 ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);ctx.stroke();ctx.beginPath();ctx.rect(40, 200, 10, 10);ctx.rect(cp1x, cp1y, 10, 10);ctx.rect(cp2x, cp2y, 10, 10);ctx.rect(x, y, 10, 10);ctx.fill();} draw();

    ?

    ?

    五、添加樣式和顏色

    ? 在前面的繪制矩形章節中,只用到了默認的線條和顏色。

    ? 如果想要給圖形上色,有兩個重要的屬性可以做到。

  • fillStyle = color

    設置圖形的填充顏色

  • strokeStyle = color

    設置圖形輪廓的顏色

  • 備注:

    1. `color` 可以是表示 `css` 顏色值的字符串、漸變對象或者圖案對象。 2. 默認情況下,線條和填充顏色都是黑色。 3. 一旦您設置了 `strokeStyle` 或者 `fillStyle` 的值,那么這個新值就會成為新繪制的圖形的默認值。如果你要給每個圖形上不同的顏色,你需要重新設置 `fillStyle` 或 `strokeStyle` 的值。

    ?

    fillStyle

    function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");for (var i = 0; i < 6; i++){for (var j = 0; j < 6; j++){ctx.fillStyle = 'rgb(' + Math.floor(255 - 42.5 * i) + ',' +Math.floor(255 - 42.5 * j) + ',0)';ctx.fillRect(j * 50, i * 50, 50, 50);}} } draw();

    ?

    strokeStyle

    <script type="text/javascript">function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");for (var i = 0; i < 6; i++){for (var j = 0; j < 6; j++){ctx.strokeStyle = `rgb(${randomInt(0, 255)},${randomInt(0, 255)},${randomInt(0, 255)})`;ctx.strokeRect(j * 50, i * 50, 40, 40);}}}draw();/*** 返回隨機的 [from, to] 之間的整數(包括from,也包括to)*/function randomInt(from, to){return parseInt(Math.random() * (to - from + 1) + from);}</script>

    ?

    ?

    Transparency(透明度)

    globalAlpha = transparencyValue

    ? 這個屬性影響到 canvas 里所有圖形的透明度,有效的值范圍是 0.0 (完全透明)到 1.0(完全不透明),默認是 1.0。

    ??globalAlpha?屬性在需要繪制大量擁有相同透明度的圖形時候相當高效。不過,我認為使用rgba()設置透明度更加好一些。

    line style

    1.?lineWidth = value

    線寬。只能是正值。默認是1.0。

    起始點和終點的連線為中心,上下各占線寬的一半

    “`javascript?
    ctx.beginPath();?
    ctx.moveTo(10, 10);?
    ctx.lineTo(100, 10);?
    ctx.lineWidth = 10;?
    ctx.stroke();

    ctx.beginPath();?
    ctx.moveTo(110, 10);?
    ctx.lineTo(160, 10)?
    ctx.lineWidth = 20;?
    ctx.stroke()?
    “`

    2.?lineCap = type

    線條末端樣式。

    共有3個值:

  • butt:線段末端以方形結束
  • round:線段末端以圓形結束
  • square:線段末端以方形結束,但是增加了一個寬度和線段相同,高度是線段厚度一半的矩形區域。

    var lineCaps = ["butt", "round", "square"];for (var i = 0; i < 3; i++){ctx.beginPath();ctx.moveTo(20 + 30 * i, 30);ctx.lineTo(20 + 30 * i, 100);ctx.lineWidth = 20;ctx.lineCap = lineCaps[i];ctx.stroke(); }ctx.beginPath(); ctx.moveTo(0, 30); ctx.lineTo(300, 30);ctx.moveTo(0, 100); ctx.lineTo(300, 100)ctx.strokeStyle = "red"; ctx.lineWidth = 1; ctx.stroke();

    ?

  • 3.?lineJoin = type

    同一個path內,設定線條與線條間接合處的樣式。

    共有3個值round,?bevel?和?miter:

  • round

    通過填充一個額外的,圓心在相連部分末端的扇形,繪制拐角的形狀。 圓角的半徑是線段的寬度。

  • bevel

    在相連部分的末端填充一個額外的以三角形為底的區域, 每個部分都有各自獨立的矩形拐角。

  • miter(默認)

    通過延伸相連部分的外邊緣,使其相交于一點,形成一個額外的菱形區域。

  • function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");var lineJoin = ['round', 'bevel', 'miter'];ctx.lineWidth = 20;for (var i = 0; i < lineJoin.length; i++){ctx.lineJoin = lineJoin[i];ctx.beginPath();ctx.moveTo(50, 50 + i * 50);ctx.lineTo(100, 100 + i * 50);ctx.lineTo(150, 50 + i * 50);ctx.lineTo(200, 100 + i * 50);ctx.lineTo(250, 50 + i * 50);ctx.stroke();}} draw();

    ?

    ?

    4. 虛線

    用?setLineDash?方法和?lineDashOffset?屬性來制定虛線樣式.?setLineDash?方法接受一個數組,來指定線段與間隙的交替;lineDashOffset屬性設置起始偏移量.

    function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.setLineDash([20, 5]); // [實線長度, 間隙長度]ctx.lineDashOffset = -0;ctx.strokeRect(50, 50, 210, 210); } draw();

    ?

    ?

    備注:

    ??getLineDash():返回一個包含當前虛線樣式,長度為非負偶數的數組。

    六、繪制文本

    繪制文本的兩個方法

    canvas 提供了兩種方法來渲染文本:

  • fillText(text, x, y [, maxWidth])

    在指定的(x,y)位置填充指定的文本,繪制的最大寬度是可選的.

  • strokeText(text, x, y [, maxWidth])

    在指定的(x,y)位置繪制文本邊框,繪制的最大寬度是可選的.

  • var ctx; function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;ctx = canvas.getContext("2d");ctx.font = "100px sans-serif"ctx.fillText("天若有情", 10, 100);ctx.strokeText("天若有情", 10, 200) } draw();

    ?

    給文本添加樣式

  • font = value

    當前我們用來繪制文本的樣式。這個字符串使用和?CSS font屬性相同的語法. 默認的字體是?10px sans-serif。

  • textAlign = value

    文本對齊選項. 可選的值包括:start,?end,?left,?right?or?center. 默認值是?start。

  • textBaseline = value

    基線對齊選項,可選的值包括:top,?hanging,?middle,?alphabetic,?ideographic,?bottom。默認值是?alphabetic。

  • direction = value

    文本方向。可能的值包括:ltr,?rtl,?inherit。默認值是?inherit。

  • 七、繪制圖片

    ? 我們也可以在canvas上直接繪制圖片。

    7.1 由零開始創建圖片

    創建<img>元素

    var img = new Image(); // 創建一個<img>元素 img.src = 'myImage.png'; // 設置圖片源地址

    ?

    腳本執行后圖片開始裝載

    繪制img

    //參數1:要繪制的img 參數2、3:繪制的img在canvas中的坐標 ctx.drawImage(img,0,0);

    ?

    注意:

    ? 考慮到圖片是從網絡加載,如果?drawImage?的時候圖片還沒有完全加載完成,則什么都不做,個別瀏覽器會拋異常。所以我們應該保證在?img?繪制完成之后再?drawImage。

    var img = new Image(); // 創建img元素 img.onload = function(){ctx.drawImage(img, 0, 0) } img.src = 'myImage.png'; // 設置圖片源地址

    ?

    7.2 繪制?img?標簽元素中的圖片

    ??img?可以?new?也可以來源于我們頁面的?<img>標簽

    <img src="./美女.jpg" alt="" width="300"><br> <canvas id="tutorial" width="600" height="400"></canvas> <script type="text/javascript">function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");var img = document.querySelector("img");ctx.drawImage(img, 0, 0);}document.querySelector("img").onclick = function (){draw();}</script>

    ?

    ?

    第一張圖片就是頁面中的<img>標簽

    7.3 縮放圖片

    drawImage()?也可以再添加兩個參數:

    ??drawImage(image, x, y, width, height)

    ? 這個方法多了2個參數:width?和?height,這兩個參數用來控制 當像canvas畫入時應該縮放的大小。

    ctx.drawImage(img, 0, 0, 400, 200)

    ?

    7.4 切片(slice)

    drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)

    ? 第一個參數和其它的是相同的,都是一個圖像或者另一個 canvas 的引用。

    其他8個參數:

    ? 前4個是定義圖像源的切片位置和大小,

    ? 后4個則是定義切片的目標顯示位置和大小。

    八、狀態的保存和恢復

    Saving and restoring state是繪制復雜圖形時必不可少的操作。

    save()和restore()

    ??save?和?restore?方法是用來保存和恢復?canvas?狀態的,都沒有參數。

    ??Canvas?的狀態就是當前畫面應用的所有樣式和變形的一個快照。

  • 關于?save()

    Canvas狀態存儲在棧中,每當save()方法被調用后,當前的狀態就被推送到棧中保存。一個繪畫狀態包括:

    • 當前應用的變形(即移動,旋轉和縮放)

    • strokeStyle,?fillStyle,?globalAlpha,?lineWidth,?lineCap,?lineJoin,?miterLimit,?shadowOffsetX,?shadowOffsetY,?shadowBlur,?shadowColor,?globalCompositeOperation 的值

    • 當前的裁切路徑(clipping path)

    ?

    可以調用任意多次?save方法。(類似數組的push())

  • 關于restore()

    每一次調用?restore?方法,上一個保存的狀態就從棧中彈出,所有設定都恢復。(類似數組的pop())

  • var ctx; function draw(){var canvas = document.getElementById('tutorial');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.fillRect(0, 0, 150, 150); // 使用默認設置繪制一個矩形ctx.save(); // 保存默認狀態 ctx.fillStyle = 'red' // 在原有配置基礎上對顏色做改變ctx.fillRect(15, 15, 120, 120); // 使用新的設置繪制一個矩形 ctx.save(); // 保存當前狀態ctx.fillStyle = '#FFF' // 再次改變顏色配置ctx.fillRect(30, 30, 90, 90); // 使用新的配置繪制一個矩形 ctx.restore(); // 重新加載之前的顏色狀態ctx.fillRect(45, 45, 60, 60); // 使用上一次的配置繪制一個矩形 ctx.restore(); // 加載默認顏色配置ctx.fillRect(60, 60, 30, 30); // 使用加載的配置繪制一個矩形 } draw();

    ?

    ?

    九、變形

    9.1 translate

    translate(x, y)

    ? 用來移動?canvas?的原點到指定的位置

    ??translate方法接受兩個參數。x?是左右偏移量,y?是上下偏移量,如右圖所示。

    在做變形之前先保存狀態是一個良好的習慣。大多數情況下,調用?restore?方法比手動恢復原先的狀態要簡單得多。又如果你是在一個循環中做位移但沒有保存和恢復canvas?的狀態,很可能到最后會發現怎么有些東西不見了,那是因為它很可能已經超出?canvas?范圍以外了。

    ? 注意:translate移動的是canvas的坐標原點。(坐標變換)

    ??

    var ctx; function draw(){var canvas = document.getElementById('tutorial1');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.save(); //保存坐原點平移之前的狀態ctx.translate(100, 100);ctx.strokeRect(0, 0, 100, 100)ctx.restore(); //恢復到最初狀態ctx.translate(220, 220);ctx.fillRect(0, 0, 100, 100) } draw();

    ?

    ?

    9.2 rotate

    rotate(angle)

    ? 旋轉坐標軸。

    ? 這個方法只接受一個參數:旋轉的角度(angle),它是順時針方向的,以弧度為單位的值。

    ? 旋轉的中心是坐標原點。

    var ctx; function draw(){var canvas = document.getElementById('tutorial1');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.fillStyle = "red";ctx.save();ctx.translate(100, 100);ctx.rotate(Math.PI / 180 * 45);ctx.fillStyle = "blue";ctx.fillRect(0, 0, 100, 100);ctx.restore();ctx.save();ctx.translate(0, 0);ctx.fillRect(0, 0, 50, 50)ctx.restore(); } draw();

    ?

    ?

    9.3 scale

    scale(x, y)

    ? 我們用它來增減圖形在?canvas?中的像素數目,對形狀,位圖進行縮小或者放大。

    ??scale方法接受兩個參數。x,y分別是橫軸和縱軸的縮放因子,它們都必須是正值。值比 1.0 小表示縮 小,比 1.0 大則表示放大,值為 1.0 時什么效果都沒有。

    ? 默認情況下,canvas?的 1 單位就是 1 個像素。舉例說,如果我們設置縮放因子是 0.5,1 個單位就變成對應 0.5 個像素,這樣繪制出來的形狀就會是原先的一半。同理,設置為 2.0 時,1 個單位就對應變成了 2 像素,繪制的結果就是圖形放大了 2 倍。

    9.4 transform(變形矩陣)

    transform(a, b, c, d, e, f)

    a (m11)

    ? Horizontal scaling.

    b (m12)

    ? Horizontal skewing.

    c (m21)

    ? Vertical skewing.

    d (m22)

    ? Vertical scaling.

    e (dx)

    ? Horizontal moving.

    f (dy)

    ? Vertical moving.

    var ctx; function draw(){var canvas = document.getElementById('tutorial1');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.transform(1, 1, 0, 1, 0, 0);ctx.fillRect(0, 0, 100, 100); } draw();

    ?

    ?

    十、合成

    ? 在前面的所有例子中、,我們總是將一個圖形畫在另一個之上,對于其他更多的情況,僅僅這樣是遠遠不夠的。比如,對合成的圖形來說,繪制順序會有限制。不過,我們可以利用?globalCompositeOperation?屬性來改變這種狀況。

    globalCompositeOperation = typevar ctx;function draw(){var canvas = document.getElementById('tutorial1');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.fillStyle = "blue";ctx.fillRect(0, 0, 200, 200);ctx.globalCompositeOperation = "source-over"; //全局合成操作ctx.fillStyle = "red";ctx.fillRect(100, 100, 200, 200);}draw();

    ?

    注:下面的展示中,藍色是原有的,紅色是新的。

    type `是下面 13 種字符串值之一:

    1.?source-over(default)

    這是默認設置,新圖像會覆蓋在原有圖像。

    2.?source-in

    僅僅會出現新圖像與原來圖像重疊的部分,其他區域都變成透明的。(包括其他的老圖像區域也會透明)

    3.?source-out

    僅僅顯示新圖像與老圖像沒有重疊的部分,其余部分全部透明。(老圖像也不顯示)

    4.?source-atop

    新圖像僅僅顯示與老圖像重疊區域。老圖像仍然可以顯示。

    5.?destination-over

    新圖像會在老圖像的下面。

    6.?destination-in

    僅僅新老圖像重疊部分的老圖像被顯示,其他區域全部透明。

    7.?destination-out

    僅僅老圖像與新圖像沒有重疊的部分。 注意顯示的是老圖像的部分區域。

    8.?destination-atop

    老圖像僅僅僅僅顯示重疊部分,新圖像會顯示在老圖像的下面。

    9.?lighter

    新老圖像都顯示,但是重疊區域的顏色做加處理

    10.?darken

    保留重疊部分最黑的像素。(每個顏色位進行比較,得到最小的)

    blue: #0000ff

    red: #ff0000

    所以重疊部分的顏色:#000000

    11.?lighten

    保證重疊部分最量的像素。(每個顏色位進行比較,得到最大的)

    blue: #0000ff

    red: #ff0000

    所以重疊部分的顏色:#ff00ff

    12.?xor

    重疊部分會變成透明

    13.?copy

    只有新圖像會被保留,其余的全部被清除(邊透明)

    十一、裁剪路徑

    clip()

    ? 把已經創建的路徑轉換成裁剪路徑。

    ? 裁剪路徑的作用是遮罩。只顯示裁剪路徑內的區域,裁剪路徑外的區域會被隱藏。

    ? 注意:clip()只能遮罩在這個方法調用之后繪制的圖像,如果是clip()方法調用之前繪制的圖像,則無法實現遮罩。

    var ctx; function draw(){var canvas = document.getElementById('tutorial1');if (!canvas.getContext) return;var ctx = canvas.getContext("2d");ctx.beginPath();ctx.arc(20,20, 100, 0, Math.PI * 2);ctx.clip();ctx.fillStyle = "pink";ctx.fillRect(20, 20, 100,100); } draw();

    ?

    ?

    十二、動畫

    動畫的基本步驟

  • 清空canvas

    再繪制每一幀動畫之前,需要清空所有。清空所有最簡單的做法就是clearRect()方法

  • 保存canvas狀態

    如果在繪制的過程中會更改canvas的狀態(顏色、移動了坐標原點等),又在繪制每一幀時都是原始狀態的話,則最好保存下canvas的狀態

  • 繪制動畫圖形

    這一步才是真正的繪制動畫幀

  • 恢復canvas狀態

    如果你前面保存了canvas狀態,則應該在繪制完成一幀之后恢復canvas狀態。

  • 控制動畫

    我們可用通過canvas的方法或者自定義的方法把圖像會知道到canvas上。正常情況,我們能看到繪制的結果是在腳本執行結束之后。例如,我們不可能在一個?for?循環內部完成動畫。

    也就是,為了執行動畫,我們需要一些可以定時執行重繪的方法。

    一般用到下面三個方法:

  • setInterval()
  • setTimeout()
  • requestAnimationFrame()
  • 案例1:太陽系

    let sun; let earth; let moon; let ctx; function init(){sun = new Image();earth = new Image();moon = new Image();sun.src = "sun.png";earth.src = "earth.png";moon.src = "moon.png";let canvas = document.querySelector("#solar");ctx = canvas.getContext("2d");sun.onload = function (){draw()}} init(); function draw(){ctx.clearRect(0, 0, 300, 300); //清空所有的內容/*繪制 太陽*/ctx.drawImage(sun, 0, 0, 300, 300);ctx.save();ctx.translate(150, 150);//繪制earth軌道 ctx.beginPath();ctx.strokeStyle = "rgba(255,255,0,0.5)";ctx.arc(0, 0, 100, 0, 2 * Math.PI)ctx.stroke()let time = new Date();//繪制地球ctx.rotate(2 * Math.PI / 60 * time.getSeconds() + 2 * Math.PI / 60000 * time.getMilliseconds())ctx.translate(100, 0);ctx.drawImage(earth, -12, -12)//繪制月球軌道 ctx.beginPath();ctx.strokeStyle = "rgba(255,255,255,.3)";ctx.arc(0, 0, 40, 0, 2 * Math.PI);ctx.stroke();//繪制月球ctx.rotate(2 * Math.PI / 6 * time.getSeconds() + 2 * Math.PI / 6000 * time.getMilliseconds());ctx.translate(40, 0);ctx.drawImage(moon, -3.5, -3.5);ctx.restore();requestAnimationFrame(draw); }

    ?

    ?

    案例2:模擬時鐘

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title><style>body {padding: 0;margin: 0;background-color: rgba(0, 0, 0, 0.1)}canvas {display: block;margin: 200px auto;}</style> </head> <body> <canvas id="solar" width="300" height="300"></canvas> <script>init();function init(){let canvas = document.querySelector("#solar");let ctx = canvas.getContext("2d");draw(ctx);}function draw(ctx){requestAnimationFrame(function step(){drawDial(ctx); //繪制表盤 drawAllHands(ctx); //繪制時分秒針 requestAnimationFrame(step);});}/*繪制時分秒針*/function drawAllHands(ctx){let time = new Date();let s = time.getSeconds();let m = time.getMinutes();let h = time.getHours();let pi = Math.PI;let secondAngle = pi / 180 * 6 * s; //計算出來s針的弧度 let minuteAngle = pi / 180 * 6 * m + secondAngle / 60; //計算出來分針的弧度 let hourAngle = pi / 180 * 30 * h + minuteAngle / 12; //計算出來時針的弧度 drawHand(hourAngle, 60, 6, "red", ctx); //繪制時針 drawHand(minuteAngle, 106, 4, "green", ctx); //繪制分針 drawHand(secondAngle, 129, 2, "blue", ctx); //繪制秒針 }/*繪制時針、或分針、或秒針* 參數1:要繪制的針的角度* 參數2:要繪制的針的長度* 參數3:要繪制的針的寬度* 參數4:要繪制的針的顏色* 參數4:ctx* */function drawHand(angle, len, width, color, ctx){ctx.save();ctx.translate(150, 150); //把坐標軸的遠點平移到原來的中心 ctx.rotate(-Math.PI / 2 + angle); //旋轉坐標軸。 x軸就是針的角度 ctx.beginPath();ctx.moveTo(-4, 0);ctx.lineTo(len, 0); // 沿著x軸繪制針 ctx.lineWidth = width;ctx.strokeStyle = color;ctx.lineCap = "round";ctx.stroke();ctx.closePath();ctx.restore();}/*繪制表盤*/function drawDial(ctx){let pi = Math.PI;ctx.clearRect(0, 0, 300, 300); //清除所有內容 ctx.save();ctx.translate(150, 150); //一定坐標原點到原來的中心 ctx.beginPath();ctx.arc(0, 0, 148, 0, 2 * pi); //繪制圓周 ctx.stroke();ctx.closePath();for (let i = 0; i < 60; i++){//繪制刻度。 ctx.save();ctx.rotate(-pi / 2 + i * pi / 30); //旋轉坐標軸。坐標軸x的正方形從 向上開始算起 ctx.beginPath();ctx.moveTo(110, 0);ctx.lineTo(140, 0);ctx.lineWidth = i % 5 ? 2 : 4;ctx.strokeStyle = i % 5 ? "blue" : "red";ctx.stroke();ctx.closePath();ctx.restore();}ctx.restore();} </script> </body> </html>

    ?

    ?

    轉載于:https://www.cnblogs.com/Michelle20180227/p/9293395.html

    總結

    以上是生活随笔為你收集整理的HTML5 Canvas的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    亚洲一级性 | 精品国产91亚洲一区二区三区www | 激情丁香在线 | 99久久精品免费视频 | 久久小视频 | 国产精品久久久久久久久大全 | 偷拍福利视频一区二区三区 | 亚洲三级影院 | 国产一区视频免费在线观看 | 精品视频久久久久久 | 免费看黄在线网站 | 久久精品视频国产 | 91麻豆视频网站 | 黄色官网在线观看 | 婷婷综合五月天 | 黄在线免费观看 | 欧美精品在线一区二区 | 涩涩资源网 | 麻豆视频免费看 | 91在线看免费 | 九九久 | 久久黄色免费视频 | 久久毛片网 | 欧美一二三区播放 | 国产精品观看视频 | 91视频91自拍| 91免费视频黄 | av高清一区二区三区 | 99热精品久久 | 一区二区精品视频 | 日韩成人免费在线 | 日韩中文字幕在线不卡 | www激情com| 亚洲精品黄 | 毛片精品免费在线观看 | 中文字幕久久精品 | 日韩成人在线一区二区 | 国产在线视频一区二区三区 | 69久久久 | 天天摸天天操天天爽 | 亚洲精品资源在线 | 91av视频免费观看 | 中文字幕a∨在线乱码免费看 | 日韩中文字幕免费在线观看 | 亚洲婷婷丁香 | 在线观看va | 亚洲另类在线视频 | 视频在线观看日韩 | 婷婷电影在线观看 | 成人小视频在线观看免费 | 国产字幕在线看 | av免费在线网站 | 贫乳av女优大全 | 成人av免费播放 | 18av在线视频 | 最新中文字幕在线观看视频 | 国产清纯在线 | 亚洲精品国产精品国自 | 麻豆视频在线免费观看 | www.91成人| 日韩精品在线看 | 狠狠干我 | 久草www| 久精品在线 | 99热在线看 | 亚洲九九九 | 91欧美日韩国产 | 精品在线观| 91在线看视频 | 亚洲久久视频 | 毛片基地黄久久久久久天堂 | 国产精品久久久久久久久蜜臀 | 久久激情视频免费观看 | 国产手机视频在线播放 | 又黄又爽又刺激视频 | 亚洲精品理论片 | 天天爱天天舔 | 久久精品九色 | 91成人精品在线 | 日韩精品一区电影 | 在线观影网站 | 国产精品久久久久久久久久久久久久 | 国产精品美女久久久久久免费 | 青青网视频| 国产成人三级在线观看 | 在线精品视频免费播放 | 日日麻批40分钟视频免费观看 | 午夜精品久久久久99热app | 成人a在线观看高清电影 | 久久r精品 | av一级一片 | 日韩免费福利 | 国产一区欧美日韩 | 韩国av免费在线观看 | 亚洲视频大全 | 精品国产一区二区三区av性色 | 外国av网| 国产区在线看 | 久热这里有精品 | 中文字幕日韩伦理 | 久久五月天综合 | 亚洲午夜久久久影院 | 国产大片黄色 | 亚洲乱码国产乱码精品天美传媒 | 日本特黄特色aaa大片免费 | 2017狠狠干 | 毛片美女网站 | 天天拍天天爽 | 国产日韩精品在线 | 欧美一级片在线 | 亚洲日本在线一区 | 久久天天操 | 色偷偷中文字幕 | 五月婷婷丁香综合 | 中文字幕在线视频免费播放 | 日本三级久久 | 国产在线1区 | 成人国产精品免费观看 | 精品久久影院 | 色综合久久久久综合体桃花网 | 在线天堂8√ | 五月天丁香综合 | 亚洲天堂网视频在线观看 | 亚洲午夜久久久久久久久 | 91视频这里只有精品 | 6080yy午夜一二三区久久 | 亚洲情感电影大片 | 久久综合成人 | 国产麻豆果冻传媒在线观看 | 欧美激情精品久久久 | www.色就是色| 中文字幕 在线看 | 国产不卡在线 | 久久久国产精品网站 | 国产精品免费看久久久8精臀av | 国产高清在线免费 | 精品久久久久久国产偷窥 | 日韩欧美一二三 | 亚洲精品国产电影 | 日韩在线精品一区 | 免费日p视频| 日韩欧美国产激情在线播放 | 97av在线 | 九九视频网 | 黄色成人av在线 | 色橹橹欧美在线观看视频高清 | 91精品在线视频观看 | 亚洲精品动漫成人3d无尽在线 | 激情五月在线视频 | 午夜视频在线瓜伦 | 97在线成人 | 国产xvideos免费视频播放 | 欧美精品亚洲精品 | 一级欧美日韩 | 亚洲精品美女在线观看播放 | 色狠狠综合天天综合综合 | 一级成人网 | 日本黄色免费观看 | 国产 日韩 在线 亚洲 字幕 中文 | 中文字幕乱码亚洲精品一区 | 69av国产 | 在线视频久 | 国产在线观看二区 | 亚洲精品午夜久久久久久久久久久 | 久久久久这里只有精品 | 国产精品1024 | 久久久久久久国产精品视频 | 日b黄色片 | 在线激情网 | 天堂av在线免费观看 | 久久精品在线免费观看 | 不卡精品 | 色婷婷 亚洲 | 欧美在线日韩在线 | www免费黄色| 久久久久久毛片 | 丁香色婷 | 激情五月婷婷综合 | 99这里只有久久精品视频 | 黄色成人小视频 | 激情丁香综合五月 | 久久精品毛片 | 在线免费观看的av网站 | 亚洲欧美观看 | 亚洲精品91天天久久人人 | 亚洲精品久久视频 | 国产视频一区二区在线观看 | 毛片永久新网址首页 | 亚洲高清久久久 | 日韩视频专区 | 成人免费在线网 | 精品免费观看 | 欧美日韩一区二区久久 | av成人免费在线观看 | 亚洲国产精品99久久久久久久久 | 国产一区精品在线观看 | 日韩精品久久久久久 | 亚洲精品免费在线播放 | 毛片无卡免费无播放器 | 国产91综合一区在线观看 | 精品国产亚洲日本 | 亚洲影院色| 久久精品网站免费观看 | 日韩一区二区免费在线观看 | 国产精品久久久久一区二区三区 | 久久乐九色婷婷综合色狠狠182 | 国产精品麻豆99久久久久久 | 黄色一级大片在线免费看国产一 | 中文字幕第一页在线视频 | 婷婷开心久久网 | 久久久亚洲麻豆日韩精品一区三区 | 最近中文字幕免费观看 | 手机看片99| 99久久9 | 91完整版在线观看 | 特黄免费av | 日韩黄色在线观看 | 人人爽久久久噜噜噜电影 | 天天艹天天爽 | 亚洲高清国产视频 | 在线亚洲小视频 | 日韩伦理一区二区三区av在线 | 欧美一区二视频在线免费观看 | 久久欧美在线电影 | 高清免费在线视频 | 99久免费精品视频在线观看 | 99婷婷狠狠成为人免费视频 | 最近高清中文在线字幕在线观看 | 黄色www免费 | 久久久久二区 | 天天操天天干天天 | 亚洲乱亚洲乱亚洲 | 欧美日视频 | 手机av观看 | 永久免费在线 | 一区二区视频免费在线观看 | 中文字幕在线乱 | 国产小视频在线观看 | 9999亚洲 | 色综合天天综合网国产成人网 | 日韩在线网 | 在线免费观看视频你懂的 | 国产精品 日韩 欧美 | 中文字幕国语官网在线视频 | 色资源在线 | 中文字幕资源在线 | 精品视频 | 色97在线 | av天天在线观看 | 国产精品电影一区 | 国产又粗又硬又长又爽的视频 | 日韩区欠美精品av视频 | wwwwww国产 | 国产高清不卡在线 | 国产精品爽爽久久久久久蜜臀 | 97热久久免费频精品99 | 国产美女精品视频免费观看 | 国产亚洲精品久久久久久大师 | 婷婷精品国产欧美精品亚洲人人爽 | 特级西西444www大胆高清无视频 | 久久精美视频 | 一区二区三区在线免费 | 国产成人综合图片 | 日韩一区二区在线免费观看 | 日韩系列 | 97在线精品国自产拍中文 | 天天操夜操 | 欧美一区日韩一区 | 精品自拍网 | 国产精品亚洲综合久久 | 亚洲精品中文在线观看 | 日黄网站 | www.com操| 蜜臀91丨九色丨蝌蚪老版 | 国产精品久久久区三区天天噜 | 国产亚洲精品久久久久久 | 五月婷婷播播 | 操操操人人 | 国色天香在线观看 | 狠狠色噜噜狠狠 | 三级黄免费看 | 亚州国产精品久久久 | 又黄又爽又刺激的视频 | 久久久久综合精品福利啪啪 | 狠狠干夜夜爽 | 香蕉手机在线 | 精品国产一区二区三区久久久蜜臀 | 欧美精品黑人性xxxx | 久久久免费网站 | 欧美极度另类 | 中文不卡视频 | 91精品啪在线观看国产 | 欧美日韩在线观看一区二区三区 | 天天综合亚洲 | 亚洲综合黄色 | 亚洲国产成人在线观看 | 久久久久高清毛片一级 | 91福利试看 | 玖玖在线资源 | 久久国产精品99国产 | 国产一区在线观看免费 | 日韩欧美视频在线免费观看 | 四虎永久免费网站 | 中文字幕在线国产精品 | 在线观看一区二区视频 | 国产99久| 99 久久久久 | 亚洲精品国产品国语在线 | 黄色大片日本 | 2022国产精品视频 | 日韩av高清在线观看 | 欧美日韩高清在线一区 | www.国产高清 | 手机看国产毛片 | 精品国产乱码久久久久久1区2匹 | 亚洲第一色 | 日本 在线 视频 中文 有码 | 欧美视频在线观看免费网址 | 国模视频一区二区三区 | 91中文字幕永久在线 | 天天色综合1 | 久久免费观看少妇a级毛片 久久久久成人免费 | 色综合久久精品 | 深爱激情亚洲 | 亚洲精品乱码久久久久久蜜桃动漫 | 成人理论电影 | 国产精品男女视频 | 久色小说 | 亚洲综合欧美精品电影 | www久久国产 | 婷婷久久婷婷 | www好男人| 亚洲高清久久久 | 国产精品每日更新 | 五月婷婷综合在线视频 | 午夜10000 | 热久久99这里有精品 | 三级av中文字幕 | 精品电影一区 | 在线亚洲免费视频 | 国模视频一区二区三区 | 久久久久久综合网天天 | 最新av网站在线观看 | 一区二区三区在线观看中文字幕 | 福利区在线观看 | 精品国产一区二区三区在线观看 | 天天操天天操天天操 | 黄色影院在线免费观看 | 成+人+色综合 | 免费高清在线观看电视网站 | 欧日韩在线 | 午夜视频播放 | 精品国内 | 中文字幕高清 | 久久99亚洲网美利坚合众国 | 色网免费观看 | 精品亚洲男同gayvideo网站 | 高清国产午夜精品久久久久久 | 99久久久| 超碰在线个人 | 国产高清在线a视频大全 | 香蕉久草在线 | 91黄色小网站 | 特级aaa毛片 | 午夜精品一区二区三区在线视频 | 亚洲国产成人在线播放 | www.久久久久| 玖玖精品视频 | 91完整版| 99在线热播精品免费 | 精品视频在线播放 | 五月开心六月婷婷 | www.色com | 一本色道久久精品 | 日本黄色黄网站 | 在线电影日韩 | 91在线视频精品 | 韩国三级一区 | 欧美成人tv | 人人看人人爱 | 精品一区二区久久久久久久网站 | 91香蕉视频在线下载 | 国产精品综合久久久久 | 99久久99久久精品国产片 | 操天天操 | 国产一线天在线观看 | 久草剧场 | 天天人人 | 91麻豆精品国产午夜天堂 | 黄色福利网 | 免费一区在线 | 精品国产一区二区三区四区vr | 国产精品日韩在线 | 丁香婷婷色 | 精品毛片一区二区免费看 | 欧美淫视频 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 成人黄色大片在线免费观看 | 18岁免费看片 | 成人超碰在线 | 欧美在线观看视频免费 | 精品伊人久久久 | 日日夜夜精品网站 | 男女拍拍免费视频 | 在线电影日韩 | 精品久久网 | 欧美一级淫片videoshd | 国产精品99在线播放 | 特黄特色特刺激视频免费播放 | 久久一级电影 | 亚洲v精品 | 激情五月五月婷婷 | 亚洲污视频| 最近日韩中文字幕中文 | 久久国产精品一区二区 | 免费v片 | 国产一区二区三区高清播放 | 国产特级毛片aaaaaa高清 | 香蕉视频国产在线 | 一区三区在线欧 | 日韩一级精品 | 国产在线黄 | 精品96久久久久久中文字幕无 | 中文字幕av全部资源www中文字幕在线观看 | 中字幕视频在线永久在线观看免费 | 精品自拍网 | 99久久久国产精品免费99 | 狠狠色丁香九九婷婷综合五月 | 在线看国产一区 | 亚洲爱av | 丁香五月网久久综合 | 一区二区三区在线免费观看视频 | 欧美日韩调教 | 久久久国产精品亚洲一区 | 色欧美成人精品a∨在线观看 | 日韩精品专区在线影院重磅 | 永久免费av在线播放 | 国产高清视频在线 | 国产女人40精品一区毛片视频 | 国产亚洲综合在线 | 九色porny真实丨国产18 | 97色婷婷成人综合在线观看 | 香蕉免费在线 | 国产精品99久久久久人中文网介绍 | 在线欧美最极品的av | 天天干夜夜夜 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 国产精品免费久久久久久久久久中文 | 在线99视频 | 欧美激情视频免费看 | 国内精品久久天天躁人人爽 | 91av片| 三上悠亚一区二区在线观看 | 日韩最新理论电影 | 久草青青在线观看 | 欧美一区二区视频97 | 最近更新好看的中文字幕 | 丁香六月国产 | 国产成人久久精品亚洲 | 亚洲视频大全 | 干干夜夜 | 91资源在线免费观看 | 日本高清免费中文字幕 | 久久电影中文字幕视频 | 激情久久久久 | 97在线观看免费视频 | 国产精品av在线 | 精品久久久久久综合日本 | 国内毛片毛片 | 99在线观看精品 | 五月婷在线 | 五月婷婷毛片 | 国产白浆在线观看 | 97精品在线 | 国产成人av福利 | 2017狠狠干 | 国产黄色片在线免费观看 | 色综合久久天天 | 美女网站一区 | 国产在线观看二区 | 国产精品手机在线播放 | 狠狠干网站 | 婷婷丁香激情 | 国产黄色在线观看 | 色资源网免费观看视频 | 九色91视频| 免费福利在线视频 | 日韩极品视频在线观看 | 国产高清视频色在线www | 久久99国产精品 | 久久久久久久电影 | 久久综合狠狠综合久久综合88 | 午夜av剧场 | 久久这里精品视频 | 在线视频你懂得 | 2018好看的中文在线观看 | 91尤物在线播放 | 欧美精品久久久久久久亚洲调教 | 亚洲国产日本 | 丁香花在线观看免费完整版视频 | 看片的网址 | 超碰在线99 | 久久成人毛片 | 丰满少妇在线观看网站 | 亚洲视频免费在线观看 | 99视频国产精品免费观看 | 日韩中文久久 | 伊人久久国产 | 久久成人久久 | 国产在线视频资源 | 国产精品福利午夜在线观看 | 日本黄色大片免费看 | 日韩在线免费不卡 | 韩日色视频 | 国产精品激情在线观看 | 97超碰福利久久精品 | 在线观看第一页 | 欧美xxxx性xxxxx高清 | 欧美乱大交 | 一区二区三区韩国免费中文网站 | 狠狠做深爱婷婷综合一区 | 国产高清在线免费观看 | 婷婷久久国产 | 99久久久久国产精品免费 | av黄色在线观看 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 日韩在线播放视频 | 黄色影院在线免费观看 | 国产精品久久久久亚洲影视 | 欧美成人日韩 | 日韩精品一卡 | 国产高清中文字幕 | 国产成人精品久久二区二区 | 日韩三区在线观看 | 成人在线视频网 | 五月婷婷黄色 | 911av视频 | 日日干夜夜爱 | 日韩黄色影院 | 97精品国产91久久久久久久 | 久久国产91| www激情com | 亚洲特级毛片 | 黄色三级视频片 | 国产一级视频在线免费观看 | 亚洲欧洲精品一区二区精品久久久 | 日韩网站一区 | 亚洲精品美女在线观看播放 | 极品久久久 | 美女精品 | 91精品国产一区 | 中文字幕在线观看一区二区 | 麻豆视频大全 | 亚洲日本va午夜在线电影 | 波多野结衣精品视频 | 人人草在线视频 | 欧美一级性生活片 | 亚洲黄色在线观看 | 日韩一区二区免费播放 | 美女性爽视频国产免费app | 日韩1级片 | 美女黄网站视频免费 | 欧美成人aa | 天天干天天摸天天操 | 国产又粗又猛又黄又爽视频 | 午夜少妇一区二区三区 | 最近免费中文字幕大全高清10 | 色狠狠狠 | 午夜久操 | 狠狠干网址 | 99精品视频观看 | 日韩在线一二三区 | 久久99久久精品国产 | 少妇bbb搡bbbb搡bbbb′ | 久久国产成人午夜av影院宅 | 日p视频 | 欧美日韩二三区 | 丰满少妇对白在线偷拍 | 国产精品久久久久久久免费大片 | 天天爱av导航 | 日日操日日干 | mm1313亚洲精品国产 | 国产精品毛片久久久久久久久久99999999 | 国产日韩欧美在线观看 | 99热这里只有精品8 久久综合毛片 | 91精品在线视频 | 国产精品国产自产拍高清av | 日韩1级片| 国产黄色视 | 激情校园亚洲 | 中文字幕免费不卡视频 | 综合影视| 黄色91在线 | 国产高清av免费在线观看 | 精品免费一区二区三区 | 日三级在线 | 国产亚洲成人精品 | 国产成人精品一区二区三区福利 | 久久优 | 亚洲精品一区二区三区高潮 | 国产精品综合久久 | 亚洲精品视频大全 | 国产小视频你懂的在线 | 在线涩涩 | 99精品黄色片免费大全 | 成人在线播放网站 | 四虎永久免费网站 | 日日爱视频| 免费高清在线观看成人 | 成人免费视频免费观看 | 日韩成人在线一区二区 | 成人蜜桃| 亚洲成a人片在线观看网站口工 | 欧美精品在线一区 | 精品美女在线观看 | 国内精品久久久久久久久久清纯 | 国产不卡精品 | 久久综合狠狠综合 | 蜜臀av麻豆 | 中文字幕av专区 | 91成人在线视频观看 | 日韩精品在线播放 | 日本福利视频在线 | 一区二区三区免费在线 | 91精品啪在线观看国产 | 黄色大片视频网站 | 精品国产色 | 亚洲 精品在线视频 | av在线直接看 | 精品自拍网 | 五月天婷亚洲天综合网鲁鲁鲁 | 三级av免费看 | 又黄又爽又无遮挡免费的网站 | 成人免费网视频 | 四虎影视8848dvd | 日日躁夜夜躁aaaaxxxx | 一区二区不卡视频在线观看 | 欧美精品首页 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 色综合天天 | 国产精品国产三级国产aⅴ9色 | 国产99亚洲 | 日本精品久久 | 国产精品h在线观看 | 成人性生交大片免费观看网站 | 国内外成人在线视频 | 成人av在线网址 | 亚洲一区二区精品视频 | 午夜视频在线观看欧美 | 久久精品1区| 五月天激情婷婷 | 最近最新最好看中文视频 | a特级毛片 | 成人久久久久久久久久 | 国模精品在线 | 欧洲视频一区 | 国产精品va在线 | 亚洲一区二区麻豆 | 在线播放视频一区 | 亚洲精品www久久久久久 | 欧美影院久久 | 夜夜操夜夜干 | 国产精品成人一区二区 | 日本精品va在线观看 | 欧美成人播放 | 成人亚洲精品国产www | 久久人人精品 | 国产成人一区二区三区 | 国内精品久久久久久久97牛牛 | 国产精品久久在线观看 | 成人毛片久久 | 国产一级淫片免费看 | www免费黄色 | 国产人成精品一区二区三 | 黄色成人av在线 | 97国产小视频 | 亚洲成人免费 | 亚洲人av免费网站 | 日韩av一区二区三区四区 | 亚洲乱码久久久 | 六月丁香激情综合 | 精品久久久久免费极品大片 | 色综合狠狠干 | 亚洲精品在线观看中文字幕 | 97在线免费观看 | 色五月成人 | 成人aⅴ视频 | 欧美成人精品xxx | 欧美午夜激情网 | av在线播放不卡 | 中文字幕电影在线 | 久久99视频 | 国产精品 中文在线 | 国产一二三四在线观看视频 | av一区二区三区在线观看 | 久久久久久久久久久久亚洲 | 五月天天色 | 在线成人欧美 | 国产精品自产拍在线观看桃花 | 成人午夜剧场在线观看 | 99视| 狠狠狠狠狠狠 | 色播激情五月 | 国产三级久久久 | 久久艹中文字幕 | 久久久久久久久久久福利 | 一本色道久久综合亚洲二区三区 | 免费毛片一区二区三区久久久 | 日韩有码欧美 | 久久不卡国产精品一区二区 | 欧美色888 | 久草在线高清 | 国产在线视频在线观看 | 特级西西444www大精品视频免费看 | 精品中文字幕在线播放 | 日韩在线色视频 | 国产精品久久久久久久久久久久久久 | 久草在线免 | 伊人婷婷网 | 免费裸体视频网 | 久久国产精品小视频 | 日日夜夜天天 | 欧美精品视 | 99久久超碰中文字幕伊人 | 日本爱爱免费视频 | 国产亚洲欧美日韩高清 | 在线观看免费av片 | 一区二区视频电影在线观看 | 男女日麻批 | 亚洲综合成人婷婷小说 | 夜夜躁日日躁狠狠久久av | 日本精品在线 | 中文字幕.av.在线 | 日韩精品在线视频免费观看 | 午夜精品久久久久久久99 | 国产99久久久国产精品免费二区 | 国产女人40精品一区毛片视频 | 国产91精品久久久久久 | 欧美日本中文字幕 | 日韩免费电影网站 | 女人高潮特级毛片 | 丝袜美腿在线视频 | 男女全黄一级一级高潮免费看 | 色黄久久久久久 | 天天天天天天操 | 中文字幕免费看 | 久99久视频| 国产一级二级视频 | 亚洲天堂网在线视频观看 | 国产伦精品一区二区三区四区视频 | 国产一区在线精品 | 精品亚洲国产视频 | 亚洲精品久久久久58 | 中文字幕无吗 | 欧美成人高清 | 国产香蕉av | 高清一区二区三区av | 亚洲激情综合网 | 97免费在线观看 | 国产精品午夜久久 | 日本精品在线 | 亚洲欧美视频网站 | 国产综合香蕉五月婷在线 | 毛片一区二区 | 国产123区在线观看 国产精品麻豆91 | 五月天.com| 免费国产在线观看 | www.狠狠插.com | 丁香 婷婷 激情 | av中文字幕电影 | 精品久久久免费视频 | 亚洲精品视频一二三 | 免费观看日韩av | 久久理论影院 | 久久久久久综合 | 亚洲最新av在线网站 | 久久精品99精品国产香蕉 | av片无限看| 亚洲成av人片一区二区梦乃 | 日本亚洲国产 | 99麻豆视频 | av免费观看网站 | 免费av小说 | 麻豆你懂的 | 黄a在线 | av福利在线看 | 婷婷久久网站 | ww亚洲ww亚在线观看 | 99久久日韩精品视频免费在线观看 | 国产精品成人免费精品自在线观看 | 欧美久久久久久久久久久久久 | 最近中文字幕mv免费高清在线 | 九月婷婷综合网 | 在线播放国产一区二区三区 | 99视频久久| 婷婷在线免费 | 亚洲va综合va国产va中文 | 成年人免费看片网站 | 免费看片成人 | 国产在线精品一区二区不卡了 | 一级片黄色片网站 | 在线免费高清一区二区三区 | 免费在线观看亚洲视频 | 999免费视频 | 亚洲国产人午在线一二区 | 狠狠狠色丁香婷婷综合激情 | 久久久久久久av | 97视频免费在线观看 | 永久免费看av | 在线免费高清视频 | 欧美日本在线视频 | 波多野结衣电影一区 | 国产精品爽爽久久久久久蜜臀 | 久久综合综合久久综合 | 色99导航 | 亚洲欧美国产精品18p | 久久久久免费精品国产小说色大师 | 波多野结衣电影一区二区 | 免费在线成人av电影 | 日韩精品一区二区三区免费视频观看 | 91精品啪| 韩国精品视频在线观看 | 中文字幕二区在线观看 | 中文字幕在线观看免费高清完整版 | 夜夜夜夜猛噜噜噜噜噜初音未来 | av亚洲产国偷v产偷v自拍小说 | 国产一区二区三精品久久久无广告 | 欧美性色网站 | 一区二区欧美激情 | 成年人av在线播放 | 欧美精品做受xxx性少妇 | 午夜黄色| 国产精品久久久久999 | 亚洲五月六月 | 在线看黄色的网站 | 成人a视频片观看免费 | 久久久久免费精品视频 | 国产 日韩 欧美 在线 | 日本精品视频一区 | 996久久国产精品线观看 | 久久中文字幕导航 | 自拍超碰在线 | 99色婷婷| 依人成人综合网 | 999成人国产| 香蕉蜜桃视频 | av在线电影播放 | 国产在线一区二区三区播放 | 91污污视频在线观看 | 亚洲美女在线国产 | 99在线精品视频 | www.久久久精品 | 综合中文字幕 | 国产精品一区二区免费在线观看 | 精品视频在线播放 | 欧美日韩高清在线观看 | 人人干人人做 | 午夜精品中文字幕 | 黄色官网在线观看 | 欧美激情操 | 四虎成人精品永久免费av九九 | 亚洲精品国久久99热 | 天天操天天操 | 五月天激情在线 | www一起操 | 亚洲最大激情中文字幕 | 97在线观看视频免费 | 一区二区三区免费在线 | 色在线视频 | 色综合久久88色综合天天人守婷 | 国产精品普通话 | 婷婷色网站 | 亚洲在线视频免费 | 丝袜美腿在线播放 | 中文字幕日韩在线播放 | 国产亚洲精品美女 | 国产在线观看中文字幕 | 欧美一区二区三区特黄 | 女人高潮特级毛片 | 伊人亚洲精品 | 东方av在线免费观看 | 香蕉视频在线网站 | 日韩91精品 | 日韩欧在线 | 亚洲综合视频在线观看 | 欧美 激情 国产 91 在线 | 人人舔人人爱 | 国产 日韩 欧美 中文 在线播放 | 蜜臀av性久久久久蜜臀av | 天天操·夜夜操 | 国产九九精品 | 国产视频色 | 午夜精品区| av大全免费在线观看 | 国产黄大片| 日韩欧美精品一区二区三区经典 | 国产在线超碰 | 综合久久综合久久 | 五月婷婷丁香激情 | 日韩二三区 | 精品亚洲欧美无人区乱码 | 国产精品自产拍在线观看 | 久久久久国产成人免费精品免费 | 久草视频视频在线播放 | 日韩伦理片一区二区三区 | 国产三级国产精品国产专区50 | 欧美视频日韩视频 | 五月天av在线| 在线成人高清电影 | 日韩av电影中文字幕在线观看 | 久久国产精品影片 | 久久99国产精品久久 | 国产一级高清 | 国产一区二区三区在线免费观看 | 久久久久久综合网天天 | 亚洲一二区视频 | 男女啪啪网站 | 日韩精品高清不卡 | 中文字幕欧美日韩va免费视频 | 五月天视频网站 | 日韩精品免费一区 | 天天操狠狠操夜夜操 | 国产精品电影在线 | 亚洲综合精品视频 | 国产成人精品av久久 | 91丨精品丨蝌蚪丨白丝jk | 超碰人人国产 | 久久精品一区二区三区国产主播 | 欧美日韩中文视频 | 91视频免费看网站 | 国产主播99 | 91av在线免费视频 | 精久久久久 | 日韩精品在线视频免费观看 | 久久精品国产第一区二区三区 | 视色网站 | 久久首页 | 911香蕉视频 | 国产精品av久久久久久无 | 韩国av一区 | 娇妻呻吟一区二区三区 | 最新av网址在线 | 激情视频在线观看网址 | 久久久久久久久久影视 | 又黄又刺激 | 中文网丁香综合网 | 亚洲黄色免费在线 | 国产一级片观看 | 国产九九精品 | 亚洲激情在线播放 | 综合激情av | 天天干,天天射,天天操,天天摸 | 国产精品夜夜夜一区二区三区尤 | 亚洲人成人在线 | a级片在线播放 | 精品国产视频一区 | 九九一级片 | 香蕉网址| 九九综合久久 | 中文字幕视频网站 | 欧女人精69xxxxxx | 亚洲国产大片 | 国产精品久久久一区二区 | 国产精品初高中精品久久 | 久99久精品| 狠狠色2019综合网 | 亚洲一级久久 | 精品伦理一区二区三区 | 国产黄a三级三级三级三级三级 | 亚洲精品视频免费在线观看 | 在线看日韩av | 91大神精品视频在线观看 | 国产九色91 | 黄色在线观看免费 | 操操爽| 免费观看完整版无人区 | 国产精品久久久久久久久免费 | 国产三级视频在线 | 九色激情网 | 天天草视频| 亚洲成人av在线播放 | 亚洲理论片在线观看 | 91中文字幕一区 | 日韩av电影免费在线观看 | 久久久精品网站 | 超碰官网 | 美女视频黄的免费的 | 国产精品一区二区在线看 | 在线观看国产福利片 | 91福利影院在线观看 | 天天艹天天 | 国产精品美女久久久久久久久 | 国产精品麻豆视频 | 91麻豆精品国产午夜天堂 | 91视频在线观看免费 | 综合久久网 | 正在播放亚洲精品 | 国产视频不卡 |