<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
canvas {
border: 2px dotted #ddd
}
</style>
</head>
<body>
<canvas id="canvas1" width="400" height="400"></canvas>
<canvas id="canvas2" width="400" height="400"></canvas>
<script>
var canvas1 = document.getElementById('canvas1')
var context1 = canvas1.getContext('2d')
function randomFromTo(from, to) {
return Math.floor(Math.random() * (to - from) + from)
}
function Circle(x, y, radius, color) {
this.x = x
this.y = y
this.radius = radius
this.color = color
this.isSelected = false
} var circles = []
function addRandomCircle() {
var radius = randomFromTo(10, 60)
var x = randomFromTo(0, canvas1.width)
var y = randomFromTo(0, canvas1.height) var colors = ['green', 'blue', 'red', 'yellow', 'magenta', 'orange', 'brown', 'purple', 'pink']
var color = colors[randomFromTo(0, 8)]
var circle = new Circle(x, y, radius, color)
circles.push(circle)
}
function drawCircles() {
context1.clearRect(0, 0, canvas1.width, canvas1.height)
context1.globalAlpha = 0.85
context1.strokeStyle = 'black' for (var i = 0, l = circles.length; i < l; i++) {
var circle = circles[i]
if (circle.isSelected) {
context1.lineWidth = 5
} else {
context1.lineWidth = 1
}
context1.beginPath()
context1.arc(circle.x, circle.y, circle.radius, 0, Math.PI*2)
context1.fillStyle = circle.color
context1.fill()
context1.stroke()
}
}
var previousSelectedCircle = null
function canvasClick(e) {
var clickX = e.pageX - canvas1.offsetLeft
var clickY = e.pageY - canvas1.offsetTop
for (var i = circles.length; i > 0; i--) {
var circle = circles[i - 1]
var distanceFromCenter = Math.sqrt(Math.pow(circle.x - clickX, 2) + Math.pow(circle.y - clickY, 2))
if (distanceFromCenter <= circle.radius) {
if (previousSelectedCircle != null) {
previousSelectedCircle.isSelected = false
}
previousSelectedCircle = circle
circle.isSelected = true
drawCircles()
return
}
}
}
addRandomCircle()
addRandomCircle()
addRandomCircle()
addRandomCircle()
addRandomCircle()
addRandomCircle()
addRandomCircle()
addRandomCircle()
drawCircles()
canvas1.onclick = canvasClick var canvas2 = document.getElementById('canvas2')
var context2 = canvas2.getContext('2d')
var squarePosition_y = 0
var squarePosition_x = 10
function drawFrame() {
context2.clearRect(0, 0, canvas2.width, canvas2.height)
context2.beginPath()
context2.rect(squarePosition_x, squarePosition_y, 10, 10)
context2.lineStyle = 'black'
context2.lineWidth = 1
context2.stroke()
if (squarePosition_y > canvas2.height) {
squarePosition_y = 0
} else {
squarePosition_y += 1
}
setTimeout('drawFrame()', 20)
}
setTimeout('drawFrame()', 20)
</script>
</body>
</html>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<canvas id="canvas" width="600" height="400" style="border:1px solid #ddd;"></canvas>
<button id="add">Add Ball</button>
<button id="clear">Clear Canvas</button>
<input id="ballSize" type="number">
<input id="connectedBalls" type="checkbox">
Connect Balls
<script>
function Ball(x, y, dx, dy, radius) {
this.x = x
this.y = y
this.dx = dx
this.dy = dy
this.radius = radius
this.color = 'red'
}
var balls = []
function addBall() {
var radius = parseFloat(document.getElementById('ballSize').value)
var ball = new Ball(50, 50, 1, 1, radius)
balls.push(ball)
}
function clearBall() {
balls = []
}
document.getElementById('add').onclick = addBall
document.getElementById('clear').onclick = clearBall
var canvas = document.getElementById('canvas')
var context = canvas.getContext('2d')
setTimeout('drawFrame()', 20)
function drawFrame() {
context.clearRect(0, 0, canvas.width, canvas.height)
context.beginPath()
for (var i = 0; i < balls.length; 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
}
if (!document.getElementById('connectedBalls').checked) {
context.beginPath()
context.fillStyle = ball.color
} else {
context.fillStyle = 'white'
}
context.arc(ball.x, ball.y, ball.radius, 0, Math.PI*2)
context.lineWidth = 1
context.fill()
context.stroke()
}
setTimeout('drawFrame()', 20)
}
</script>
</body>
</html>

