前端|利用<canvas>画布制作地球轨道

简介: 前端|利用<canvas>画布制作地球轨道

一.什么是<canvas>

<canvas> 画布标签常用于绘制图像,但是,<canvas> 元素本身并没有绘制能力,它仅仅是图形的容器,要想通过<canvas>画布标签来绘制图像,还需要调用js方法。其中最常见得方法是getContext()方法,它可返回一个对象,该对象提供了用于在画布上绘图的方法和属性,可在画布上绘制文本、线条、矩形、圆形等等。今天就利用<canvas> 画布来绘制一下地球轨道的效果。

图1.1 效果图

二.<canvas>基础知识介绍

canvas只有height高度和width宽度两个属性。其默认画布大小是300×150(宽×高)矩形画布。<canvas> 画布的基础就不再介绍了,因为之前看到过一篇关于<canvas>画布知识的介绍,链接如下:

https://mp.weixin.qq.com/s/B3T8ERjAEjlwG6HU_RLEYw

这里再说一下清除画布。这里需要注意的就是:当画布的高度或宽度被重新设置时, 画布内容就会被清空(还可以利用用 clearRect() 方法也可以清空画布)。代码如下:

function clearCanvas()//清空画布

       {

              c.height=c.height;

       }

三.绘制地球轨道图

(1)准备画布

<canvas id="canvas"  width="300" height="300" style="border:1px  solid"></canvas>

(2)调用画笔,设置画笔颜色等。

这里就是用到了clearRect()方法清除画布。globalCompositeOperation 属性设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上。(源图像 = 您打算放置到画布上的绘图:目标图像 = 您已经放置在画布上的绘图)

                     function  draw() {

                     //调用画笔

                       var ctx = document.getElementById('canvas').getContext('2d');

                       ctx.globalCompositeOperation = 'destination-over';

                        ctx.clearRect(0,0,300,300); //清空画布

                       ctx.fillStyle = 'rgba(0,0,0,0)';

                       ctx.strokeStyle = 'deepskyblue';//指定绘线颜色

                       ctx.save();//最初状态

(3)利用JavaScript开始绘制。首先先创建对象,然后对整个页面进行初始化。这里要用到动画命名,采用requestAnimationFrame()方法。这个方法是告诉浏览器执行动画,并请求浏览器调用指定的函数以在下次重绘之前更新动画。该方法将回调作为在重绘之前调用的参数。注意:如果要在下次重绘时为另一帧设置动画,则回调例程必须自己调用requestAnimationFrame()。

var sun = new Image();

var earth = new Image();

       //对整个页面的初始化

                     function  init(){

              sun.src = "img/太阳.png";

                       earth.src ="img/地球.png";

                       window.requestAnimationFrame(draw);}

(4)画地球和太阳。这里介绍一下时间的获取。常用getSeconds()方法获取秒,它的返回值是一个整数且在0-59之间。用dateObject()方法获取毫秒字段,以本地时间显示。用getMilliseconds()方法获取毫秒,它的返回值是一个整数且在 0-999 之间。

//画地球

ctx.translate(150,150);//画布原点移动

                       var time = new Date();

ctx.rotate( ((2*Math.PI)/60)*time.getSeconds()  + ((2*Math.PI)/60000)*time.getMilliseconds() ); //把顺时针旋转角度和当前时间的秒和毫秒变化  关联在一起

ctx.translate(105,0);

ctx.fillRect(0,-12,50,24);

ctx.drawImage(earth,-12,-12);//把地球图形,添加到画布上

//画太阳

 ctx.drawImage(sun,0,0,300,300);

                       window.requestAnimationFrame(draw);

(5)绘制轨道

//画地球旋转轨道

                       ctx.restore();//最初状态 (原点没有移动过)

                       ctx.beginPath();

                       ctx.arc(150,150,105,0,Math.PI*2,false); //  Earth orbit,关联关系,半径 = 地球相对第二原点(150,150) 向右移动的距离

                       ctx.stroke();//绘线


目录
相关文章
|
11月前
|
存储 Web App开发 编解码
图片:前端展示图像(img 、picture、svg、canvas )及常用图片格式(PNG、JPG、JPEG、WebP、GIF、SVG、AVIF等)
图片:前端展示图像(img 、picture、svg、canvas )及常用图片格式(PNG、JPG、JPEG、WebP、GIF、SVG、AVIF等)
645 1
|
1月前
|
移动开发 前端开发 JavaScript
web前端移动端课程之canvas教程系列
web前端移动端课程之canvas教程系列
54 0
|
10月前
|
移动开发 前端开发 JavaScript
Vue 利用Canvas标签实现动态验证码校验(前端必备附源码)
Vue 利用Canvas标签实现动态验证码校验(前端必备附源码)
281 0
|
10月前
|
前端开发
前端 SVG 与 Canvas 框架案例 (画线、矩形、箭头、文字 ....)
前端 SVG 与 Canvas 框架案例 (画线、矩形、箭头、文字 ....)
113 0
|
11月前
|
移动开发 前端开发 JavaScript
【项目笔记】:前端canvas截图功能
canvasAPI、canvas音视频截图功能及注意事项
211 0
|
11月前
|
前端开发 Java PHP
前端(一):canvas验证码
在通常的登录界面我们都可以看到验证码,验证码的作用是检测是不是人在操作,防止机器等非人操作,防止数据库被轻而易举的攻破。   验证码一般用PHP和java等后端语言编写。   但是在前端,用canva或者SVG也可以绘制验证码。
98 0
|
移动开发 前端开发 JavaScript
实现一个前端小画布
# canvas的介绍 在HTML5中` canvas `元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. `<canvas>` 标签只是图形容器,您必须使用脚本来绘制图形。 可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。 # 鼠标事件 我们可以分别控制三个鼠标事件来控制绘画的状态 ## mouseup 这是绑定的鼠标抬起的事件,鼠标抬起后会触发 ## mousedown 这是绑定的鼠标摁下的事件,鼠标摁下后会触发 ## mousemove 这是绑定的鼠标移动的事件,鼠标移动时会触发 ## 一个小实验 ``` <!DOC
|
移动开发 前端开发 JavaScript
前端祖传三件套HTML的HTML5之新绘画元素 canvas
近年来,前端技术发展迅猛,各种新的技术层出不穷。其中之一便是HTML5绘画元素canvas。Canvas(画布)是HTML5新增加的一个绘图区域,它可以用JavaScript来进行操作和绘制图形。
105 0
|
前端开发
前端学习案例1-canvas时钟1
前端学习案例1-canvas时钟1
44 0
前端学习案例1-canvas时钟1
|
前端开发
前端学习案例3-canvas时钟3
前端学习案例3-canvas时钟3
44 0
前端学习案例3-canvas时钟3