让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. iOS -[PFPASIDataCompressor compressBytes:length:error:shouldFinish:] in PFPGZIPInvocationCompressor.o

    添加动态库报错 "_deflate", referenced from: -[PFPASIDataCompressor compressBytes:length:error:sho ...

  2. TOP命令各个参数代表意义详解

    Top命令是Linux下常用的系统性能分析工具,能实时查看系统中各个进程资源占用情况. top - 16:24:25 up 284 days, 4:59, 1 user, load average: ...

  3. SqlServer--用代码创建和删除数据库或表

    创建数据库,创建表,设置主键数据库的分离和附加MS SQLServer的每个数据库包含:1个主数据文件(.mdf)必须.1个事务日志文件(.ldf)必须.可以包含:任意多个次要数据文件(.ndf)多个 ...

  4. amCharts图表中的JavaScript中文注释引起的浏览器兼容性问题

    近期用amCharts做图表.一切都很顺利,然后演示的时候掉链子了,平时开发的时候都是用的火狐和谷歌,加上这种图表框架本来就号称兼容性极好,也没有在ie上测试,演示的机器上恰巧用的是ie11,发现一个 ...

  5. WPF Prism

    简介   图解   参考 Using the Model-View-ViewModel Pattern

  6. Neutron 理解(5):Neutron 是如何向 Nova 虚机分配固定IP地址的 (How Neutron Allocates Fixed IPs to Nova Instance)

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  7. 图像柔光效果(SoftGlow)的原理及其实现。

    图像柔光效果在很多商业软件中都有实现,比如美图秀秀,光影魔术手等.其能针对原始图像产生一副新的比较平滑感觉光线比较柔和的效果,给人一种朦胧美,如下面几幅图所示:                     ...

  8. oracle 错误代码大全

    oracle错误代码大全(超详细)   ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最 ...

  9. 完美者的代言-ArrayList线程安全问题

    [b]保证线程安全的三种方法:[/b]不要跨线程访问共享变量使共享变量是final类型的将共享变量的操作加上同步一开始就将类设计成线程安全的, 比在后期重新修复它,更容易.编写多线程程序, 首先保证它 ...

  10. 洛谷P1134 阶乘问题[数论]

    题目描述 也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如: 12! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 = 479,001, ...