让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开发之支付功能概述

    前言:本随笔将对IOS开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微 ...

  2. web开发技术-过滤器

    纪录自己的学习过程,帮助记忆 1.简介 过滤器是服务器端的一个组件,可以接收用户端的请求和响应信息,并且对这些信息进行过滤 过滤器不处理结果,只做一些辅助性操作 2.过滤器的工作原理 3.过滤器的生命 ...

  3. CSS3-03 样式 2

    前言 在上一篇的博客中,阐述了 CSS 盒模型中的 Margin.Border.Padding 三个样式.但是总觉得,这些东西好像是 HTML 元素的包装样式,真正的要点是 HTML 元素(即:盒模型 ...

  4. select、poll、epoll区别总结

    1 本质上都是同步I/O 三者都是I/O复用,本质上都属于同步I/O.因为三者只是负责通知应用程序什么时候数据准备好了,实际的I/O操作还是在由应用程序处理:如果是异步I/O的话,实际I/O由内核处理 ...

  5. [20141124]sql server密码过期,通过SSMS修改策略报错

    背景: 新建了用户,没有取消掉强制密码策略 修改掉策略报错 错误: The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF ...

  6. js中操作数组的一些方法

    增 push   在数组的末尾添加一个或多个元素,并返回新的长度.  array.push(1,2,3.........) unshift  在数组的开头添加一个或多个元素,并返回新的长度. arra ...

  7. 把Tomcat注册为windows服务

    配置环境变量 JAVA_HOME=D:\java CLASSPATH=.;%JAVA_HOME%\lib; PATH=%JAVA_HOME%\bin; 提示:一般jre默认在jdk目录下%JAVA_H ...

  8. Windows下Apache + PHP SESSION丢失的惨痛经历

    今天的工作是迁移一个PHP站点至新服务器. 创建一台Windows Server 2008虚拟机,并在其上停掉net stop http服务(避免争抢80端口),安装配置 Apache + PHP,迁 ...

  9. KVM 存储虚拟化 - 每天5分钟玩转 OpenStack(7)

    KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的. Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型,后面会详细讨论.Volume 是 ...

  10. Nova reboot 和 lock 操作 - 每天5分钟玩转 OpenStack(32)

    前面 CloudMan 通过日志详细分析了 nova 的 launch, shut off 和 start 操作.不知道大家现在是否已经掌握了日志分析的技能? 今天咱们就来检验一下.本节讨论的是 no ...