JavaScript实现打气球

简介: JavaScript实现打气球

需求分析


气球随机出现在页面底部,按照随机速度向上飘,当气球被点击,气球快速消失


步骤拆解


  1. 气球生成
  2. 气球位置确定
  3. 气球以随机速度上升
  4. 气球到达顶部
  5. 气球被点击,触发动画


气球设计


对于网站,图片的加载浪费资源很多,所以如果有方法能够替代图片,最好使用非图片方式,本文章气球的设计使用CSS3来实现。


气球外形设计(border-radius)


CSS3中实现圆或者椭圆的一个属性,气球可以简化为三个大圆弧、一个小圆弧和一个小三角组成。那么很简单就可以使用border-radius对四个圆弧分别赋予半径便可。对于小三角的设计,类似图书标签设计,使用伪元素after


HTML每个元素都会带有两个伪元素(after,before)。


  • border-radius详解


  • border-radius:length/% (50%实现圆形)
  • border-radius为简写,全部写为borer-top-left-radius: 1  2;(其余三个按照顺时针顺序)当1位置和2位置相同,效果为圆弧;反之为椭圆弧。_1_为left、_2_为top


气球颜色设计(box-shadow)


通常气球的颜色是变化的,既是一个渐变的效果,但是使用渐变属性有点大材小用,这里使用box-shadow(inset)来实现,简单。


box-shadow详解


box-shadow: h-shadow w-shadow blur spread color inset;


blur:阴影模糊半径;    spread:阴影外延值


注意:text-shadow:  h-shadow w-shadow blur color


详细代码


/* 内部颜色变化使用box-shadow(inset)实现 */
.balloon{
  width: 160px;
  height: 160px;
  position: absolute;
  background-color: #cccccc;
  border-radius: 160px 160px 64px 160px;//气球主体
  -webkit-transform: rotate(45deg);
  transform: rotate(45deg);
  box-shadow: -8px -8px 80px #faf9f9 inset;//气球颜色
}
/* 使用伪元素实现尾巴 */
.balloon::after{
  content: ''; //伪元素必需属性
  position: absolute;
  right: 0; bottom: 2px;
  width: 0; height: 0;
  border: 8px solid transparent;
  -webkit-transform: rotate(45deg);
  transform: rotate(45deg);
  border-right-color: #faf9f9;
  border-radius: 50%;
}
复制代码


初始化气球


DOM规定文档片段(document fragment)是一种“轻量级”文档,可以包含和控制节点,但不会像完整的文档那样占用额外的资源。


频繁添加气球非常浪费性能,因此可以创建 DocumentFragment 元素,先将气球元素添加到 DocumentFragment 中,最后将 DocumentFragment 插入到 DOM 元素中,避免动态添加DOM时造成DOM树多次加载。


同时在初始化气球时,设定气球的速度,速度使用随机数生成,保证气球的以不同的速度上升。


function init(num){
        //文档片段创建
        var fragment = document.createDocumentFragment(); 
        for(var i=0;i<num;i++){
                var balloon = document.createElement('div'),
                        randomSpeed =  (Math.random() * bigSpeed) | 0 + 5;
                balloon.className = 'balloon';
                balloonPos(balloon);
                balloon.speed = randomSpeed;
                balloonList.push(balloon);
                fragment.appendChild(balloon);
        }
        document.body.appendChild(fragment);
}
复制代码


气球爆炸


当气球被点击时,气球会有类似放气的效果,本项目通过设置气球宽度和高度减小、速度加快、rotate配合左右摆动来模拟放气效果。


obj.speed++;
obj.style.top = obj.offsetTop-obj.speed+'px';
obj.style.width = obj.offsetWidth-10+'px';
obj.style.height = obj.offsetHeight-10+'px';
obj.style.transform = 'rotate(' + random[index] + 'deg)';
复制代码


气球点击


页面中产生了很多气球,给每个气球都绑定 click 事件浪费性能,而且每个气球的处理函数是相同的,因此使用事件委托通过 document 监听 click 事件,判断触发 click 事件的元素是否为 ballon 即可。


document.addEventListener('click', function(e){
    if (e.target.className === 'balloon'){
           // 气球点击处理函数
    }
});


相关文章
|
JavaScript 前端开发
javascript深拷贝和浅拷贝以及实现方法(推荐)
javascript深拷贝和浅拷贝以及实现方法(推荐)
563 0
javascript深拷贝和浅拷贝以及实现方法(推荐)
|
JavaScript 算法 前端开发
【前端算法】JS实现数字千分位格式化
JS实现数字千分位格式化的几种思路,以及它们之间的性能比较
294 1
|
存储 前端开发 算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
140 0
一行代码解决LeetCode实现 strStr()使用JavaScript解题|前端学算法
|
存储 机器学习/深度学习 JavaScript
JS 你最少用几行代码实现深拷贝?
JS 你最少用几行代码实现深拷贝?
JS 你最少用几行代码实现深拷贝?
|
JavaScript 前端开发 算法
JavaScript实现一段时间之后关闭广告
简介:通过JavaScript实现在一段时间之后,广告消失。
102 0
JavaScript实现一段时间之后关闭广告
|
JavaScript 前端开发 算法
JS实现鼠标悬停变色
本文实现的是利用JS实现当鼠标悬停在表格上的时候,表格发生变色。 CSS渲染 JS逻辑 `
184 0
JS实现鼠标悬停变色
|
JavaScript 前端开发 数据安全/隐私保护
JS实现关闭图片窗口
通过事件的绑定来实现,关闭二维码的效果。
132 0
JS实现关闭图片窗口
|
前端开发 JavaScript Windows
js实现body背景图自动扩缩 光靠css几乎无法实现这样的效果
js实现body背景图自动扩缩 光靠css几乎无法实现这样的效果
165 0
js实现body背景图自动扩缩 光靠css几乎无法实现这样的效果
|
存储 JavaScript
js实现多选、全选、反选、取消选择(篇一)
js实现多选、全选、反选、取消选择(篇一)
351 0
js实现多选、全选、反选、取消选择(篇一)
|
JavaScript 前端开发
利用JavaScript实现二级联动
利用JavaScript实现二级联动 要实现JavaScript二级联动效果,首先要确定需要哪些技术: 二维数组 for in循环 new Option(text,value,true,true) add(option,null) onchange() 表单事件 HTML代码: &lt;!-- &lt;input type=&quot;text&quot; id=&quot;text&quot;&gt; --&gt; 请选择省份: &lt;select name=&quot;&quot; id=&quot;provinces&quot;&gt; &lt;!-- &lt;option value=&quot;江苏省&quot;&gt;江苏省&lt;/option&gt;