JavaScript动画实例:旋转的圆球
1.绕椭圆轨道旋转的圆球
在Canvas画布中绘制一个椭圆,然后在椭圆上绘制一个用绿色填充的实心圆。之后每隔0.1秒刷新,重新绘制椭圆和实心圆,重新绘制时,实心圆的圆心坐标发生变化,但圆心坐标仍然位于椭圆曲线上。这样,可以得到绕椭圆轨道旋转的圆球动画。
编写如下的HTML代码。
<!DOCTYPE html>
<head>
<title>绕椭圆轨道旋转的圆球</title>
<script type="text/javascript">
var context;
var width,height;
var i;
function draw(id)
{
var canvas = document.getElementById(id);
if (canvas == null)
return false;
context = canvas.getContext('2d');
width=canvas.width;
height=canvas.height;
i=0;
setInterval(move,100);
}
function move()
{
context.clearRect(0,0,width,height);
var dig=Math.PI/24;
context.beginPath();
context.strokeStyle="green";
context.ellipse(150,150,120,60,0,0,Math.PI*2,true);
context.stroke();
context.closePath();
var x=120*Math.sin(i*dig)+150;
var y=60*Math.cos(i*dig)+150;
context.beginPath();
context.arc(x,y,10,0,Math.PI*2,true);
context.fillStyle = "red";
context.fill();
context.closePath();
i=i+1;
if (i>=48) i=0;
}
</script>
</head>
<body onload="draw('myCanvas');">
<canvas id="myCanvas" width="300" height="300" style="border:3px double #996633;"></canvas>
</canvas>
</body>
</html>
将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中呈现出绕椭圆轨道旋转的圆球。

图1 绕椭圆轨道旋转的圆球
2.网的绘制
设立坐标计算公式为:
X=R*SIN(α)
Y=R*COS(α*0.9)
再用循环依次取α值为0~20(每次增量为0.02),计算出X和Y,在canvas画布中将坐标点(X,Y)用线连起来,可绘制出一个曲线图形。
编写HTML文件如下:
<!DOCTYPE html>
<head>
<title>网的绘制</title>
<script type="text/javascript">
function draw(id)
{
var canvas=document.getElementById(id);
if (canvas==null)
return false;
var context=canvas.getContext('2d');
context.fillStyle="#EEEEFF";
context.fillRect(0,0,400,300);
context.strokeStyle="red";
context.lineWidth=2;
context.beginPath();
var r=150;
for (var i=0;i<1000;i++)
{
var x = Math.sin(i*0.02)*r+200;
var y = Math.cos(i*0.02 * 0.9)*r+150;
if (i==0)
{
context.moveTo(x,y);
}
else
context.lineTo(x,y);
}
context.stroke();
}
</script>
</head>
<body onload="draw('myCanvas');">
<canvas id="myCanvas" width="400" height="300">您的浏览器不支持canvas!
</canvas>
</body>
</html>
将上述HTML代码保存到一个html文本文件中,再在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中绘制出如图2所示的图形。若修改语句“for (var i=0;i<1000;i++)”为“for (var i=0;i<3600;i++)”,保存后重新在浏览器中打开,可以看到在浏览器窗口中绘制出如图3所示的图形。

图2 连接1000个点绘制的图形

图3 连接3600个点绘制的网
3.网的编织
我们可以将网的绘制过程进行动态展示,编写HTML文件如下。
<!DOCTYPE html>
<head>
<title>网的编织(一)</title>
<script type="text/javascript">
var context;
var i;
function draw(id)
{
var canvas = document.getElementById(id);
if (canvas == null)
return false;
context = canvas.getContext('2d');
context.fillStyle="#EEEEFF";
context.fillRect(0,0,400,300);
i=0;
setInterval(go,0.1);
}
function go()
{
context.strokeStyle="red";
context.lineWidth=2;
var x = Math.sin(i*0.02)*150+200;
var y = Math.cos(i*0.02 * 0.9)*150+150;
context.beginPath();
context.arc(x, y, 3, 0, 2 * Math.PI);
context.fillStyle = "red";
context.fill();
i=i+1;
if (i>=3600)
{
i=0;
context.clearRect(0,0,400,300);
}
}
</script>
</head>
<body onload="draw('myCanvas');">
<canvas id="myCanvas" width="400" height="300" style="border:3px double #996633;"></canvas>
</body>
</html>
在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中网的编织动画,如图4所示。

图4 网的编织(一)
我们可以取系统当前时间计算点的坐标,并且圆的填充颜色进行两种颜色的切换,编写HTML文件如下。
<!DOCTYPE html>
<html>
<head>
<title>网的编织(二)</title>
<body>
<canvas id="myCanvas" width="400" height="400" style="border:3px double #996633;"></canvas>
<script type="text/javascript">
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var flag=1;
function animate() {
window.requestAnimationFrame(animate);
draw();
}
function draw() {
var time = new Date().getTime() * 0.002;
var x = Math.sin(time)*180+200;
var y = Math.cos(time * 0.9)*180+200;
flag = !flag;
context.fillStyle = flag ? 'rgb(200,200,10)' : 'rgb(10,10,200)';
context.beginPath();
context.arc(x, y, 10, 0, Math.PI*2, true);
context.closePath();
context.fill();
}
animate();
</script>
</body>
</html>
在浏览器中打开包含这段HTML代码的html文件,可以看到在浏览器窗口中网的编织另一种动画,如图5所示。

