html小球跳跃技术原理,HTML5 - Canvas的使用样例15(动画的实现,以弹跳小球为例)...
1,Canvas实现动画的原理
(1)首先设置一个定时器,反复调用绘图函数(一般每秒30~40次)。每次调用,都会重绘整个画布。完成后的效果就像动画一样,每一帧间过渡会平滑而流畅。
(2)有两种方法都可以实现重复绘制:setTimeout()和setInterval()。用哪个可以自行决定。
(3)setInterval() 能保证精确地按时重绘,当又可能因此牺牲性能(如果绘图代码执行时间比设定时间还要长,浏览器将很难跟上,随着绘图代码的连续执行,页面会出现短暂地停顿)
(4)本例使用 setTimeout(),其运行等待时间设为20毫秒(这个是典型的动画延迟时间)。
2,小球弹跳动画
(1)点击“添加小球”按钮,会在画布上添加一个小球。
(2)添加的小球会向右下做自由落体运动,碰到地板、墙壁后会反弹。同时每次反弹会受到阻力的影响,稍稍减少速度。
(3)鼠标点击任意小球,会让该小球突然加速,让它向某个方向弹开。
(4)点击“清空画布”按钮,会清除页面上的所有小球。
添加小球
清空画布
hangge.com
canvas {
cursor: pointer;
border: 1px solid black;
}
// 用于表示球的所有细节的Ball函数
function Ball(x, y, dx, dy, radius) {
this.x = x;
this.y = y;
this.dx = dx;
this.dy = dy;
this.radius = radius;
this.strokeColor = "black";
this.fillColor = "red";
}
// 这个数组用于保存画布上出现的所有球
var balls = [];
var canvas;
var context;
window.onload = function() {
canvas = document.getElementById("canvas");
context = canvas.getContext("2d");
canvas.onmousedown = canvasClick;
// 每0.02秒绘制一次画布
setTimeout(drawFrame, 20);
};
function addBall() {
// 小球半径
var radius = 20;
// 创建新的ball对象
var ball = new Ball(50,50,1,1,radius);
// 将其保存在balls数组中
balls.push(ball);
}
function clearBalls() {
// 删除所有球对象
balls = [];
}
function drawFrame() {
// 清除画布
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
// 循环所有的球
for(var i=0; i
// 把每个球移动到新的位置
var ball = balls[i];
ball.x += ball.dx;
ball.y += ball.dy;
// 添加重力作用的效果,让球加速下落
if ((ball.y) < canvas.height) ball.dy += 0.22;
// 添加摩擦力作用的效果,减慢左右移动速度
ball.dx = ball.dx * 0.998;
// 如果球碰到某一边,就反弹回来
if ((ball.x + ball.radius > canvas.width) || (ball.x - ball.radius < 0)) {
ball.dx = -ball.dx;
}
// 如果球碰到底部,反弹回来,但慢慢地减速
if ((ball.y + ball.radius > canvas.height) || (ball.y - ball.radius < 0)) {
ball.dy = -ball.dy*0.96;
}
context.beginPath();
context.fillStyle = ball.fillColor;
// 绘制球
context.arc(ball.x, ball.y, ball.radius, 0, Math.PI*2);
context.lineWidth = 1;
context.fill();
context.stroke();
}
// 20毫秒后绘制下一帧
setTimeout(drawFrame, 20);
}
function canvasClick(e) {
// 获取点击的坐标
var clickX = e.pageX - canvas.offsetLeft;
var clickY = e.pageY - canvas.offsetTop;
// 找到点中的小球
for(var i in balls)
{
var ball = balls[i];
if ((clickX > (ball.x-ball.radius)) && (clickX < (ball.x+ball.radius)))
{
if ((clickY > (ball.y-ball.radius)) && (clickY < (ball.y+ball.radius)))
{
// 改变点击的小球速度
ball.dx -= 2;
ball.dy -= 3;
return;
}
}
}
}
添加小球
清空画布
html小球跳跃技术原理,HTML5 - Canvas的使用样例15(动画的实现,以弹跳小球为例)...相关推荐
- html小球跳跃技术原理,HTML5在文本上跳跃的小球
JavaScript 语言: JaveScriptBabelCoffeeScript 确定 if (typeof document.documentElement.animate === 'funct ...
- html小球跳跃技术原理,弹跳的小球.html · web-project-songyu/原生js小例子 - Gitee.com...
Document #ball { border-radius: 50%; position: absolute; } var ball = document.getElementById(" ...
- html5 canvas酷炫3D背景打开动画特效
html5 canvas酷炫3D背景打开动画特效 点击跳转到演示地址 点击进入资源下载地址
- HTML粒子碰撞烟花,html5 canvas漂亮的粒子烟花背景动画特效
特效描述:html5 canvas 漂亮的粒子烟花 背景动画特效.html5 canvas漂亮的粒子烟花背景动画特效 代码结构 1. HTML代码 class Vector2 { constructo ...
- html360全景图原理,HTML5 Canvas实现360度全景图
HTML5 Canvas实现360度全景图 发布时间:2020-07-22 12:15:07 来源:51CTO 阅读:557 作者:gloomyfish 很多购物网站现在都支持360实物全景图像,可以 ...
- html动画的 原理,HTML5 Canvas动画效果实现原理
在线演示 使用html5画布能够帮助我们快速实现简单的动画效果,基本原理如下: 每隔一定时间绘制图形并且清除图形,用来模拟出一个动画过程,可以使用context.clearrect(0, 0, x, ...
- 用Html5实现天气预报的原理,HTML5 Canvas和jQuery实时天气预报代码解析「附源码」...
HTML5 Canvas和jQuery实时天气预报代码解析「附源码」 这是一款非常有意思的纯CSS3扁平风格天气预报卡片动画特效.该天气预报特效将各种天气制作为卡片形式,包括下雨,闪电,白天,夜间和下 ...
- html 穿越星空效果,html5 canvas绚丽3d星空飞行穿梭动画特效
简要教程 这是一款使用 html5 canvas和 jQuery 制作的绚丽3d星空飞行穿梭动画特效.该3d星空飞行特效模拟了飞船在宇宙星空中快速穿梭的动画场景,效果非常逼真. HTML结构 HTML ...
- android 漩涡动画,html5 canvas酷炫的粒子漩涡动画特效
特效描述:html5 canvas 粒子漩涡 动画特效.html5粒子漩涡动画,酷炫的粒子动画特效 代码结构 1. HTML代码 function project3D(x,y,z,vars){ var ...
最新文章
- TEETrustZone
- Maven项目整合讲义(Eclipse版)
- 【联邦学习】FATE 集群部署 step2
- windows 修改hosts 立即生效的方法
- python注册人工智能专业_从专业程度上分析Python和人工智能(AI) 它们如何相关?...
- 「 每日一练,快乐水题 」258. 各位相加
- binarytreenode”使用 类 模板 需要 模板 参数列表_0基础掌握Django框架(7)Django模板介绍...
- 1029 最大公约数和最小公倍数问题(gcd) luogu洛谷
- Julia的安装与配置详解(包含在Ubuntu 18.04和Windows 10系统上Julia的安装)
- python以及Arduino硬件编程笔记
- java 一元二次方程_java求解一元二次方程
- .chm格式的电子书打开是空白的解决办法
- 精通正则表达式学习记录 第二章 入门示例扩展
- 用PS怎样把一张图片切割成几张小图片?
- 解读:小比尔 · 福特认为特斯拉的成功并非因为马斯克
- 360浏览器极速版 v7.5.3.182 官方正式版_HTM5浏览器
- 深兰科技出席“2022世界设计之都大会”,论剑工业设计高峰论坛
- C#根据IP地址查询所属地区(调用免费的IP查询接口)
- [转]手机号码归属地接口
- 交通行业舆情工作管理怎么做?