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()

  

最新文章

  1. h5面试题集合
  2. 【虚拟机】在VMware中安装Server2008之后配置网络连接的几种方式
  3. mysql开启登录日志和sql日志 排查错误
  4. phpexcel文本格式
  5. Shell 字符串比较
  6. Java应用短信猫
  7. hdu1150-Machine Schedule(最小点覆盖)
  8. sql 更新重复数据只取一条记录
  9. Java的优先级
  10. vb.NET基础总结
  11. MFC连接ftp服务器
  12. ios基金会-XCode温馨提示
  13. 绿盟RSAS配置小记
  14. 浏览器http的缓存机制
  15. PHP Array 简介
  16. VUE新版扫码下单必选分类设置FAQ
  17. Wireshark的基本使用——过滤器
  18. Sprint会议计划
  19. org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session异常解决办法
  20. Python Requests库简单入门

热门文章

  1. NodeJs仿阿帕奇实现浏览某一路径文件目录效果
  2. java8的新特性,Collections.sort(排序的List集合)的使用,对list封装Map里面的某个值进行排序
  3. 关于Django中JsonResponse返回中文字典编码错误的解决方案
  4. HTML | video的封面平铺方法
  5. Yii2 联表查询数据丢失,即出现主键覆盖情况的解决方法
  6. nuxt 优化项:禁用js的预加载
  7. Altium Designer 快捷键与技巧
  8. python2x和python3x的一些区别
  9. STL---llist
  10. Go 入门 - Go中的复杂类型