在canvas中使用html元素
让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元素的更多相关文章
- Canvas中鼠标获取元素并拖动技术
Silverlight拖动,需要Canvas. Canvas管网定义: 定义一个区域,在该区域中可以使用相对于该区域的坐标显式定位子元素. XAML <Canvas ...> oneOrM ...
- 《Web开发中块级元素与行内元素的区分》
一.块级元素的特性: 占据一整行,总是重起一行并且后面的元素也必须另起一行显示. HTML中块级元素列举如下: address(联系方式信息) article(文章内容) aside(伴随内容) au ...
- Canvas中如何画一条清晰的线宽为奇数(如1px逻辑像素)的线?
我在开发中使用canvas的机会不是很多,但是第一次实际使用中就遇到了问题,"很久很久以前,我自己画了一个雷达图,线宽都是1像素,但是显示效果不如期望,这才发现canvas中的画线还是有坑的 ...
- <canvas>中isPointInPath()方法在不同绘制内容中的效果
<canvas>是HTML5中新增加的一个元素,我们可以使用脚本(通常使用JavaScript)在上面绘制图形,就像个画布一样.我们可以用它来绘制图表.制作一些动画.默认大小为300px ...
- Canvas中的save方法和restore方法
初学者也许会误认为canvas中save方法是用来保存绘图状态的图形,而restore方法是用来还原之前保存的绘图状态的图形,其实不然. save():保存当前的绘图状态. restore():恢复之 ...
- 图片在 canvas 中的 选中/平移/缩放/旋转,包含了所有canvas的2D变化,让你认识到数学的重要性
1.介绍 canvas 已经出来好久了,相信大家多少都有接触. 如果你是前端页面开发/移动开发,那么你肯定会有做过图片上传处理,图片优化,以及图片合成,这些都是可以用 canvas 实现的. 如果你是 ...
- 获取鼠标在 canvas 中的位置
一般情况 一般情况下,如果需要在 canvas 中获取鼠标指针坐标,可以通过监听鼠标的 mousemove(如果只需单击时的坐标,可以用 click)事件. 当事件被触发时,我们可以获取鼠标相对于 v ...
- 萌新笔记——Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)
最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对"基数"以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了"HyperLo ...
- java 在循环中删除数组元素
在写代码中经常会遇到需要在数组循环中删除数组元素的情况,但删除会导致数组长度变化. package com.fortunedr.thirdReport; import java.util.ArrayL ...
随机推荐
- 【代码笔记】iOS-通过颜色来生成一个纯色图片
一,效果图. 二,代码. RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional se ...
- RelativeLayout的位置属性总结
使用"@id/…"时,所写的id必须在上文中已经定义,不能使用在下文定义的id RelativeLayout的子控件属性总结—— 按照控件之间常规的上下左右依次排列:(指定控件ID ...
- Oracle system identifier(SID) "xxx" alread exits. Specify another SID
案例环境: 操作系统 :Oracle Linux Server release 5.7 64 bit 数据库版本:Oracle Database 10g Release 10.2.0.4.0 - ...
- ORA-01102: cannot mount database in EXCLUSIVE mode
安装完ORACEL 10g数据库后,启动数据库时遇到ORA-01102: cannot mount database in EXCLUSIVE mode [oracle@DB-Server ~]$ s ...
- 原生 CSS 网格布局学习笔记
下是来自Oliver Williams的帖子. Oliver已经学习了相当长时间的原生CSS网格,可以说是在CSS网格方面有一定的发言权.在这篇文章中,他将以非同寻常的思路分析自己的CSS网格布局学习 ...
- 原生js事件的添加和删除
在IE浏览器中添加或删除事件用attachEvent.detachEvent.在其他标准浏览器中则用addEventListener.removeEventListener.下面的对事件的添加和删除做 ...
- 联发科发布全球首款搭载Android TV的智能电视系统芯片MT5595
联发科发布全球首款搭载Android TV的智能电视系统芯片MT5595 admin 资讯 01-07 1 1月7日消息,联发科宣布与Google共同开发出全世界第一个搭载Android TV操作系统 ...
- 使用Sqlserver更新锁防止数据脏读
有时候我们需要控制某条记录在程序读取后就不再进行更新,直到事务执行完释放后才可以.这时候我们就可以将所有要操作当前记录的查询加上更新锁,以防止查询后被其它事务修改.这种操作只锁定表中某行而不会锁定整个 ...
- codePrinter
3天前,荆老师给了我一台打印机,让我完成省赛代码打印系统的测试. 打印机型号为 HP P1007,算是一台比较老的打印了. 本文记录了从打印机驱动安装到代码打印WEB部署的全过程 1. 安装打印机驱动 ...
- python基础之编码问题
python基础之编码问题 本节内容 字符串编码问题由来 字符串编码解决方案 1.字符串编码问题由来 由于字符串编码是从ascii--->unicode--->utf-8(utf-16和u ...