canvas学习(二):渐变与曲线的绘制

一:createLinearGradient()线性渐变:

二:createLinearGradient() 放射状/圆形渐变:

三:createPattern()使用图片,画布,video

注意: createPattern() 的第一个参数也可以是canvas对象,video对象

四:曲线的绘制

1、arc()

实例:绘制圆角矩形

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
c.width = 800;
c.height = 800;
drawRoundRect(ctx,200,200,200,200,20); function drawRoundRect(ctx,x,y,width,height,radius){
ctx.save();
ctx.translate(x,y);
pathRoundRect(ctx,width,height,radius);
ctx.strokeStyle = "black";
ctx.stroke();
ctx.restore();
}
function pathRoundRect(ctx,width,height,radius) {
ctx.beginPath();
ctx.arc(width-radius,height-radius,radius,0,Math.PI/2);
ctx.lineTo(radius,height);
ctx.arc(radius,height-radius,radius,Math.PI/2,Math.PI);
ctx.lineTo(0,radius);
ctx.arc(radius,radius,radius,Math.PI,Math.PI*1.5);
ctx.lineTo(width-radius,0);
ctx.arc(width-radius,radius,radius,Math.PI*1.5,Math.PI*2);
ctx.closePath();
}

  

2:arcTo() :介于两个切线之间的弧     传送门

3:quadraticCurveTo() :贝塞尔二次曲线   互动模拟

4:bezierCurveTo():三次贝塞尔曲线   互动模拟

实例:画波浪线

function draw(ele,startX,startY,huduX,huduY,num,width,color) {
var canvas = document.getElementById(ele)
var ctx = canvas.getContext('2d')
ctx.lineWidth = width;
ctx.strokeStyle = color;
for(var i = 0; i<num; i++){
ctx.beginPath();
var startPoint = {
x: startX + (2*i*huduX),
y: startY
}
var endPoint = {
x: startPoint.x + (2*huduX),
y: startY
}
console.log(startPoint)
ctx.moveTo(startPoint.x, startPoint.y);
ctx.bezierCurveTo(startPoint.x+huduX, startPoint.y-huduY,startPoint.x+huduX, startPoint.y+huduY,endPoint.x, endPoint.y);
ctx.stroke();
}
}
draw('myCanvas',100,100,100,50,3,10,'#000')

  

实例2:草地

function draw2(){
var canvas = document.getElementById('myCanvas')
var ctx = canvas.getContext('2d') ctx.beginPath();
ctx.moveTo(0, 600);
ctx.bezierCurveTo(540, 400, 660, 800, 1200, 600);
ctx.lineTo(1200,800)
ctx.lineTo(0,800)
ctx.closePath() ctx.fillStyle="green"
ctx.fill(); }
draw2()

  

canvas学习(二):渐变与曲线的绘制的更多相关文章

  1. canvas学习和面向对象(二)

    Canvas 学习(二) 上一篇Canvas 学习(一)中我是用canvas绘制了一些基本和组合的图形. 现在开始绘制图片和动画帧,以及面向对象的升级版本. 还是一样,看代码,所有的代码都托管在git ...

  2. canvas学习(一)

    Canvas 学习之路 (一) canvas 是H5 里面神一样的东西,使得只是通过html和js就能做出非常棒的游戏和画面. 因为对前端无限的爱好,更加对canvas充满好奇,将我学习canvas的 ...

  3. 【canvas学习笔记二】绘制图形

    上一篇我们已经讲述了canvas的基本用法,学会了构建canvas环境.现在我们就来学习绘制一些基本图形. 坐标 canvas的坐标原点在左上角,从左到右X轴坐标增加,从上到下Y轴坐标增加.坐标的一个 ...

  4. canvas绘制二次贝塞尔曲线----演示二次贝塞尔四个参数的作用

    canvas中绘制二次贝塞尔曲线的方法为ctx.quadraticCurveTo(x1,y1,x2,y2); 四个参数分别为两个控制点的坐标.开始点即当前canvas中目前的点,如果想从指定的点开始, ...

  5. 基于canvas二次贝塞尔曲线绘制鲜花

    canvas中二次贝塞尔曲线参数说明: cp1x:控制点1横坐标 cp1y:控制点1纵坐标 x: 结束点1横坐标 y:结束点1纵坐标 cp2x:控制点2横坐标 cp2y:控制点2纵坐标 z:结束点2横 ...

  6. canvas学习笔记(上篇)-- canvas入门教程 -- canvas标签/方块/描边/路径/圆形/曲线

    [上篇] -- 建议学习时间4小时  课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...

  7. Canvas学习:封装Canvas绘制基本图形API

    Canvas学习:封装Canvas绘制基本图形API Canvas Canvas学习   从前面的文章中我们了解到,通过Canvas中的CanvasRenderingContext2D对象中的属性和方 ...

  8. canvas学习之API整理笔记(二)

    前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...

  9. canvas基础[二]教你编写贝塞尔曲线工具

    贝塞尔曲线 bezierCurveTo 在线工具 https://canvature.appspot.com/ [感觉这个好用一些] https://blogs.sitepointstatic.com ...

随机推荐

  1. 纯 js 实现跨域接口调用 jsonp

    开发「bufpay.com 个人即时到账收款平台」的时候,支付页面需要 poll轮询 查询订单状态. bufpay 支付接口如下: 接口地址:https://bufpay.com/api/pay/ai ...

  2. ubuntu18.04安装搜狗输入法

    首先,安装Fcitx输入框架 sudo apt install fcitx 其次,上搜狗输入法官网下载Linux版本搜狗输入法(32位和64位根据自己情况,在虚拟机上用浏览器下载即可 然后进入相应的下 ...

  3. 误操作yum导致error: rpmdb解决方法

    错误:[root@test ~]# yum makecache error: rpmdb: BDB0113 Thread/process 18967/139716328294400 failed: B ...

  4. PHP运行原理之Opcodes

    在我之前的博客<Laravel5框架性能优化技巧>中提到开启OPcache可以提升php性能.那么为什么开启OPcache就可以提升php运行性能呢?这里就要提到php的运行原理了--Op ...

  5. h5禁用手机input点击放大

    最近项目做的是h5的手机移动端,在用苹果浏览器测试时,弹出框输入信息会自动拉伸屏幕,并且不会像安卓一样回来. 网上查找说设置浏览器自适应头,但是并没有效果, <meta name="v ...

  6. C/C++中的malloc、calloc和realloc

    1. malloc 原型:extern void *malloc(unsigned int num_bytes); 头文件:Visual C++6.0中可以用malloc.h或者stdlib.h 功能 ...

  7. core dump文件分析和调试

    core介绍 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成"核心转储").我们可以认 ...

  8. P2P通讯

    转载: http://www.cnblogs.com/pannengzhi/p/4800526.html http://blog.csdn.net/lee353086/article/details/ ...

  9. 20145234黄斐《Java程序设计》第七周学习总结(课本部分)

    教材知识概述 存储器系统是一个具有不同容量.成本和访问时间的存储设备的层次结构. 6.1 存储技术 1.随机访问存储器(RAM)分为两类:静态的(SRAM)比动态的(DRAM)快,但也贵得多 静态RA ...

  10. BZOJ3293_分金币_KEY

    题目传送门 设x[i]表示i+1向i传的糖果数,x[n]表示1向n传的糖果数,a'=(a[1]+...a[N])/N a[1]+x[1]−x[n]=a' a[2]+x[2]−x[1]=a' a[3]+ ...