让div悬浮于canvas之上   使用z-index控制层及顺序

慕课网canvas demo

<div id="canvas-wrapper">
<canvas id="canvas">
你的浏览器不支持canvas,请更换浏览器再试!
</canvas>
<div id="controller">
<p>在canvas中使用html元素 </p>
<a href="#" class="lime color-btn" id="canvas-btn">停止运动</a>
<a href="#" class="white color-btn" id="white-color-btn">白色</a>
<a href="#" class="black color-btn" id="black-color-btn">黑色</a>
<a href="#" class="pink color-btn" id="pink-color-btn">粉色</a>
</div>
</div>
<style> *{
height: 100%;
padding: 0;
margin: 0;
}
html{
font-size:20px;
}
@media screen and (max-width: 1920px){
html{
font-size:20px;
}
}
@media screen and (max-width: 1366px){
html{
font-size:17.75px;
}
}
#canvas-wrapper{
width: 100%;
height: 100%;
position: relative;
margin: 0px auto;
}
#canvas{
/*border: 1px solid #aaa;*/
}
#controller{
position: absolute;
height: 20%;
top:30px;
left:30px;
background: rgba(0, 85 , 116 , 0.5);
padding: 5px 20px 50px 20px;
border-radius: 10px 10px;
}
#controller p{
color: white;
font-weight: bold;
}
#controller a{ text-decoration: none;
border-radius: 4px;
display: inline-block;
}
#canvas-btn{ }
.color-btn{
color: #fff;
line-height: 20px;
height: 20px;
margin-left: 10px;
padding: 10px;
}
.white{
background: #fff;color:#000;
}
.black{
background: #000;
}
.lime{
background: #b3dc23;
}
.pink{
background: pink;
}
.red{
background: red;
} </style>
<script>
var balls=[];//小球数组
var isMoving = true;//是否在运动
var bgColor = "white";//初始背景颜色
window.onload = function(){
var c=document.getElementById("canvas");
c.width = document.body.clientWidth;
c.height = document.body.clientHeight;
/*c.width = 800 ;
c.height = 800;*/
var cxt = c.getContext("2d");
//cxt.globalAlpha=0.7;//全局透明度为70%
//cxt.globalCompositeOperation = "xor";//使用异或操作对源图像与目标图像进行组合。
for (var i= 0 ;i<50 ; i++){//绘制100个小球
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() * (c.width - 2 * radius) +radius,//X轴坐标
y:Math.random() * (c.height - 2 * radius) + radius,//Y轴坐标
//碰撞检测
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(cxt); if(isMoving){
update(c.width , c.height);
}
},
30
)
} document.getElementById("canvas-btn").onclick=function(event){
if(isMoving){
isMoving = false ;
this.text = "开始运动";
}else{
isMoving = true ;
this.text = "停止运动";
}
return false;
}
//改变背景颜色
document.getElementById("white-color-btn").onclick = function(event){
bgColor = "white";
return false;
}
document.getElementById("black-color-btn").onclick = function(event){
bgColor = "black";
return false;
}
document.getElementById("pink-color-btn").onclick = function(event){
bgColor = "pink";
return false;
}
//绘制canvas
function draw(cxt){
var c = cxt.canvas ;
cxt.clearRect(0 , 0 , c.width , c.height);
if(bgColor == "black"){
cxt.fillStyle = "black";
cxt.fillRect(0 , 0 , c.width , c.height);
}else if(bgColor == "pink"){
cxt.fillStyle = "pink";
cxt.fillRect(0 , 0 , c.width , c.height);
}
for(var i=0 ; i<balls.length ; i++){
cxt.fillStyle = balls[i].color;
cxt.beginPath();
//中心点x , 中心点y , 半径 , 开始角度 , 结束角
cxt.arc(balls[i].x , balls[i].y , balls[i].radius , 0 , Math.PI*2);
cxt.closePath();
cxt.fill();
}
}
//小球运动 更新小球位置
function update(canvasWidth , canvasHeight){
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 >= canvasWidth){
balls[i].vx = -balls[i].vx ;
balls[i].x =canvasWidth - 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 >= canvasHeight){
balls[i].vy = -balls[i].vy ;
balls[i].y = canvasHeight - balls[i].radius ;
}
}
}
</script>

