<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<style>
#canvas-wrapper{
width: 1200px;
height: 800px;
position: relative;
margin:50px auto;
}
#canvas{
border: 1px #ddd solid;
}
#controller{
position: absolute;
top:30px;
left:30px;
background:rgba(0,85,116,0.7);
padding:5px 20px 25px 20px;
border-radius: 10px 10px;
}
#controller h1{
color: white;
font-weight: bold;
font-family: "Microsoft Yahei";
}
#controller #canvas-btn{
display: inline-block;
background: #8b0;
color: white;
font-size: 14px;
padding: 5px 15px;
}
#controller #canvas-btn:hover{
text-decoration: none;
background:#7a0;
}
#controller .color-btn{
display: inline-block;
padding:5px 15px;
border-radius: 6px 6px;
font-size: 14px;
margin-top: 10px;
margin-right: 5px;
text-decoration: none;
}
#controller .color-btn:hover{
text-decoration: none;
}
#controller #white-color-btn{
background-color: white;
}
#controller #black-color-btn{
background-color: black;
}
</style>
<body>
<div id="canvas-wrapper">
<canvas id="canvas">
当前游览器不支持Canvas,请更换游览器再试!
</canvas>
<div id="controller">
<h1>Canvas 绘图之旅</h1>
<a href="#" id="canvas-btn">stop</a>
<a href="#" class="color-btn" id="white-color-btn">white</a>
<a href="#" class="color-btn" id="black-color-btn">black</a>
</div>
</div> <script>
var balls = [];
var isMoving = true;
var themeColor = "white";
var canvas = document.getElementById("canvas"); window.onload = function(){ canvas.width = 1200;
canvas.height = 800; if(canvas.getContext('2d')){
var context = canvas.getContext('2d'); // 产生100个小球
for(var i=0;i<100;i++){
var R = Math.floor(Math.random()*255);
var G = Math.floor(Math.random()*255);
var B = Math.floor(Math.random()*255);
var radius = Math.random()*50+20; aBall = {
color : "rgb(" + R + "," + G + "," + B + ")",
radius : radius,
x : Math.random()*(canvas.width-2*radius) + radius,
y : Math.random()*(canvas.height-2*radius) + radius,
vx : (Math.random()*5 + 5) * Math.pow(-1,Math.floor(Math.random()*100)),
vy : (Math.random()*5 + 5) * Math.pow(-1,Math.floor(Math.random()*100)),
} balls[i] = aBall;
} // 绘制并运动
setInterval(function(){
draw(context);
if(isMoving){
update(canvas.width,canvas.height)
}
},50) // stop
document.getElementById("canvas-btn").onclick = function(event){
if(isMoving){
isMoving = false;
this.text = "start";
}else{
isMoving = true;
this.text = "stop";
}
return false;
} // white
document.getElementById("white-color-btn").onclick = function(event){
themeColor = "white";
return false;
} // black
document.getElementById("black-color-btn").onclick = function(event){
themeColor = "black";
return false;
}
}else{
alert("当前游览器不支持Canvas,请更换游览器再试!")
}
} function draw(cxt){
// var canvas = cxt.canvas;
cxt.clearRect(0,0,canvas.width,canvas.height); if(themeColor == "black"){
console.log("black theme");
cxt.fillStyle = "black";
cxt.fillRect(0,0,canvas.width,canvas.height)
} for(var i=0;i<balls.length;i++){
cxt.fillStyle = balls[i].color;
cxt.beginPath();
cxt.arc(balls[i].x,balls[i].y,balls[i].radius,0,Math.PI*2);
cxt.closePath();
cxt.fill();
}
} function update(){
for(var i=0;i<balls.length;i++){
balls[i].x += balls[i].vx;
balls[i].y += balls[i].vy; // 边缘检测
if(balls[i].x - balls[i].radius <= 0){
balls[i].vx = -balls[i].vx;
balls[i].x = balls[i].radius;
} if(balls[i].x + balls[i].radius >= canvas.width){
balls[i].vx = -balls[i].vx;
balls[i].x = canvas.width - balls[i].radius;
} if(balls[i].y - balls[i].radius <= 0){
balls[i].vy = -balls[i].vy;
balls[i].y = balls[i].radius;
} if(balls[i].y + balls[i].radius >= canvas.height){
balls[i].vy = -balls[i].vy;
balls[i].y = canvas.height - balls[i].radius;
}
}
}
</script>
</body>
</html>

canvas-a11htmlANDcanvas.html的更多相关文章

  1. html5 canvas常用api总结(三)--图像变换API

    canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...

  2. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  3. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

  4. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  5. Canvas坐标系转换

    默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角坐标为x=0,y=0的点称作原点.在默认坐标系中,每一个点的坐标都是直接 ...

  6. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

  7. 用html5的canvas和JavaScript创建一个绘图程序

    本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...

  8. html5标签canvas函数drawImage使用方法

    html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...

  9. 使用 JavaScript 和 canvas 做精确的像素碰撞检测

    原文地址:Pixel accurate collision detection with Javascript and Canvas 译者:nzbin 我正在开发一个需要再次使用碰撞检测的游戏.我通常 ...

  10. H5项目开发分享——用Canvas合成文字

    以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...

随机推荐

  1. 开源框架SpringMvc和Struts2的区别

    1.机制 spring mvc 和 struts2的加载机制不同:spring mvc的入口是servlet,而struts2是filter:(servlet和filter的区别?) 2.性能 spr ...

  2. 卷积神经网络CNN的原理(二)---公式推导

    卷积神经网络与普通神经网络的区别在于,卷积神经网络包含多个由卷积层和池化层构成的特征抽取器.在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接.在CNN的一个卷积层中,通常包含若干个特征平面( ...

  3. 告诉你,Spring Boot 真是个牛逼货!

    现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家详细介绍一下. Spring Boot ...

  4. tensorflow 迭代周期长,每个epoch时间变慢

    理论上,session启动后,每个epoch训练时间应该是差不多,而且不会因为迭代周期变长,epoch时间变慢.原因是session里定义了tf.op导致的,每一次迭代都会在graph里增加新的节点, ...

  5. sql server 日志文件结构及误操作数据找回

    一. 概述 在sql server 里有数据文件.mdf和日志文件.ldf,日志文件是sqlserver数据库的另一个重要组成部分,日志文件记录了所有事务以及每个事务对数据库所做的修改.为了提高数据库 ...

  6. Android--Service之AIDL传递复杂对象

    前言 Android的AIDL不仅可以在绑定服务中传递一些Android规定的数据类型的数据,还可以传递一些复杂类型的数据.但是与传递系统允许的数据类型相比,复杂类型数据的传递要做更多的工作,本篇博客 ...

  7. spring3.0框架检测方法运行时间测试(转)

    主要利用了Spring AOP 技术,对想要统计的方法进行横切处理,方法执行前开始计时,方法执行后停止计时,得到计时方法就是该方法本次消耗时间. 步骤: 首先编写自己的Interceptor类来实现M ...

  8. Java Socket NIO详解(转)

    java选择器(Selector)是用来干嘛的? 2009-01-12 22:21jsptdut | 分类:JAVA相关 | 浏览8901次 如题,不要贴api的,上面的写的我看不懂希望大家能给我个通 ...

  9. win32线程

    win32线程 一丶什么是线程 在windows中常听到的就是线程.多线程.啊什么的. 这里介绍一下什么是线程. 1.线程是附属在进程中的一个执行实体.简而言之就是执行代码的. 2.每个进程至少有一个 ...

  10. 【ASP.NET MVC系列】浅谈ASP.NET MVC 控制器

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...