当前位置:网站首页>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>
边栏推荐
- JS - mouse and keyboard configuration and browser forbidden operation
- Difference between PX and EM and REM
- Disk management and file system
- Ia class summary (1)
- Jmeter分布式压测
- General paging 01
- Leetcode sword finger offer jz42 maximum sum of continuous subarrays
- grep与正则的搭配使用
- rsync(一):基本命令和用法
- 【LVGL(5)】标签的(label)用法
猜你喜欢
随机推荐
Quick start of go language
Special effects - click the mouse and the randomly set text will appear
【LVGL(2)】LVGL入门,在CodeBlock上进行模拟以及移植STM32
广度优先搜索(模板使用)
日志收集分析平台
Difference between PX and EM and REM
Use of MySQL
Summary browser object
General paging 01
Log collection and analysis platform
RAID的配置实验
深入了解MySQL 两把锁啥时候用(表锁,行锁)
Talk about browser cache again
Process and planned task management
Secondary processing of template data
Website B video is embedded in the web page, and relevant controls are hidden
General paging 2.0
SSH远程访问及控制
Today, let's talk about the underlying architecture design of MySQL database. How much do you know?
The history command adds time to the history