图5 网的编织(二)
JavaScript动画实例:旋转的圆球的更多相关文章
- JavaScript动画实例:李萨如曲线
在“JavaScript图形实例:阿基米德螺线”和“JavaScript图形实例:曲线方程”中,我们学习了利用曲线的方程绘制曲线的方法.如果想看看曲线是怎样绘制出来的,怎么办呢?编写简单的动画,就可以 ...
- JavaScript动画实例:递归分形图动态展示
在“JavaScript图形实例:SierPinski三角形” 和“JavaScript图形实例:Levy曲线及其变形”等文章中我们介绍了通过递归生成分形图形的方法.我们可以将绘制的分形图形每隔一定的 ...
- JavaScript动画实例:曲线的绘制
在“JavaScript图形实例:曲线方程”一文中,我们给出了15个曲线方程绘制图形的实例.这些曲线都是根据其曲线方程,在[0,2π]区间取一系列角度值,根据给定角度值计算对应的各点坐标,然后在计算出 ...
- JavaScript动画实例:旋转的正三角形
给定一个正三角形的重心坐标为(x0,y0),高为h,可以用如下的语句绘制一个底边水平的正三角形. ctx.beginPath(); ctx.moveTo(x0,y0-h*2/3); ctx.lineT ...
- CSS动画实例:小圆球的海洋
CSS背景属性用于定义HTML元素的背景,在CSS提供的背景属性中, background-image:指定要使用的一个或多个背景图像: background-color:指定要使用的背景颜色: ba ...
- JavaScript动画实例:动感小球
已知圆的坐标方程为: X=R*SIN(θ) Y=R*COS(θ) (0≤θ≤2π) 将0~2π区间等分48段,即设定间隔dig的值为π/24.θ初始值从0开始,按曲线方程求得坐标值(x,y), ...
- JavaScript动画实例:螺旋线
数学中有各式各样富含诗意的曲线,螺旋线就是其中比较特别的一类.螺旋线这个名词来源于希腊文,它的原意是“旋卷”或“缠卷”.例如,平面螺旋便是以一个固定点开始向外逐圈旋绕而形成的曲线.在2000多年以前, ...
- JavaScript动画实例:沿五角星形线摆动的小圆
五角星形线的笛卡尔坐标方程式可设为: r=10+(3*sin(θ*2.5))^2 x=r*cos(θ) y=r*sin(θ) (0≤θ≤2π) 根据这个曲线方程,在[0,2 ...
- JavaScript动画实例:运动的字母特效
已知圆的坐标方程为: X=R*SIN(θ) Y=R*COS(θ) (0≤θ≤2π) 给定初始坐标位置(X,Y),按照圆的坐标方程,从角度angle = 0开始,每间隔angleSpeed = ...
随机推荐
- C#面向对象--命名空间
一.在C#中,使用命名空间(Namespace)可以帮助控制自定义类型的作用范围,同时对大量的类型进行组织:使用namespace关键字声明命名空间,命名空间可以嵌套使用: namespace MyN ...
- [需求设计]从一个小需求感受Redis的独特魅力
分享一个简单的小需求应该怎么设计实现以及有关Redis的使用 Redis在实际应用中使用的非常广泛,本篇文章就从一个简单的需求说起,为你讲述一个需求是如何从头到尾开始做的,又是如何一步步完善的.之前写 ...
- Java 添加Word形状或图形
本文将介绍通过java编程在Word文档中添加形状(图形),包括添加单个图形.组合图形,以及格式化图形样式,如设置形状填充色.大小.位置.边框样式.边框颜色.边框粗细.图形旋转角度.图形文本环绕方式等 ...
- 转帖:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
地址:http://www.ihref.com/read-16422.html
- IDEA必备插件系列 - Key Promoter X(快捷键使用提示)
Key Promoter X 是用于基于 IntelliJ 产品(如 IDEA,Android Studio 或 CLion)的插件,它有助于在工作时从鼠标操作中 学习基本的键盘快捷键. 当您在 ID ...
- docker概念
一.docket概述 什么是docker? 为什么docker会出现 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不 ...
- AWS re:Invent 2019 召开 | 云原生生态周报 Vol. 30
作者 | 何淋波.宋净超.徐迪 业界要闻 1. AWS re:Invent 2019 AWS 年度云计算盛会于 12.2-12.6 在拉斯维加斯举行. 技术分享超过 2500 场,技术方向涵盖数据分析 ...
- Nginx配置详细解析(全)
一.nginx.conf文件结构 (1)共三部分:由全局块.events块.http块组成.http块又包含http全局块.server块:server块由多个location块组成. (2)一般情况 ...
- VUE的中v-if和v-shou的区别
v-if的特点:每次都会重新删除或创建元素 v-shou的特点:每次执行都只是切换了元素的display:none的属性 v-if的缺点: 每次使用都会有较高性能消耗(频繁的切换元素建议不适用,建议使 ...
- MySQL数据库开发的36条原则【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...