在canvas中使用html元素的更多相关文章

  1. Canvas中鼠标获取元素并拖动技术

    Silverlight拖动,需要Canvas. Canvas管网定义: 定义一个区域,在该区域中可以使用相对于该区域的坐标显式定位子元素. XAML <Canvas ...> oneOrM ...

  2. 《Web开发中块级元素与行内元素的区分》

    一.块级元素的特性: 占据一整行,总是重起一行并且后面的元素也必须另起一行显示. HTML中块级元素列举如下: address(联系方式信息) article(文章内容) aside(伴随内容) au ...

  3. Canvas中如何画一条清晰的线宽为奇数(如1px逻辑像素)的线?

    我在开发中使用canvas的机会不是很多,但是第一次实际使用中就遇到了问题,"很久很久以前,我自己画了一个雷达图,线宽都是1像素,但是显示效果不如期望,这才发现canvas中的画线还是有坑的 ...

  4. <canvas>中isPointInPath()方法在不同绘制内容中的效果

    <canvas>是HTML5中新增加的一个元素,我们可以使用脚本(通常使用JavaScript)在上面绘制图形,就像个画布一样.我们可以用它来绘制图表.制作一些动画.默认大小为300px ...

  5. Canvas中的save方法和restore方法

    初学者也许会误认为canvas中save方法是用来保存绘图状态的图形,而restore方法是用来还原之前保存的绘图状态的图形,其实不然. save():保存当前的绘图状态. restore():恢复之 ...

  6. 图片在 canvas 中的 选中/平移/缩放/旋转,包含了所有canvas的2D变化,让你认识到数学的重要性

    1.介绍 canvas 已经出来好久了,相信大家多少都有接触. 如果你是前端页面开发/移动开发,那么你肯定会有做过图片上传处理,图片优化,以及图片合成,这些都是可以用 canvas 实现的. 如果你是 ...

  7. 获取鼠标在 canvas 中的位置

    一般情况 一般情况下,如果需要在 canvas 中获取鼠标指针坐标,可以通过监听鼠标的 mousemove(如果只需单击时的坐标,可以用 click)事件. 当事件被触发时,我们可以获取鼠标相对于 v ...

  8. 萌新笔记——Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)

    最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对"基数"以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了"HyperLo ...

  9. java 在循环中删除数组元素

    在写代码中经常会遇到需要在数组循环中删除数组元素的情况,但删除会导致数组长度变化. package com.fortunedr.thirdReport; import java.util.ArrayL ...

随机推荐

  1. canvas 绘制圆角矩形

    <!DOCTYPE HTML> <head> <meta charset = "utf-8"> <title>canvas</ ...

  2. readonly

    readonly 关键字是可以在字段上使用的修饰符.  当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中. 示例     在此示例 ...

  3. XtraBackup出现 Can't connect to local MySQL server through socket '/tmp/mysql.sock'

    Xtrabackup做备份时遇到下面错误信息MySQL server: Can't connect to local MySQL server through socket '/tmp/mysql.s ...

  4. SQL Server Column Store Indeses

    SQL Server Column Store Indeses SQL Server Column Store Indeses 1. 概述 2. 索引存储 2.1 列式索引存储 2.2 数据编码和压缩 ...

  5. MYSQL多实例配置方法 mysqld_multi方法

    在实际的开发过程中,可能会需要在一台服务器上部署多个MYSQL实例,那建议使用MYSQL官方的解决方案 mysqld_multi 1.修改my.cnf 如一个定义两个实例的参考配置: [mysqld_ ...

  6. mysql 安装问题

    针对免安装版的mysql: 1.启动CMD,在mysql安装目录下  ~\bin\目录下,输入: mysqld -install   安装msyql服务: 2.启动MySQL服务,输入: net st ...

  7. 标题栏Menu

    标题栏menu就是指下图中红框里面的菜单按钮. 标题栏上所有的按钮或者其他元素都定义在xml文件里面,这些文件资源称为menu resource.要在标题栏添加按钮,需要在项目的/res/menu/路 ...

  8. 【php+mysql】博客分页制作思路

    1.首先需要初始化设置每页显示的文章数$page_size,mysql数据库中总的文章数$arc_size,页面数$page 2.利用分页公式 (当前页数 - 1 )X 每页条数 , 每页条数Sele ...

  9. css3实现循环执行动画,且动画每次都有延迟

    一.最终效果 需求:gift图片的小动画每隔2s执行一次. 需求就一句话,我们看一下实现过程. 二.实现过程 1.网页结构 <!DOCTYPE html> <html lang=&q ...

  10. Hibernate中的一对一关联

    Hibernate提供了两种一对一映射关联关系的方式: 1)按照外键映射 2)按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映 ...