HTML5的变形效果实现,包括:移动,缩放,旋转,自定义变形,裁剪,镜像,变形重置等等操作
下面依次讲解:
①移动 / 位移
使用context上下文的translate方法,我们可以控制图形的位置移动,相关方法如下:
context.translate(100, 100); //x轴和y轴移动距离,这里上线文分别移动100个像素
使用translate方法,可以有效的控制context的起始点位置,因为context位置变化,导致绘制图形位置也变化,因此可以方便的在合适位置绘制图形
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML5画布图形位移</title>
</head>
<body>
<!-- 添加canvas标签,并加上红色边框以便于在页面上查看 -->
<canvas id="mycanvas" width="400" height="300"></canvas>
<script type="text/javascript">
/*相关Javascript*/
var canvas = document.getElementById('mycanvas');
context = canvas.getContext('2d'),
elementwidth = 100,
elementheight = 100;
//为了实现位移效果,使用如下方法:
context.translate(100, 100);
//然后绘制图形,这里我们生成一个矩形
context.fillStyle = 'orange';
context.fillRect(0, 0, elementwidth, elementheight); //这个矩形左上角坐标(0, 0),宽度和高度均为100px
//注意:translate在你绘制图形之前调用
</script>
</body>
</html>
②缩放
使用context上下文的scale方法,我们可以控制图形的缩放,相关方法如下:
context.scale(50%, 50%); //x轴和y轴缩放比例
使用scale方法,可以有效的控制context的缩放,因为context缩放变化,导致绘制图形也变化
③旋转
使用context上下文的rotate方法,实现图形旋转效果
context.rotate(Math.PI/4); //顺时针旋转45度
使用rotate方法,可以有效的控制context的旋转,因为context旋转变化,导致绘制图形也发生变化
④自定义变形
使用画布的自定义变形方法可以实现大家需要的变形方式,如下:
/*
* 相关参数说明如下:context.transform(a,b,c,d,e,f);
* a: 水平缩放
* b: 水平倾斜
* c: 垂直倾斜
* d: 垂直缩放
* e: 水平位移
* f: 垂直位移
*/
例子:context.transform(1, 0.5, 0.5, 1, 100, 100);
注意:变形只影响调用transform方法以后的图形绘制
.⑤阴影效果
//绘制文字阴影
context.scale(1, -1);
//再添加一些倾斜效果
context.transform(1, 0, -0.7, 0.7, 0, 0);
//旋转了360°
context.rotate(Math.PI*2)
拓展:
(1)scale() 方法标注画布的用户坐标系统
scale(sx, sy)
scale() 方法为画布的当前变换矩阵添加一个缩放变换。缩放通过独立的水平和垂直缩放因子来完成。例如,传递一个值 2.0 和 0.5 将会导致绘图路径宽度变为原来的两倍,而高度变为原来的 1/2。指定一个负的 sx 值,会导致 X 坐标沿 Y 轴对折,而指定一个负的 sy 会导致 Y 坐标沿着 X 轴对折
例如:scale(1,-1)则是类似阳光照射--垂直阴影
(2)rotate() 方法旋转画布的坐标系统
rotate(angle) //旋转的量,用弧度表示。正值表示顺时针方向旋转,负值表示逆时针方向旋转。
描述:
rotate() 方法通过指定一个角度,改变了画布坐标和 Web 浏览器中的 <Canvas> 元素的像素之间的映射,使得任意后续绘图在画布中都显示为旋转的。它并没有旋转 <Canvas> 元素本身。注意,这个角度是用弧度指定的。
提示:如需把角度转换为弧度,请乘以 Math.PI 并除以 180
文字阴影例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML5画布图形位移</title>
<style type="text/css">
/*界面CSS*/
body{
margin:0;
padding:0;
}
#mycanvas{
background: #E4E4E4; /* 画布背景色 */
}
</style>
</head>
<body>
<!-- 定义canvas元素 -->
<canvas id="mycanvas" width="400" height="300"></canvas>
<script type="text/javascript">
/*画布相关JS*/
//获取context
var canvas = document.getElementById('mycanvas'),
context = canvas.getContext('2d');
//执行位移操作
context.translate(200, 100);
//绘制文字到画布
context.font = "30pt microsoft yahei,Arial,sans-serif";
context.textAlign = "center";
context.fillStyle = "orange";
//绘制正常文字
context.fillText("Hello, gbtags!", 0, 0);
//继续位移
context.translate(0, 40);
//绘制文字阴影
context.scale(1, -1);
// context.rotate(Math.PI*2)这里旋转了360°
//再添加一些倾斜效果
context.transform(1, 0, -0.7, 0.7, 0, 0);
//最后添加阴影文字
context.textAlign = "center";
context.fillStyle = "#BFBFBF";
context.fillText("Hello, gbtags!", 0, 0);
</script>
</body>
</html>
⑥重置变形
前面我们学习了transform(变形)方法,这里介绍setTransform(重置变形)方法,它可以帮助你重置你使用transform方法生成的变形效果,代码如下:
//调用reset,重置context上下文
context.setTransform(1,0,0,1,0,0);
//这里我们使用setTransform方法来重置以前的变形,
//以上设置setTransform参数值为(1,0,0,1,0,0)即可保证重置画布的变形
例子:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>canvas重置变形</title>
<script type = "text/javascript" src="./jquery.min.js"></script>
<style type="text/css">
/*界面CSS*/
body{
margin:0;
padding:0;
}
#mycanvas{
background: #E4E4E4; /* 画布背景色 */
}
</style>
</head>
<body>
<!-- 定义canvas元素 -->
<canvas id="mycanvas" width="400" height="300"></canvas>
<script>
/*画布相关JS*/
var canvas = document.getElementById('mycanvas'),
context = canvas.getContext('2d'),
elementwidth = 100,
elementheight = 100;
context.translate(100, 100); //将context位置移动到100, 100
//绘制一个矩形
context.fillStyle = 'orange';
context.fillRect(0, 0, elementwidth, elementheight);
//调用reset,重置context上下文
context.setTransform(1,0,0,1,0,0); //这里我们使用setTransform方法来重置以前的变形
//再次绘制一个矩形
context.fillStyle = 'black';
context.fillRect(0, 0, elementwidth, elementheight);
//现在看到使用setTransform方法的作用了吧,可以帮助我们重置context
</script>
</body>
</html>
⑦重置变形
使用context的save和restore(回复)方法可以准确的控制变形状态的保存和恢复,相关代码如下:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>canvas重置变形</title>
<script type = "text/javascript" src="./jquery.min.js"></script>
<style type="text/css">
/*界面CSS*/
body{
margin:0;
padding:0;
}
#mycanvas{
background: #E4E4E4; /* 画布背景色 */
}
</style>
</head>
<body>
<!-- 定义canvas元素 -->
<canvas id="mycanvas" width="400" height="300"></canvas>
<script>
/*画布JS*/
var canvas = document.getElementById('mycanvas'),
context = canvas.getContext('2d'),
elementwidth = 50,
elementheight = 50;
//保存初始变形状态
context.save();
//位移变形
context.translate(100, 100);
//保存位移变形状态
context.save();
//旋转变形
context.rotate(-Math.PI/4);
//保存旋转变形状态
context.save();
//缩放变形
context.scale(2, 2);
//开始绘制图形
//第一个图形包含所有变形状态:即,位移+旋转+缩放
context.fillStyle = 'orange';
context.fillRect(0, 0, elementwidth, elementheight);
//恢复到旋转状态点
context.restore();
//第二个图形包含除了缩放以外的所有变形状态:即,位移+旋转
context.fillStyle = 'green';
context.fillRect(0, 0, elementwidth, elementheight);
//恢复到位移状态点
context.restore();
//第三个图形只包含位移变形状态:即,位移
context.fillStyle = 'black';
context.fillRect(0, 0, elementwidth, elementheight);
//恢复到初始状态点,没有任何变形状态
context.restore();
//第四个图形不包含任何的变形状态
context.fillStyle = 'red';
context.fillRect(0, 0, elementwidth, elementheight);
</script>
</body>
</html>
变形状态的保存和恢复遵循“栈”原理,即先入的后出,后入的先出,也就是先显示出来最终结果。类似一个圆桶里放置一层一层的物品,然后一层一层取出的原理类似。
拓展:
(1) fillStyle 属性来设置用于填充绘图的颜色、渐变或模式。fillRect() 方法绘制“已填色”的矩形。默认的填充颜色是黑色。
context.fillRect(x,y,width,height);
参数
描述
x |
矩形左上角的 x 坐标 |
y |
矩形左上角的 y 坐标 |
width |
矩形的宽度,以像素计 |
height |
矩形的高度,以像素计 |
.
相关推荐
在本Demo中,我们将深入探讨WebGL和Three.js中的Sprite和SpriteMaterial,以及如何结合Canvas画布进行更复杂的图形操作。 首先,让我们了解Sprite。在Three.js中,Sprite是一种特殊的几何体,它只由一个二维平面...
以下是Canvas画布相关的知识点详解: 1. **Canvas基本概念**: - Canvas是Android中的一个类,它提供了在各种Surface上绘制图形的能力,如Bitmap、Window等。 - 在Android中,我们通常先创建一个Bitmap对象,然后...
Canvas是一个基于矢量图形的画布,通过JavaScript进行操作。通过这个画布,开发者可以使用路径、矩形、圆形、文本、图像等元素来创建和修改图形。Canvas API提供了大量的绘图方法,如`fillRect()`、`strokeRect()`、...
首先,Canvas API提供了一个二维渲染上下文,通过JavaScript代码来控制画布上的图形绘制。开发者可以使用`<canvas>`标签在HTML文档中创建一个画布,然后通过JavaScript获取到2D渲染上下文,例如: ```html <canvas ...
为了实现流体感,可能还需要额外的技术,如模糊效果、颜色渐变或者扭曲变形等。这些可以通过Canvas的滤镜或者自定义的绘图算法来实现。例如,可以使用`createImageData()`和`putImageData()`方法来处理像素数据,...
7. 变形动画:动画效果是通过定时改变图形的某些属性(如位置、大小、颜色等)并重绘Canvas来实现的。在JavaScript中,可以使用`requestAnimationFrame()`函数来平滑地更新每一帧。 8. 粒子系统:如果项目中包含...
- 可以通过设置Paint的`paint.setTextAlign(Paint.Align.RIGHT)`使文本右对齐,再配合`canvas.translate()`方法改变画布的坐标原点,使得每次绘制文本时都会向左移动一定的距离,从而达到竖排的效果。 4. **步骤...
Canvas 的标签属性只有两个,width 和 height,表示的是 Canvas 画布的宽度和高度,不要用 CSS 来设置,而是用属性来设置,画布会失真变形。 Canvas 的绘制功能 Canvas 提供了多种绘制功能,包括绘制矩形、绘制...
在这个案例中,可能有一个自定义的插件用于处理心形的动画逻辑,如平滑的变形效果。插件通常包含一个或多个函数,可以通过调用`$.fn.pluginName`来使用。 `jQuery特效`是指使用jQuery库创建的各种视觉效果,包括...
3. **Gooey效果实现**:在canvas上实现gooey效果,通常需要使用复杂的数学算法来模拟物体的变形和流动。这可能涉及到向量运算、贝塞尔曲线、粒子系统等技术。开发者可能会使用requestAnimationFrame进行平滑动画,以...
在“万花筒”效果中,圆形通常会被多次复制并进行旋转、缩放等变形,以模拟镜子反射的效果。这可以通过`ctx.save()`和`ctx.restore()`来保存和恢复当前的绘图状态,以及使用`ctx.translate(x, y)`、`ctx.rotate...
在H5开发中,我们经常需要对图像进行各种操作,比如扭曲、自由拉伸和变形,以实现丰富的视觉效果。本教程将详细讲解如何利用HTML5的Canvas API、JavaScript以及OpenGL ES 2.0(WebGL)来实现这些功能。 首先,`...
在HTML5 Canvas中,我们可以使用`<canvas>`元素来创建画布,然后通过JavaScript的Canvas API进行绘图。主要涉及的方法有`getContext()`用于获取2D渲染上下文,`beginPath()`用于开始一个新的路径,`moveTo()`和`line...
这款“html5 canvas彩色碎片组合球形旋转动画特效”利用了Canvas API来实现一种动态视觉效果,使用户可以通过鼠标操作与之互动。 1. **HTML5 Canvas基本概念** HTML5 Canvas是一个基于矢量图形的画布,通过...
3. **扭曲和变形**:为了增加验证码的破解难度,我们需要对绘制的字符进行扭曲和变形。这可以通过在Canvas上应用位移、旋转、缩放等变换实现。例如,可以为每个字符设置不同的起点、角度和缩放比例,使得字符看起来...
在这个"HTML5 Canvas六角星变色变形旋转动画特效.zip"压缩包中,包含了一个利用HTML5 Canvas API实现的六角星动态变换效果。这个特效可能包含了以下几个关键知识点: 1. **HTML5 Canvas基础**:Canvas是一个基于...
Canvas元素通常通过`<canvas>`标签在HTML中定义,它的`id`属性用于JavaScript中获取并操作Canvas画布。 `js`文件夹中很可能包含了实现动画效果的主要JavaScript代码。这些代码可能使用了jQuery库,一个广泛使用的...
5. **动画制作**:通过在paint()方法中加入时间相关的逻辑,例如使用定时器,可以创建动态效果,使图形随着时间变化而移动或变形。 6. **优化绘图**:由于J2ME运行在资源有限的移动设备上,有效的绘图优化至关重要...
5. **绘制文字**:将随机字符串以扭曲、倾斜、加粗等变形方式绘制到canvas上,可以使用`ctx.fillText()`方法。 6. **添加噪声线和点**:为了增加验证码的复杂性,可以在画布上随机绘制一些线条和点,模拟真实图像中...
首先,Canvas API是HTML5引入的一个重要特性,它提供了一块可编程的画布,通过JavaScript来绘制图形。在这个项目中,开发者可能使用了`canvas.getContext('2d')`来获取2D渲染上下文,然后通过一系列的绘图方法,如`...