当前位置:网站首页>Special effects - click with the mouse and the fireworks will burst
Special effects - click with the mouse and the fireworks will burst
2022-07-24 06:40:00 【Jie_ one thousand nine hundred and ninety-seven】
Mouse click , Fireworks explosion effect appears
One . design sketch

Two . Implementation code
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title> Click the mouse to display the fireworks explosion effect </title>
<style> * {
margin: 0; padding: 0; } html {
background-color: #c3ecff; } </style>
</head>
<body>
<script> function clickEffect() {
let balls = []; let longPressed = false; let longPress; let multiplier = 0; let width, height; let origin; let normal; let ctx; const colours = ["#F73859", "#14FFEC", "#00E0FF", "#FF99FE", "#FAF15D"]; const canvas = document.createElement("canvas"); document.body.appendChild(canvas); canvas.setAttribute("style", "width: 100%; height: 100%; top: 0; left: 0; z-index: 99999; position: fixed; pointer-events: none;"); const pointer = document.createElement("span"); pointer.classList.add("pointer"); document.body.appendChild(pointer); if (canvas.getContext && window.addEventListener) {
ctx = canvas.getContext("2d"); updateSize(); window.addEventListener('resize', updateSize, false); loop(); window.addEventListener("mousedown", function (e) {
pushBalls(randBetween(10, 20), e.clientX, e.clientY); document.body.classList.add("is-pressed"); longPress = setTimeout(function () {
document.body.classList.add("is-longpress"); longPressed = true; }, 500); }, false); window.addEventListener("mouseup", function (e) {
clearInterval(longPress); if (longPressed == true) {
document.body.classList.remove("is-longpress"); pushBalls(randBetween(50 + Math.ceil(multiplier), 100 + Math.ceil(multiplier)), e.clientX, e.clientY); longPressed = false; } document.body.classList.remove("is-pressed"); }, false); window.addEventListener("mousemove", function (e) {
let x = e.clientX; let y = e.clientY; pointer.style.top = y + "px"; pointer.style.left = x + "px"; }, false); } else {
console.log("canvas or addEventListener is unsupported!"); } function updateSize() {
canvas.width = window.innerWidth * 2; canvas.height = window.innerHeight * 2; canvas.style.width = window.innerWidth + 'px'; canvas.style.height = window.innerHeight + 'px'; ctx.scale(2, 2); width = (canvas.width = window.innerWidth); height = (canvas.height = window.innerHeight); origin = {
x: width / 2, y: height / 2 }; normal = {
x: width / 2, y: height / 2 }; } class Ball {
constructor(x = origin.x, y = origin.y) {
this.x = x; this.y = y; this.angle = Math.PI * 2 * Math.random(); if (longPressed == true) {
this.multiplier = randBetween(14 + multiplier, 15 + multiplier); } else {
this.multiplier = randBetween(6, 12); } this.vx = (this.multiplier + Math.random() * 0.5) * Math.cos(this.angle); this.vy = (this.multiplier + Math.random() * 0.5) * Math.sin(this.angle); this.r = randBetween(8, 12) + 3 * Math.random(); this.color = colours[Math.floor(Math.random() * colours.length)]; } update() {
this.x += this.vx - normal.x; this.y += this.vy - normal.y; normal.x = -2 / window.innerWidth * Math.sin(this.angle); normal.y = -2 / window.innerHeight * Math.cos(this.angle); this.r -= 0.3; this.vx *= 0.9; this.vy *= 0.9; } } function pushBalls(count = 1, x = origin.x, y = origin.y) {
for (let i = 0; i < count; i++) {
balls.push(new Ball(x, y)); } } function randBetween(min, max) {
return Math.floor(Math.random() * max) + min; } function loop() {
ctx.fillStyle = "rgba(255, 255, 255, 0)"; ctx.clearRect(0, 0, canvas.width, canvas.height); for (let i = 0; i < balls.length; i++) {
let b = balls[i]; if (b.r < 0) continue; ctx.fillStyle = b.color; ctx.beginPath(); ctx.arc(b.x, b.y, b.r, 0, Math.PI * 2, false); ctx.fill(); b.update(); } if (longPressed == true) {
multiplier += 0.2; } else if (!longPressed && multiplier >= 0) {
multiplier -= 0.4; } removeBall(); requestAnimationFrame(loop); } function removeBall() {
for (let i = 0; i < balls.length; i++) {
let b = balls[i]; if (b.x + b.r < 0 || b.x - b.r > width || b.y + b.r < 0 || b.y - b.r > height || b.r < 0) {
balls.splice(i, 1); } } } } clickEffect();// Call the special effect function </script>
</body>
</html>
边栏推荐
猜你喜欢
随机推荐
Special effects - click the mouse, and a random color of love will appear
磁盘管理和文件系统
Rsync (I): basic commands and usage
Customize ZABBIX agent RPM package
【LVGL】组件的样式的设置、更改、删除API函数
Custom MVC 2.0
Sort by an attribute value of an object in the array
go的环境搭建和起步
【媒体控制器】开源项目学习笔记(基于Arduino Micro开发板)
MySQL批量修改数据表编码及字符集为utf8mb4
【LVGL(4)】对象的事件及事件冒泡
Ia class summary (1)
Flex layout
带你深入了解MySQL数据库扣减库存原理
API流程和代码结构
Learn more about when to use MySQL two locks (table lock and row lock)
联合国农产品数据分析
sql server 同步数据库 跨网段无公网ip几个常见小问题问题
Today, let's talk about the underlying architecture design of MySQL database. How much do you know?
Crud of MySQL









