css画布
绘制基本图形
绘制直线
<style>
.canvas{
}
</style>
<canvas id="myCanvas1" style="border:1px solid;" width="200" height="100">
您的浏览器不支持画布
</canvas>
//绘制直线
var c1=document.getElementById('myCanvas1');
var context1=c1.getContext('2d');
context1.strokeStyle='#F34F34'; // 线条颜色
context1.moveTo(0,0); // 将笔移动到
context1.lineTo(200,100);
context1.stroke();//开始画图
运行截图:
填充矩形、矩形轮廓
<canvas id="myCanvas2" class="p2" style="border:1px solid;" width="200" height="100">您的浏览器不支持画布</canvas>
//填充矩形 fillRect
var c2=document.getElementById('myCanvas2');
var context2=c2.getContext('2d');
context2.fillStyle='#F24F24'; // 填充颜色
context2.fillRect(0,0,200,100);//左上坐标、长、宽 填充矩形
//矩形轮廓(strokeRect)
context2.strokeStyle='#FFFFFF';
context2.strokeRect(0,0,100,50);//连接矩形 绘画矩形
运行截图:
绘制圆形
var c3=document.getElementById('myCanvas3');
con3=c3.getContext('2d');
con3.strokeStyle='#FF00FF';
con3.beginPath();
con3.arc(100,50,30,0,Math.PI*2,false);//圆心坐标、半径、startAngle、endAngle、是否顺势针
con3.closePath();//将图形封闭
con3.fill(); // 填充
//con3.stroke(); 绘制圆形
运行截图:
绘制三角形
var c4=document.getElementById('myCanvas4')
var con4=c4.getContext('2d');
con4.fillStyle='#F34F34';
con4.beginPath();
con4.moveTo(0,0); // 起点
con4.lineTo(100,0); // 一横
con4.lineTo(0,80); // 一下
con4.closePath();// 封闭
con4.stroke(); // 绘制线条
运行截图:
同心圆
var c5=document.getElementById('myCanvas5');
var con5=c5.getContext('2d');
con5.strokeStyle='#F34F34';
/*con5.moveTo(0,0);
con5.lineTo(50,50);
con5.stroke();*/
for(var i=0;i<=10;i++)
{
con5.strokeStyle='#F34F34';
con5.beginPath();
// con5.arc(0,100,i*10,-0.5*Math.PI,-Math.PI,ture);
con5.arc(100,100,i*10,0,Math.PI*2,false);
con5.stroke();
}
运行截图:
绘制图片
var c=document.getElementById('myCanvas');
var ct=c.getContext('2d');
var img=new Image();
img.src='../../images/logo.jpg';
img.onload=function(){
ct.drawImage(img,20,20,200,200,40,20,200,100); // 起点坐标、图片宽高、
}
填充文字
var c=document.getElementById('myCanvas');
var ct=c.getContext('2d');
//设置填充字体
ct.font='italic 35px 黑体';//斜体,黑体,大小
ct.textAlign='start';
ct.fillText('绘制填充文字',30,50);
ct.font='bold 35px 宋体';
ct.fillStyle='blue';
ct.fillText('绘制填充文字',30,100); // (30,100),左上角坐标
运行截图:
清空画布
var c3=document.getElementById('canvas');
con3=c3.getContext('2d');
con3.strokeStyle='#FF00FF';
con3.beginPath();
con3.arc(100,100,50,0,2*Math.PI,false);//圆心坐标、半径、startAngle、endAngle、是否顺势针
con3.closePath();//将图形封闭
con3.fill();
setTimeout(function(){
con3.clearRect(0,0,400,400); // 清空矩形区域
},4000);
画布旋转
var c=document.getElementById('myCanvas');
var ct=c.getContext('2d');
function draw(ct)
{
ct.strokeStyle='dark';
ct.fillStyle='#FCC';
ct.beginPath();
ct.arc(0,-170,30,0,-Math.PI,true);
ct.fill();
ct.moveTo(0,170);
ct.lineTo(0,100);
ct.stroke();
ct.beginPath();
ct.arc(5,100,5,0,Math.PI,true);
ct.stroke();
}
ct.translate(200,200);
for(var i=0;i<6;i++)
{
draw(ct);
ct.rotate(Math.PI*1/3);
}
运行截图:
- ct.translate(200,200);
将画布的原点移动到(200,200)
- ct.rotate(Math.PI*1/3);
将画布的坐标系旋转120°
创建阴影
var c=document.getElementById('myCanvas');
var ct=c.getContext('2d');
//创建阴影的大小
ct.shadowOffsetX=3;
ct.shadowOffsetY=5;
//创建阴影的颜色
ct.shadowColor='blue';
ct.fillStyle='#CCC';
ct.fillRect(0,0,400,400); // 绘制矩形背景
//设置字体
ct.font='45px 微软雅黑';
ct.fillStyle='white';
ct.fillText('HTML5 +CSS3',35,180);
径向渐变
<canvas id="myCanvas" width="300" height="300" class="canvas"></canvas>
var c=document.getElementById('myCanvas');
var ct=c.getContext('2d');
/*
var radgrad=ct.createRadialGradient(150,150,100,150,150,0);
radgrad.addColorStop(0,'blue');
radgrad.addColorStop(1,'white');
ct.fillStyle=radgrad;
*/
//画个太阳 首先创建一个渐变对象,
var radgrad=ct.createRadialGradient(130,130,10,150,150,100);//
radgrad.addColorStop(0,'#ffffff');
//radgrad.addColorStop(0,'dark');
radgrad.addColorStop(1,'#000000');
ct.fillStyle=radgrad; //使用渐变对象作为填充样式
ct.beginPath();
ct.arc(150,150,100,0,Math.PI*2,true);
ct.closePath();
ct.fill();
ct.globalAlpha=0.5; // 调节透明度
ct.beginPath();
ct.arc(150,150,100,0,Math.PI*2,true);
ct.closePath();
ct.fill();
- var radgrad=ct.createRadialGradient(130,130,10,150,150,100); 创建渐变对象
- ct.fillStyle=radgrad; //使用渐变对象作为填充样式
- ct.globalAlpha=0.5; // 调节透明度
context.createRadialGradient(x0,y0,r0,x1,y1,r1);
x0 | 渐变的开始圆的 x 坐标 |
---|---|
y0 | 渐变的开始圆的 y 坐标 |
r0 | 开始圆的半径 |
x1 | 渐变的结束圆的 x 坐标 |
y1 | 渐变的结束圆的 y 坐标 |
r1 | 结束圆的半径 |
Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持 createRadialGradient() 方法。
矩阵变换
var c=document.getElementById('myCanvas');
var ct=c.getContext('2d');
ct.transform(0,1,1,0,100,100);//将坐标原点移动到(100,100)
ct.strokeStyle='dark';
ct.moveTo(0,0);
ct.lineTo(80,80);
ct.stroke();
浏览器支持
Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持 transform() 方法。
注释:Internet Explorer 8 或更早的浏览器不支持 元素。
context.transform(a,b,c,d,e,f);
a c e
b d f
0 0 1
参数值
参数 | 描述 |
---|---|
a | 水平缩放绘图 |
b | 水平倾斜绘图 |
c | 垂直倾斜绘图 |
d | 垂直缩放绘图 |
e | 水平移动绘图 |
f | 垂直移动绘图 |
x \\
y
\end{bmatrix} =
\begin{bmatrix}
a&c \\
b&d
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\]
x \\
y
\end{bmatrix}=
\begin{bmatrix}
0& 1 \\
1&0
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\]
ct.transform(0,1,1,0,100,100);
对于上式,将x变换成y,y变换成x
- 直面意
a是对x轴的缩放比例
d是对y轴的缩放比例
- e,f
平移
坐标平移
ct1.translate(35,50);
向x,y轴方向平移
样式的保存与恢复
var c1=document.getElementById('myCanvas1');
var ct1=c1.getContext('2d');
ct1.strokeStyle='blue';
ct1.fillStyle='#FF00FF';
//ct1.fillStyle='#FFFFFF';
ct1.strokeRect(20,20,100,100);
ct1.fillRect(20,20,100,100);
ct1.fill();
ct1.stroke();
//保存当前的状态
ct1.save();
//绘画第二个矩形
ct1.fillStyle='#ff0000';
ct1.strokeStyle='green';
ct1.fillRect(140,20,100,100);
ct1.strokeRect(140,20,100,100);
ct1.fill();
ct1.stroke();
//恢复第一个矩形的状况
ct1.restore();
ct1.fillRect(20,140,50,50);
ct1.strokeRect(80,140,50,50);
图形的裁剪和重叠
var c=document.getElementById('myCanvas1');
var ct=c.getContext('2d');
ct.fillStyle='blue';ct.globalAlpha=1;
ct.fillRect(50,50,100,100);
ct.fillStyle='red';
ct.globalCompositeOperation='source-over';
// ct.globalCompositeOperation='destination-over';//B覆盖A
ct.globalCompositeOperation='source-atop';//只绘制原有内容与原有内容部分
//只绘制新图形及重叠部分
ct.globalCompositeOperation='destination-atop';
//只出现与原有部分重叠的部分,其余部分都为透明的
ct.globalCompositeOperation='source-in';
//只出现与现有部分重叠的部分,其余部分皆为透明的
ct.globalCompositeOperation='destination-in';
//去掉与原有图形重叠部分的内容
ct.globalCompositeOperation='source-out';
//去掉与后添加的图形重合的部分
ct.globalCompositeOperation='destination-out';
//将重合部分做减色处理
ct.globalCompositeOperation='lighter';
//将重叠部分做加色处理
ct.globalCompositeOperation='darker';
ct.globalAlpha=1;
ct.beginPath();
ct.arc(150,150,50,0,Math.PI*2,true);
ct.closePath();
ct.fill();
缩放
var c=document.getElementById('myCanvas');
var ct=c.getContext('2d');
ct.translate(180,200);
ct.scale(2,1);
ct.beginPath();
ct.arc(0,0,20,0,Math.PI*2,true);
ct.stroke();
ct.scale(0.5,2);
ct.beginPath();
ct.arc(0,100,20,0,Math.PI*2,true);
ct.stroke();
颜色渐变
var c=document.getElementById('myCanvas');
var ct=c.getContext('2d');
var lingrad=ct.createLinearGradient(0,0,0,400);
lingrad.addColorStop(0,'#FF0000');
lingrad.addColorStop(1/7,'#FF9900');
lingrad.addColorStop(2/7,'#FFFF00');
lingrad.addColorStop(3/7,'#00FF00');
lingrad.addColorStop(4/7,'#00FFFF');
lingrad.addColorStop(5/7,'#FF00FF');
lingrad.addColorStop(6/7,'#FF00FF');
lingrad.addColorStop(1,'#FF0000');
ct.fillStyle=lingrad;
ct.strokeStyle=lingrad;
线条样式
var c=document.getElementById('myCanvas');
var ct=c.getContext('2d');
ct.strokeStyle='#CCC';
//设置线段的宽度
ct.lineWidth=10;
//设置端点处的样式
ct.lineCap='round';//圆头
//设置连接处的样式
ct.lineJoin='round';//bevel miter
// ct.lineJoin='miter';
ct.beginPath();
ct.moveTo(20,20);
ct.lineTo(100,100);
ct.stroke();
ct.lineTo(180,20);
ct.stroke();
css画布的更多相关文章
- Matplotlib数据可视化(3):文本与轴
在一幅图表中,文本.坐标轴和图像的是信息传递的核心,对着三者的设置是作图这最为关心的内容,在上一篇博客中虽然列举了一些设置方法,但没有进行深入介绍,本文以围绕如何对文本和坐标轴进行设置展开(对图像 ...
- 关于使用Css设置Canvas画布大小的问题
问题分析 我们在调整画布大小时,希望画布中的图形保持不变,只是改变画布本身的大小.但是如果使用Css设置画布大小,则会出现问题. 问题描述 如果使用Css设置Canvas画布的大小,则导致画布按比例缩 ...
- css总结19:HTML5 Canvas(画布)
1 <canvas> 标签定义图形,比如图表和其他图像. 例1:简单使用: <canvas id="Canva" width="200" h ...
- 关于 CSS 反射倒影的研究思考
原文地址:https://css-tricks.com/state-css-reflections 译者:nzbin 友情提示:由于演示 demo 的兼容性,推荐火狐浏览.该文章篇幅较长,内容庞杂,有 ...
- 有趣的 CSS 像素艺术
原文地址:https://css-tricks.com/fun-times-css-pixel-art/#article-header-id-4 译者:nzbin 友情提示:由于国内网络的原因,Cod ...
- CSS 3 学习——transform 3D转换渲染
以下内容根据官方规范翻译,没有翻译关于SVG变换的内容和关于矩阵计算的内容. 一般情况下,元素在一个无景深无立体感的平面(flat plane)上渲染,这个平面就是其包含块所处的平面.同时,页面上的其 ...
- CSS——关于z-index及层叠上下文(stacking context)
以下内容根据CSS规范翻译. z-index 'z-index'Value: auto | <integer> | inheritInitial: autoApplies to: posi ...
- 豪情-CSS解构系列之-新浪页面解构-02
前言 一.开发工具 - 前端四大利器 1. WebStorm 1). 岂今为止,业界公认的前端开发利器.优点: 2). 缺点 3). 相关资源 4). 后续展望 2. Photoshop 1).基本信 ...
- CSS学习笔记——包含块 containing block
以下内容翻译自CSS 2.1官方文档.网址:https://www.w3.org/TR/CSS2/visudet.html#strut 有时,一个元素的盒子的位置和尺寸根据一个确定的矩形计算,这个确定 ...
随机推荐
- luogu P2754 [CTSC1999]家园
本题是分层图最大流问题,相当于按时间拆点,每个当前点向下一点的下一时间层连点,每一层有n+1个点 #include<bits/stdc++.h> using namespace std; ...
- MVC webuploader 图片
AARTO:SaveNoticeAndDocument ~/Scripts/Upload/webuploader-0.1.4/dist/webuploader.js
- Android开发_*.R文件无法自动生成
问题描述: 今天是我决定专注Android开发的第一天,我在网上下载了一个数独游戏的源码,准备开始着手学习.在导入之后出现Java文件中import *.R文件报错,在gen目 ...
- 树莓派中实现ll命令
用管了centos的童鞋们,到了一个没有ll命令的环境里,那是多么的痛苦,在baidu后,将实现方法记录如下 方法一: echo "alias ll='ls -l'" >&g ...
- quartz spring 实现动态定时任务
在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间.频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quar ...
- spyder崩溃修复
实验室突然断电,重启电脑后spyder崩溃 在anaconda命令行中输入命令失败 StackOverflow上找的解决方案,适合win10系统,简单粗暴 在win10搜索里面找,点一下就自动修复了
- 用sql删除数据库重复的数据的方法
/***********************************************两个意义上的重复记录:1.是完全重复的记录,也即所有字段均重复的记录,2.是部分关键字段重复的记录, ...
- Redis之datatype概述
Redis支持的数据类型 String List Set Sorted Set Hashes Bit array HyperLogLog Bina ...
- vue前端项目初始化的步骤
前端项目初始化的步骤 1. 安装vue脚手架 2.通过vue脚手架创建项目 可以直接 vue create 项目名 也可以 vue ui 3.配置vue路由 4.配置Element-ui 组件 ...
- arm linux 移植 python3.6
背景: 人生苦短,我用Python. 说明: 编译Python的嵌入式版需要解释器解析setup.py从而编译Python的模块,因此需要先编译出host的解释器.(有点像Go语言) Python : ...