其他分享
首页 > 其他分享> > 烟花效果(面向对象写法)

烟花效果(面向对象写法)

作者:互联网

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/utils.js"></script>
</head>
<body>

</body>
<script>
//1.创建一个空的构造函数
function FireWorks() {
    //创建夜空作为对象属性
    this.nightSky = document.createElement('div');
    //将创建好的div放到body中
    document.body.appendChild(this.nightSky)
    //修饰样式
    this.setStyle(this.nightSky, {
        width: '800px',
        height: '500px',
        border: '5px solid #0f0',
        'background-color': '#2c2c2c',
        position: 'relative'
    })
    //点击夜空
    this.clickSky()
}
//点击夜空方法
FireWorks.prototype.clickSky = function() {
    //添加点击事件 - 事件源nightSky
    this.nightSky.onclick = () => {
        //记录鼠标在夜空点击的位置
        var x = window.event.offsetX
        var y = window.event.offsetY
        //创建一个div
        var div = document.createElement('div')
        //将创建好的div放到夜空中
        this.nightSky.appendChild(div)
        //修饰div的样式
        this.setStyle(div, {
            width: '10px',
            height: '10px',
            position: 'absolute',
            left: x + 'px',
            bottom: 0,
            //获取随机背景颜色
            'background-color': this.getColor()
        })
        //小div上升到鼠标点击的位置
        this.toSky(div, y, x)
    }
}
//修饰样式方法
FireWorks.prototype.setStyle = function(ele, obj) {
    var str = ''
    
    for(var key in obj) {
        str += key + ':' + obj[key] + ';'
    }
    ele.style.cssText = str
}
//获取随机颜色方法
FireWorks.prototype.getColor = function() {
    return `rgb(${this.getRandom(256)},${this.getRandom(256)},${this.getRandom(256)})`
}
//获取随机数的方法
FireWorks.prototype.getRandom = function(a, b=0) {
    return Math.floor(Math.random() * Math.abs(a -b)) + Math.min(a, b)
}
//小div上升到夜空的位置的方法
FireWorks.prototype.toSky = function(ele, y, x) {
    //调用动画函数
    animate(ele, {
        top: y
    }, () => {
        //动画结束之后删除到达夜空中指定位置的div
        this.nightSky.removeChild(ele)
        //同时在第一个div到达的位置创建很多小的div
        var num = this.getRandom(30, 50)
        for(var i=0;i<num;i++) {
            var div = document.createElement('div')
            this.setStyle(div, {
                width: '10px',
                height: '10px',
                position: 'absolute',
                left: x + 'px',
                top: y + 'px',
                'background-color': this.getColor(),
                'border-radius': '50%'
            })
            this.nightSky.appendChild(div)
            //让每一个div炸开到随机位置
            this.boom(div)
        }

    })
}
//让每个div炸开到随机位置方法
FireWorks.prototype.boom = function(div) {
    //让每个小div都移动到随机位置
    //获取随机位置
    var l = this.getRandom(this.nightSky.clientWidth - div.offsetWidth)
    var t = this.getRandom(this.nightSky.clientHeight - div.offsetHeight)

    //动画运动
    animate(div, {
        left: l,
        top: t
    }, () => {
        //动画结束后删除div(动画结束让div消失)
        this.nightSky.removeChild(div)
    })
}
//2.new调用
var f = new FireWorks()
</script>
</html>

效果:点击盒子出现效果

 

标签:function,FireWorks,夜空,烟花,面向对象,var,div,写法,nightSky
来源: https://www.cnblogs.com/bg618/p/16196324.html