【canvas】基于坐标的碰撞检测 / 基本的动画 / 多物体动画的更多相关文章

  1. 10款基于HTML5+CSS3实现的超酷源码动画

    1.基于Bootstrap的jQuery登录表单 这是一款基于Bootstrap的登录表单,表单的外观自然不用说,沿用了Bootstrap的风格,非常漂亮.这款登录表单有一个经过CSS3处理过的头像图 ...

  2. 基于坐标的自动化测试神器---Total Control快速入门

    1.Total Control简单介绍 一款能够在PC上控制手机的软件,同时可以使用PC 触摸屏.鼠标.键盘, 全面操控 Android 手机,只需通过 USB 或 WiFi 连接手机至电脑,即可随时 ...

  3. 基于swiper的移动端H5页面,丰富的动画效果

    概述 通过运用swiper插件,制作移动端上下整屏滑动的H5页面,用来宣传或者简单注册等,可以嵌套H5音乐或者视频. 详细 代码下载:http://www.demodashi.com/demo/119 ...

  4. 笔记-动画篇-layout动画初体验

    约束动画的文章要比预计的迟迟来临,最大的原因是没有找到我认为的足够好的动画来讲解约束动画 —— 当然了,这并不是因为约束动画太难.相反,因为约束动画实在太简单了,反而没有足够多的简单动画素材让我选用. ...

  5. 【转】android动画之Tween动画 (渐变、缩放、位移、旋转)

    原文:http://blog.csdn.net/feng88724/article/details/6318430 Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的 ...

  6. Android 动画基础——视图动画(View Animation)

    本篇讲android 3.0之前被广泛的动画框架——ViewAnimation. 目录 我将分为六部分来讲: 概述 Alpha透明动画 Rotate旋转动画 Translate位移动画 Scale放缩 ...

  7. 梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画

    CSS动画并不是绝对比JavaScript动画性能更优越,开源动画库Velocity.js等就展现了强劲的性能. 一.两者的主要区别 先开门见山的说说两者之间的区别. 1)CSS动画: 基于CSS的动 ...

  8. View动画和属性动画

    在应用中, 动画效果提升用户体验, 主要分为View动画和属性动画. View动画变换场景图片效果, 效果包括平移(translate), 缩放(scale), 旋转(rotate), 透明(alph ...

  9. 背水一战 Windows 10 (15) - 动画: 缓动动画

    [源码下载] 背水一战 Windows 10 (15) - 动画: 缓动动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 缓动动画 - easing 示例演示缓动(easing ...

随机推荐

  1. Android 设计随便说说之简单实践(合理组合)

    上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...

  2. 在.Net中进行跨线程的控件操作(上篇:Control.Invoke)

    本文的重点在于介绍如何在多线程编程中,从非UI线程上访问界面中的控件.有过多线程编程经验的人都知道,当我们在非UI线程上试图给一个界面中的控件赋值的时候,比如说label的Text属性,系统会抛出一个 ...

  3. 前端----表格的具体使用(jquery)

    表格在页面布局中常常会用到.在不同的框架中有不同的使用方法,现在,我先总结下表格在jquery中具体使用: 1.增--insertAfter() function addTr(){ $("& ...

  4. 【html】【5】html class属性css样式

    必看参考: http://www.divcss5.com/css3-style/ http://www.jb51.net/css/142448.html http://www.w3school.com ...

  5. ASP.NET Web API教程(六) 安全与身份认证

    在实际的项目应用中,很多时候都需要保证数据的安全和可靠,如何来保证数据的安全呢?做法有很多,最常见的就是进行身份验证.验证通过,根据验证过的身份给与对应访问权限.同在Web Api中如何实现身份认证呢 ...

  6. 测试functional的bind以及相关功能

    注:在VS2010 UPDATE1下测试通过 /*测试functional的bind以及相关功能*/ #include <iostream> #include <functional ...

  7. MSSQL Server语句

    随机从数据库中取出20条数据:select top 20 * from 表名 order by newid()

  8. 【JAVA集合】HashMap源码分析(转载)

    原文出处:http://www.cnblogs.com/chenpi/p/5280304.html 以下内容基于jdk1.7.0_79源码: 什么是HashMap 基于哈希表的一个Map接口实现,存储 ...

  9. 纯javascript联动的例子

    有人想要学习下纯javascript联动的一些技巧,我这里就以日期的联动为例,附上一些代码至于复杂的省市区联动,不建议用纯javascript的,而是用ajax的方式,该不在此讨论范围内,想要了解aj ...

  10. WPF 进度条

    //Create a Delegate that matches the Signature of the ProgressBar's SetValue method private delegate ...