- PK creative Spring Festival, I am participating in the “Spring Festival creative submission contest”, please see: Spring Festival creative submission Contest
Radissian folks, welcome to honest front class, last time I wrote a little blind box for the New Year, this big New Year’s day, I have fireworks ready for you, today we will write a small fireworks.
positive
Note that there are two modes oh, you can freely switch, mouse click where there are fireworks, can also automatically set off fireworks
The structure is just two lines
<div id="tips">
<a id="manual" href="javascript:;">Manual fireworks</a>
<a id="auto" href="javascript:;">Automatic fireworks</a>
</div>
Copy the code
style
Most of the following styles are rendered on the DOM by JS code
html.body {
overflow: hidden;
}
body.div.p {
margin: 0;
padding: 0;
}
body {
background: # 000;
font: 12px/1.5 arial;
color: #7A7A7A;
}
a {
text-decoration: none;
outline: none;
}
#tips.#copyright {
position: absolute;
width: 100%;
height: 50px;
text-align: center;
background: # 171717;
border: 2px solid # 484848;
}
#tips {
top: 0;
border-width: 0 0 2px;
}
#tips a {
font: 14px/30px arial;
color: #FFF;
background: #F06;
display: inline-block;
margin: 10px 5px 0;
padding: 0 15px;
border-radius: 15px;
}
#tips a.active {
background: #FE0000;
}
#copyright {
bottom: 0;
line-height: 50px;
border-width: 2px 0 0;
}
#copyright a {
color: #FFF;
background: #7A7A7A;
padding: 2px 5px;
border-radius: 10px;
}
#copyright a:hover {
background: #F90;
}
p {
position: absolute;
top: 55px;
width: 100%;
text-align: center;
}
Copy the code
performance
Key code, full of comments oh, this I can mean ha, do not understand the words of the private ask me.
var fgm = {
on: function (element, type, handler) {
return element.addEventListener ? element.addEventListener(type, handler, false) : element.attachEvent("on" + type, handler)
},
un: function (element, type, handler) {
return element.removeEventListener ? element.removeEventListener(type, handler, false) : element.detachEvent("on" + type, handler)
},
bind: function (object, handler) {
return function () {
return handler.apply(object, arguments)}},randomRange: function (lower, upper) { // Generate random numbers ranging from lower to upper
return Math.floor(Math.random() * (upper - lower + 1) + lower)
},
getRanColor: function () { // Get a random hexadecimal color
var str = this.randomRange(0.0xFFFFFF).toString(16);
while (str.length < 6) str = "0" + str;
return "#" + str
}
};
// Initialize the object
function FireWorks() {
this.type = 0;
this.timer = null;
this.fnManual = fgm.bind(this.this.manual)
}
FireWorks.prototype = {
initialize: function () {
clearTimeout(this.timer);
fgm.un(document."click".this.fnManual);
switch (this.type) {
case 1:
fgm.on(document."click".this.fnManual);
break;
case 2:
this.auto();
break;
};
},
manual: function (event) {
event = event || window.event;
this.__create__({
x: event.clientX,
y: event.clientY
});
},
auto: function () {
var that = this;
that.timer = setTimeout(function () {
that.__create__({
x: fgm.randomRange(50.document.documentElement.clientWidth - 50),
y: fgm.randomRange(50.document.documentElement.clientHeight - 150)
})
that.auto();
}, fgm.randomRange(900.1100))},__create__: function (param) {
// Param stands for mouse click point (i.e. fireworks explosion point)
var that = this;
var oEntity = null;
var oChip = null;
var aChip = [];
var timer = null;
var oFrag = document.createDocumentFragment();
oEntity = document.createElement("div");
with (oEntity.style) { // Fireworks rise entity initialization
position = "absolute";
// The initial position from the top of the page is: the height of the entire page (at the bottom of the page)
top = document.documentElement.clientHeight + "px";
left = param.x + "px";
width = "4px";
height = "30px";
borderRadius = "4px";
background = fgm.getRanColor();
};
document.body.appendChild(oEntity);
//window.setInterval method This method causes a function to be called at fixed intervals
// console.log(param.y);
oEntity.timer = setInterval(function () {
// console.log(oEntity.offsetTop);
// console.log(oEntity.style.top);
oEntity.style.top = oEntity.offsetTop - 20 + "px";
// Determine whether the firework has risen to or exceeded the last mouse click for the first time
if (oEntity.offsetTop <= param.y) {
// Fireworks explode
clearInterval(oEntity.timer);
document.body.removeChild(oEntity);
(function () {
// Randomly generate shards between 50 and 100
// Due to the low processing efficiency of Internet Explorer, the random range is reduced to 20-30
// Automatic fireworks, the random range is reduced to 20-30
var len = (/msie/i.test(navigator.userAgent) || that.type == 2)? fgm.randomRange(20.30) : fgm.randomRange(50.100)
// Generates all firework explosion particle entities
for (i = 0; i < len; i++) {
// Fireworks particles form entities
oChip = document.createElement("div");
with (oChip.style) {
position = "absolute";
top = param.y + "px";
left = param.x + "px";
width = "4px";
height = "4px";
overflow = "hidden";
borderRadius = "4px";
background = fgm.getRanColor();
};
oChip.speedX = fgm.randomRange(-20.20);
oChip.speedY = fgm.randomRange(-20.20);
oFrag.appendChild(oChip);
aChip[i] = oChip
};
document.body.appendChild(oFrag);
timer = setInterval(function () {
for (i = 0; i < aChip.length; i++) {
var obj = aChip[i];
with (obj.style) {
top = obj.offsetTop + obj.speedY + "px";
left = obj.offsetLeft + obj.speedX + "px";
};
obj.speedY++;
// Check whether fireworks explosion particles fall outside the window, if true, remove
// The splice() method removes zero or more elements starting at index
(obj.offsetTop < 0 || obj.offsetLeft < 0 || obj.offsetTop > document.documentElement.clientHeight || obj.offsetLeft > document.documentElement.clientWidth) && (document.body.removeChild(obj), aChip.splice(i, 1))};// Check whether all fireworks explosion particles are removed. If true, clearInterval(timer);! aChip[0] && clearInterval(timer);
}, 30}})}) (),30)}}; fgm.on(window."load".function () {
var oTips = document.getElementById("tips");
var aBtn = oTips.getElementsByTagName("a");
var oFireWorks = new FireWorks();
fgm.on(oTips, "click".function (event) {
var oEvent = event || window.event;
var oTarget = oEvent.target || oEvent.srcElement;
var i = 0;
if (oTarget.tagName.toUpperCase() == "A") {
for (i = 0; i < aBtn.length; i++) aBtn[i].className = "";
switch (oTarget.id) {
case "manual":
oFireWorks.type = 1;
break;
case "auto":
oFireWorks.type = 2;
break;
case "stop":
oFireWorks.type = 0;
break;
}
oFireWorks.initialize();
oTarget.className = "active";
// Prevents the browser's default event bubbling behavior
oEvent.stopPropagation ? oEvent.stopPropagation() : oEvent.cancelBubble = true}}); }); fgm.on(document."contextmenu".function (event) {
var oEvent = event || window.event;
oEvent.preventDefault ? oEvent.preventDefault() : oEvent.returnValue = false
});
Copy the code
Do not learn to have no train of thought, is it not difficult to feel over? Have you done it yet?
The last
The blogger is honest, answers questions for free, and also makes some learning videos to teach students
If helpful to you, I hope you can give 👍/ comments/favorites
Your three lines ~ are the biggest motivation to support my creation