HTML5 学习手笔二:canvas API 绘制树形图案A

简介:

 上篇通过对canvas 画对角线,了解了一些canvas画图基本原理。现在可以利用HTML5 canvas API创建一个场景:带有长跑跑道的树林。

本篇大纲

 

  1. 用canvas API绘制树木的树冠
  2. 为树冠的边框架加粗并且填充树冠颜色
  3. 为树冠创造一个强大的树干
  4. 绘制跑道 

用canvas API绘制树木的树冠

原理还是与上篇画对角线一样,只是步骤增多而已,先看代码:

 

   <script type="text/javascript">
                 function createCanopyPath(context){
                  context.beginPath();
                  
                 context.moveTo(-25,-50);
                 context.lineTo(-10,-80);
                 context.lineTo(-20,-80);
                 context.lineTo(-5,-110);
                 context.lineTo(-15,-110);

                 context.lineTo(0,-140);

                 context.lineTo(15,-110);
                 context.lineTo(5,-110);
                 context.lineTo(20,-80);
                 context.lineTo(10,-80);
                 context.lineTo(25,-50);

                 context.closePath();
                }

         function drawTrails(){
                 var canvas=document.getElementById('diagonal');
                 var context=canvas.getContext('2d');
                
                context.save();
                context.translate(130,250);
                
                createCanopyPath(context);
                context.stroke();
                context.restore();
        }
 window.addEventListener("load",drawTrails, true);
        </script>

DEMO效果如下:

上面的代码中有一个特殊的函数叫做closePath。这个函数的行为同lineTo很像,唯一的差别在于closePath会将路径的起始坐标自动作为目标坐标。closePath还会通知canvas当前绘制的图形己经闭合或者形成了完全封闭的区域。

 

 为树冠的边框架加粗并且填充树冠颜色

 为了使树冠更加形象并且看起来像真的树,不得不利用canvas 的API绘制其图形外观,代码如下:

 

   function drawTrails(){
                 var canvas=document.getElementById('diagonal');
                 var context=canvas.getContext('2d');
                
                context.save();
                context.translate(130,250);
                
                createCanopyPath(context);
                 // 加宽线条
                context.lineWidth=4;
                 // 平滑路径的接合点
                context.lineJoin='round';
                 // 将颜色改成棕色
                context.strokeStyle='#663300';
                
                 // 将填充色设置为绿色并填充树冠
                context.fillStyle='#339900';
                context.fill();
        
                context.stroke();
                context.restore();
        }

 

 DEMO效果见下面运行效果:

lineJoin属性设置为round,这是修改当前形状中线段的连接方式,让拐角变得更加油;也可以把lineJoin属性设置成bevel或者miter来变换拐角样式。

strokeStyle属性是为了改变线条颜色。

fillStyle属性是为了设置填充颜色

context 的fill 函数是为了可以让canvas对当前图形中所有的闭合路径内部的像素点进行填充,配合fillStyle 填充内部像形点颜色。

 

 为树冠创造一个强大的树干

创建树干有两种方法

 

  1. 用我们上面学过的使用线条然后配合closePath画树干
  2. HTML5 提供了一个强大的填充矩形的函数 fillRect 可以画一块矩形x轴、y轴、需要画的宽度和高度即可 

 

在这里我们使用fillRect 来构建树干。代码如下:

 

 context.fillStyle='#663300';
                context.fillRect(-5,-50,10,50);

 

 效果DEMO如下:

  

与fillRect相关的函数还有:strokeRect和clearRect。strokeRect的作用是基于给出的位置和坐标画出矩形的轮廓,clearRect的作用是清除矩形区域内的所有内容并将它恢复到初始状态,即透明。

 

 

 绘制跑道 

 完成本篇最后一个功能,在小树旁边画上一个跑道。代码如下:

  function drawTrails(){
                 var canvas=document.getElementById('diagonal');
                 var context=canvas.getContext('2d');
                
                context.save();
                context.translate(130,250);
                
                createCanopyPath(context);
                 // 加宽线条
                context.lineWidth=4;
                 // 平滑路径的接合点
                context.lineJoin='round';
                 // 将颜色改成棕色
                context.strokeStyle='#663300';
                
                 // 将填充色设置为绿色并填充树冠
                context.fillStyle='#339900';
                context.fill();
                
                context.fillStyle='#663300';
                context.fillRect(-5,-50,10,50);
        
                context.stroke();
                context.restore();

                context.save();
                context.translate(-10,350);
                context.beginPath();
                context.moveTo(0,0);
                 // 第一条曲线向右上方弯曲
                context.quadraticCurveTo(170,-50,260,-190);
                 // 第二条曲线向右下方弯曲
                context.quadraticCurveTo(310,-250,410,-250);
                context.strokeStyle='#663300';
                context.lineWidth=20;
                context.stroke();
                context.restore();
        } 

quadraticCurveTo函数绘制曲线的起点是当前坐标,带有两组(x,y)参数。第二组是指曲线的终点。第一组代表控制点。所谓的控制点位于曲线的旁边,其作用相当于对曲线产生一个拉力。通过高速控制点的位置,就可以改变曲线的曲率。在右上方再画一条一样的曲线,以形成一条路。DEMO效果如下:

 

与quadraticCureTo函数一样的曲线功能还涉及:bezierCurveTo、arcTo和arc函数。这些函数通过多种控制点(如半径、角度和等)让曲线更具可塑性。

 

 本文转自 terry_龙 51CTO博客,原文链接:http://blog.51cto.com/terryblog/798910,如需转载请自行联系原作者

相关文章
|
4月前
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
185 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
4月前
|
人工智能 数据可视化 API
自学记录鸿蒙API 13:Calendar Kit日历功能从学习到实践
本文介绍了使用HarmonyOS的Calendar Kit开发日程管理应用的过程。通过API 13版本,不仅实现了创建、查询、更新和删除日程等基础功能,还深入探索了权限请求、日历配置、事件添加及查询筛选等功能。实战项目中,开发了一个智能日程管理工具,具备可视化管理、模糊查询和智能提醒等特性。最终,作者总结了模块化开发的优势,并展望了未来加入语音助手和AI推荐功能的计划。
236 1
|
9月前
|
存储 API Go
学习gin-vue-admin之创建api和swagger
学习gin-vue-admin之创建api和swagger
|
9月前
|
JavaScript 前端开发 Java
|
7月前
|
移动开发 数据可视化 HTML5
Twaver-HTML5基础学习(40)表格可视化视图组件(Table)
本文介绍了如何在Twaver-HTML5中使用表格可视化视图组件(Table),包括创建表格、定义列对象、实现数据绑定和排序,以及处理表格事件和获取表格数据的方法。
93 1
|
前端开发 数据安全/隐私保护
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第6章表格与表单
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第6章表格与表单
219 0
|
移动开发 前端开发 HTML5
HTML5学习-表格标签
HTML5学习-表格标签
|
移动开发 Java HTML5
HTML5 学习7.表格标签
HTML5 学习7.表格标签
|
2月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
76 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
下一篇
oss创建bucket