标签:速度 char 运算符 rip otto title timer 概念 floor
| 
 打五颜六色柚子 
 <!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 
<title>Document</title> 
</head> 
<style> 
* { 
margin: 0; 
padding: 0; 
} 
body { 
overflow: hidden; 
} 
.balloon { 
width: 160px; 
height: 160px; 
border-radius: 160px 160px 64px 160px;/*气球四角*/ 
transform: rotate(45deg);/*顺时针旋转45°*/ 
box-shadow: -8px -8px 80px -8px #873940 inset;/*高光和阴影 X Y 羽化程度 模糊距离 颜色 内阴影*/ 
position: absolute; 
top: 0; 
left: 0; 
transition: all linear; 
} 
/*.balloon:after { 
content: ""; 
position: absolute; 
bottom: 0; 
right: 0; 
border: 8px solid transparent; 
border-right-color: #873940; 
transform: rotate(50deg); 
}*/ 
</style> 
<body> 
<script> 
/* 
1 动态生成dom袁术 初始化 
1 生成几个 
2 创建节点对象 
3 
2 气球向上移动做动画 
3 鼠标点击气球 气球爆炸 
4 完善气球动画 代码优化 
*/ 
var num = 10 ;//气球数量初始化 
var wH = window.innerHeight;//获取浏览器高度 
var bZ = 160; 
var wW = window.innerWidth; 
var timer; 
init(15); 
move(); 
// time(); 
timer = setInterval(move,1000/30); 
document.addEventListener(‘click‘,function(event){//事件委托 
if(event.target.className.toLowerCase() === "balloon"){ 
//console.log("点到气球了"); 
var ele = event.target; 
//document.body.removeChild(ele);//告诉 爸爸 干掉 儿子 
boom.call(ele,function(){ 
this.parentNode.removeChild(this); 
}.bind(ele)); 
//生成1个 
init(1); 
} 
},false); 
function boom(cb){ 
var rotate = [30,80]; 
var index = 0; 
this.timer = setInterval(function(){ 
if(this.offsetWidth<10){ 
clearInterval(this.timer); 
cb&&cb(); 
return false; 
} 
index++; 
index%= 2; 
this.style.transform = `rotate(${rotate[index]}deg)`;/*es6文本域*/ 
this.speed++; 
this.style.width = this.offsetWidth - 10 +"px"; 
this.style.height  = this.offsetHeight - 10 +"px"; 
this.style.top = this.offsetTop-this.speed+"px"; 
}.bind(this),1000/30); 
} 
//气球出发模块 
function init(num){ 
var fragment = document.createDocumentFragment(); 
for(var i = 0;i<num;i++){ 
//颜色随机 
var x = Math.floor(Math.random() * (255 - 0 + 1) + 0); 
var y = Math.floor(Math.random() * (255 - 0 + 1) + 0); 
var z = Math.floor(Math.random() * (255 - 0 + 1) + 0); 
var color = "rgb(" + x + "," + y + "," + z + ")";      
//高度 宽度 随机数 
var youziH = Math.floor(Math.random()*100+150); 
//var randomX = Math.floor(Math.random()*wW); 
var randomX = (Math.random()*wW)|0; 
//var randomX = ~~(Math.random()*wW);//位运算符 
randomX = Math.abs(randomX);//绝对值 
var balloon = document.createElement("div");//创建节点对象 
balloon.className = ‘balloon‘;//设置类名 
//document.body.appendChild(balloon); 页面重绘 
balloon.style.top = wH - bZ+"px"; 
balloon.style.left = randomX-bZ+"px"; 
//高度和宽度随机 颜色随机 
balloon.style.width = youziH + "px"; 
balloon.style.height = youziH + "px"; 
balloon.style.backgroundColor = color; 
balloon.speed = ~~(Math.random()*10)+1;//这里动态添加一个speed属性 ,之后可以直接使用, 
fragment.appendChild(balloon); 
} 
document.body.appendChild(fragment);// 
} 
//气球移动木块 
function move(){ 
var balloons = document.querySelectorAll(".balloon"); 
for (var i=0,len=balloons.length;i<len;i++){//预存 否则小号性能 
balloons[i].style.top = balloons[i].offsetTop -balloons[i].speed+"px"; 
if(balloons[i].offsetTop<-bZ) { 
balloons[i].style.top = wH + "px"; 
} 
} 
} 
</script> 
<script> 
/*测试*/ 
var x = 0; 
// setInterval(function(){ 
//  console.log(x++); 
// },500);//会阻塞队列 函数设定的速度大于线程速度 
 /*下边这个比较好 不会失真*/ 
// add(); 
// function add(){ 
//  console.log(x++); 
//  setTimeout(add,500); 
// } 
/* 
流程回顾 
在做打气球小游戏之前 首先需要对整个游戏的思路 流程 有大概的概念 
首先用div+css先写出一个静态的气球模板 接下来div可以删掉 css保留  
整个流程大的步骤可以分四步 
气球触发模块 
这里需要注意的是 为了避免页面重绘循环之前创建一个fragment//解释:每次JavaScript对DOM的操作都会改变当前页面的呈现,并重新刷新整个页面,从而消耗了大量的时间。为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中,这个就是createDocumentFragment()的用武之处。 
气球移动模块 
这里需要注意的是 页面上每个DOM元素都有固有的属性,比如style width height 等等 ,我们也可以给他添加一个他没有的属性 比如上边的balloons[i].speed,这个属性本来它是没有的。 
气球爆炸模块 
这里需要注意的是 不可能给每个气球加点击事件 这会影响性能 可以添加事件委托 点击哪个哪个会添加爆炸事件。addeventlistener。 
气球生成模块 
不应该每次点击爆的时候生成十个 所以给init设置成带参方法 num。 
*/ 
</script> 
</body> 
</html> 
WEB前端学习交流群21 598399936 
  | 
标签:速度 char 运算符 rip otto title timer 概念 floor
原文地址:http://www.cnblogs.com/luludehuhuan/p/7797898.html