前端开发 之 12个鼠标交互特效上【附完整源码】

embedded/2024/12/25 0:05:41/

前端开发 之 12个鼠标html" title=交互>交互特效上【附完整源码】

文章目录

  • 前端开发 之 12个鼠标html" title=交互>交互特效上【附完整源码】
      • 一:彩色空心爱心滑动特效
          • 1.效果展示
          • 2.`HTML`完整代码
      • 二:彩色实心爱心滑动特效
          • 1.效果展示
          • 2.`HTML`完整代码
      • 三:粒子连结特效
          • 1.效果展示
          • 2.`HTML`完整代码
      • 四:彩色拖尾特效
          • 1.效果展示
          • 2.`HTML`完整代码
      • 五:彩色粒子收回特效
          • 1.效果展示
          • 2.`HTML`完整代码
      • 六:彩色粒子html" title=交互>交互特效
          • 1.效果展示
          • 2.`HTML`完整代码

一:彩色空心爱心滑动特效

1.效果展示

在这里插入图片描述

2.HTML完整代码
html"><!doctype html>
<html>
<head><meta charset="utf-8"><title>超级炫酷的爱心滑动特效</title><style>css">body {overflow: hidden;margin: 0;background: #222;}canvas {display: block;}</style>
</head><body><canvas></canvas><script>html" title=javascript>javascript">var canvas = document.querySelector("canvas"),ctx = canvas.getContext("2d");var ww, wh;function onResize() {ww = canvas.width = window.innerWidth;wh = canvas.height = window.innerHeight;}function randomColor() {return `hsla(${Math.random() * 360}, 100%, 60%, 1)`;}var precision = 100;var hearts = [];var mouseMoved = false;function onMove(e) {mouseMoved = true;for (let i = 0; i < 5; i++) { // 生成更多的爱心let x, y;if (e.type === "touchmove") {x = e.touches[0].clientX;y = e.touches[0].clientY;} else {x = e.clientX;y = e.clientY;}hearts.push(new Heart(x, y));}}var Heart = function (x, y) {this.x = x || Math.random() * ww;this.y = y || Math.random() * wh;this.size = Math.random() * 4 + 1;this.shadowBlur = Math.random() * 20;this.speedX = (Math.random() - 0.5) * 10;this.speedY = (Math.random() - 0.5) * 10;this.speedSize = Math.random() * 0.05 + 0.01;this.opacity = 1;this.color = randomColor();this.vertices = [];for (var i = 0; i < precision; i++) {var step = (i / precision - 0.5) * (Math.PI * 2);var vector = {x: (15 * Math.pow(Math.sin(step), 3)),y: -(13 * Math.cos(step) - 5 * Math.cos(2 * step) - 2 * Math.cos(3 * step) - Math.cos(4 * step))}this.vertices.push(vector);}}Heart.prototype.draw = function () {this.size -= this.speedSize;this.x += this.speedX;this.y += this.speedY;ctx.save();ctx.translate(this.x, this.y);ctx.scale(this.size, this.size);ctx.beginPath();ctx.strokeStyle = this.color;ctx.shadowBlur = this.shadowBlur;ctx.shadowColor = this.color;for (var i = 0; i < precision; i++) {var vector = this.vertices[i];ctx.lineTo(vector.x, vector.y);}ctx.globalAlpha = this.size;ctx.closePath();ctx.stroke();ctx.restore();};function render(a) {requestAnimationFrame(render);ctx.clearRect(0, 0, ww, wh);for (var i = 0; i < hearts.length; i++) {hearts[i].draw();if (hearts[i].size <= 0) {hearts.splice(i, 1);i--;}}}onResize();window.addEventListener("mousemove", onMove);window.addEventListener("touchmove", onMove);window.addEventListener("resize", onResize);requestAnimationFrame(render);</script>
</body>
</html>

二:彩色实心爱心滑动特效

1.效果展示

在这里插入图片描述

2.HTML完整代码
html"><!doctype html>
<html>
<head><meta charset="utf-8"><title>滑动爱心</title><style>css">body {overflow: hidden;margin: 0;background: linear-gradient(to right, #ff9a9e, #fad0c4);height: 100vh;display: flex;justify-content: center;align-items: center;}canvas {position: absolute;top: 0;left: 0;}</style>
</head>
<body><canvas></canvas><script>html" title=javascript>javascript">var canvas = document.querySelector("canvas"),ctx = canvas.getContext("2d");var ww, wh;function onResize() {ww = canvas.width = window.innerWidth;wh = canvas.height = window.innerHeight;}var precision = 50;var hearts = [];var mouseMoved = false;function onMove(e) {mouseMoved = true;var x, y;if (e.type === "touchmove") {x = e.touches[0].clientX;y = e.touches[0].clientY;} else {x = e.clientX;y = e.clientY;}hearts.push(new Heart(x, y));}var Heart = function (x, y) {this.x = x || Math.random() * ww;this.y = y || Math.random() * wh;this.size = Math.random() * 2 + 1;this.maxSize = this.size * 1.5;this.shadowBlur = Math.random() * 15;this.speedX = (Math.random() - 0.5) * 4;this.speedY = (Math.random() - 0.5) * 4;this.alpha = 1;this.fadeSpeed = Math.random() * 0.02 + 0.02;this.color = `hsl(${Math.random() * 360}, 100%, 50%)`;this.vertices = [];for (var i = 0; i < precision; i++) {var step = (i / precision - 0.5) * (Math.PI * 2);var vector = {x: (15 * Math.pow(Math.sin(step), 3)),y: -(13 * Math.cos(step) - 5 * Math.cos(2 * step) - 2 * Math.cos(3 * step) - Math.cos(4 * step))}this.vertices.push(vector);}}Heart.prototype.draw = function () {this.x += this.speedX;this.y += this.speedY;this.size += (this.maxSize - this.size) * 0.1;this.alpha -= this.fadeSpeed;ctx.save();ctx.translate(this.x, this.y);ctx.scale(this.size, this.size);ctx.beginPath();ctx.moveTo(0, 0);for (var i = 0; i < precision; i++) {var vector = this.vertices[i];ctx.lineTo(vector.x, vector.y);}ctx.closePath();ctx.fillStyle = this.color;ctx.globalAlpha = this.alpha;ctx.shadowBlur = this.shadowBlur;ctx.shadowColor = this.color;ctx.fill();ctx.restore();};function render(a) {requestAnimationFrame(render);ctx.clearRect(0, 0, ww, wh);for (var i = 0; i < hearts.length; i++) {hearts[i].draw();if (hearts[i].alpha <= 0) {hearts.splice(i, 1);i--;}}}onResize();window.addEventListener("mousemove", onMove);window.addEventListener("touchmove", onMove);window.addEventListener("resize", onResize);requestAnimationFrame(render);</script>
</body>
</html>

三:粒子连结特效

1.效果展示

在这里插入图片描述

2.HTML完整代码
html"><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Enhanced Particle System with Cool Effects</title><style>css">body {margin: 0;overflow: hidden;background: linear-gradient(45deg, #000, #333);animation: bgGradient 10s ease infinite;}@keyframes bgGradient {0% { background-position: 0% 50%; }50% { background-position: 100% 50%; }100% { background-position: 0% 50%; }}canvas {display: block;}</style>
</head>
<body><canvas id="particleCanvas"></canvas>
</body>
<script>html" title=javascript>javascript">
const canvas = document.getElementById('particleCanvas');
const ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;let particlesArray = [];
const numberOfParticles = 50;
const mouse = {x: undefined,y: undefined,
};
const maxParticleLifeTime = 1; class Particle {constructor(x, y, initialLife = 1) {this.x = x || Math.random() * canvas.width;this.y = y || Math.random() * canvas.height;this.size = Math.random() * 2 + 1;this.speedX = (Math.random() - 0.5) * 2;this.speedY = (Math.random() - 0.5) * 2;this.color = `hsl(${Math.random() * 360}, 100%, 50%)`;this.alpha = 1;this.decay = Math.random() * 0.01 + 0.01;this.life = initialLife;this.trail = [];this.lifeTime = 0; }update() {this.x += this.speedX;this.y += this.speedY;if (this.x > canvas.width || this.x < 0) this.speedX *= -1;if (this.y > canvas.height || this.y < 0) this.speedY *= -1;if (mouse.x && mouse.y) {const dx = mouse.x - this.x;const dy = mouse.y - this.y;const distance = Math.sqrt(dx * dx + dy * dy);const force = 1 / distance * 20;this.speedX += (dx / distance) * force;this.speedY += (dy / distance) * force;}this.life -= this.decay;this.alpha = this.life;this.color = `hsl(${(1 - this.life) * 360}, 100%, 50%)`;this.lifeTime += 1 / 60; if (this.life <= 0 || this.lifeTime >= maxParticleLifeTime) {this.reset();}this.trail.push({ x: this.x, y: this.y });if (this.trail.length > 15) this.trail.shift();for (let otherParticle of particlesArray) {if (otherParticle !== this) {const dx = this.x - otherParticle.x;const dy = this.y - otherParticle.y;const distance = Math.sqrt(dx * dx + dy * dy);if (distance < 50) {const repelForce = 0.1 / distance;this.speedX -= (dx / distance) * repelForce;this.speedY -= (dy / distance) * repelForce;}}}}draw() {ctx.globalAlpha = this.alpha;ctx.fillStyle = this.color;ctx.beginPath();ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);ctx.closePath();ctx.fill();ctx.globalAlpha = 0.7 * this.alpha;ctx.beginPath();for (let i = 0; i < this.trail.length; i++) {ctx.lineTo(this.trail[i].x, this.trail[i].y);}ctx.strokeStyle = this.color;ctx.lineWidth = 0.5;ctx.stroke();ctx.closePath();}reset() {this.x = Math.random() * canvas.width;this.y = Math.random() * canvas.height;this.size = Math.random() * 2 + 1;this.speedX = (Math.random() - 0.5) * 4;this.speedY = (Math.random() - 0.5) * 4;this.color = `hsl(${Math.random() * 360}, 100%, 50%)`;this.alpha = 1;this.life = 1;this.decay = Math.random() * 0.01 + 0.01;this.trail = [];this.lifeTime = 0;}
}function init() {particlesArray = [];for (let i = 0; i < numberOfParticles; i++) {particlesArray.push(new Particle());}
}function animate() {ctx.clearRect(0, 0, canvas.width, canvas.height);for (let particle of particlesArray) {particle.update();particle.draw();}requestAnimationFrame(animate);
}window.addEventListener('resize', function() {canvas.width = window.innerWidth;canvas.height = window.innerHeight;init();
});window.addEventListener('mousemove', function(event) {mouse.x = event.x;mouse.y = event.y;
});window.addEventListener('mouseout', function() {mouse.x = undefined;mouse.y = undefined;
});window.addEventListener('click', function(event) {for (let i = 0; i < 30; i++) {const angle = Math.random() * 2 * Math.PI;const distance = Math.random() * 50;const x = event.x + Math.cos(angle) * distance;const y = event.y + Math.sin(angle) * distance;particlesArray.push(new Particle(x, y, 1));}
});init();
animate();
</script>
</html>

四:彩色拖尾特效

1.效果展示

在这里插入图片描述

2.HTML完整代码
html"><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>1234</title><style>css">body, html {margin: 0;padding: 0;width: 100%;height: 100%;overflow: hidden;background-color: #000;}#trail-container {position: absolute;top: 0;left: 0;width: 100%;height: 100%;pointer-events: none;}.particle {position: absolute;width: 3px; /* 减小粒子大小 */height: 3px;background-color: #fff;border-radius: 50%;opacity: 1;transform: translate(-50%, -50%);pointer-events: none;mix-blend-mode: screen;}/* 为粒子添加一个更快的淡出动画 */@keyframes fadeOut {0% { opacity: 1; }100% { opacity: 0; }}.particle.fade {animation: fadeOut 0.5s ease-out forwards; /* 缩短动画持续时间 */}</style>
</head>
<body><div id="trail-container"></div><script>html" title=javascript>javascript">document.addEventListener('DOMContentLoaded', () => {const trailContainer = document.getElementById('trail-container');const particles = [];// 监听鼠标移动事件document.addEventListener('mousemove', (e) => {// 在鼠标位置创建粒子createParticle(e.clientX, e.clientY);});// 创建粒子function createParticle(x, y) {const particle = document.createElement('div');particle.classList.add('particle');particle.style.left = `${x}px`;particle.style.top = `${y}px`;// 使用随机颜色或固定颜色particle.style.backgroundColor = getRandomColor();trailContainer.appendChild(particle);particles.push(particle);// 几乎立即给粒子添加淡出动画setTimeout(() => {particle.classList.add('fade');// 动画结束后移除粒子particle.addEventListener('animationend', () => {particle.remove();particles.splice(particles.indexOf(particle), 1);});}, 100); // 非常短的延迟,几乎立即开始淡出}// 获取随机颜色function getRandomColor() {const letters = '0123456789ABCDEF';let color = '#';for (let i = 0; i < 6; i++) {color += letters[Math.floor(Math.random() * 16)];}return color;}// 定期清理,动画结束后粒子会自动移除setInterval(() => {particles.forEach(particle => {if (particle.classList.contains('fade')) {particle.remove();particles.splice(particles.indexOf(particle), 1);}});}, 1000);});</script>
</body>
</html>

五:彩色粒子收回特效

1.效果展示

在这里插入图片描述

2.HTML完整代码
html"><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Enhanced Particle System with Gravity and Wind</title><style>css">body, html {margin: 0;padding: 0;width: 100%;height: 100%;overflow: hidden;}#particleCanvas {display: block;width: 100%;height: 100%;background: linear-gradient(to bottom, #000000, #111111);}</style>
</head>
<body><canvas id="particleCanvas"></canvas><script>html" title=javascript>javascript">const canvas = document.getElementById('particleCanvas');const ctx = canvas.getContext('2d');canvas.width = window.innerWidth;canvas.height = window.innerHeight;const particlesArray = [];const numberOfParticles = 500; const mouse = {x: undefined,y: undefined,};const gravity = 0.05; const wind = {x: 0.01, y: 0,};class Particle {constructor() {this.x = Math.random() * canvas.width;this.y = Math.random() * canvas.height;this.size = Math.random() * 5 + 1; this.speedX = (Math.random() - 0.5) * 4; this.speedY = (Math.random() - 0.5) * 4;this.color = 'hsl(' + Math.floor(Math.random() * 360) + ', 100%, 50%)';this.alpha = 1; this.targetX = this.x;this.targetY = this.y;this.ease = 0.05;}update() {if (mouse.x !== undefined && mouse.y !== undefined) {this.targetX = mouse.x;this.targetY = mouse.y;}this.x += (this.targetX - this.x) * this.ease;this.y += (this.targetY - this.y) * this.ease;this.speedY += gravity;this.speedX += wind.x;if (this.x > canvas.width || this.x < 0) this.speedX *= -1;if (this.y > canvas.height) this.y = canvas.height, this.speedY *= -0.7; this.alpha -= 0.01; if (this.alpha < 0) this.alpha = 0;this.draw();}draw() {ctx.globalAlpha = this.alpha;ctx.fillStyle = this.color;ctx.beginPath();ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);ctx.closePath();ctx.fill();}}function init() {for (let i = 0; i < numberOfParticles; i++) {particlesArray.push(new Particle());}}function animate() {ctx.clearRect(0, 0, canvas.width, canvas.height);for (let particle of particlesArray) {particle.update();}requestAnimationFrame(animate);}window.addEventListener('resize', function() {canvas.width = window.innerWidth;canvas.height = window.innerHeight;});window.addEventListener('mousemove', function(event) {mouse.x = event.x;mouse.y = event.y;});window.addEventListener('mouseout', function() {mouse.x = undefined;mouse.y = undefined;});window.addEventListener('click', function() {for (let i = 0; i < 20; i++) {particlesArray.push(new Particle());}});init();animate();</script>
</body>
</html>

六:彩色粒子html" title=交互>交互特效

1.效果展示

在这里插入图片描述

2.HTML完整代码
html"><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>彩色粒子html" title=交互>交互特效</title>
</head>
<body>
<script>html" title=javascript>javascript">!(function () {function n(n, e, t) {return n.getAttribute(e) || t;}function e(n) {return document.getElementsByTagName(n);}function t() {var t = e("script"),o = t.length,i = t[o - 1];return {l: o,z: n(i, "zIndex", -1),o: n(i, "opacity", 0.6),c: n(i, "color", "0,255,0"), n: n(i, "count", 400), // 粒子的数量};}function o() {(a = m.width =window.innerWidth ||document.documentElement.clientWidth ||document.body.clientWidth),(c = m.height =window.innerHeight ||document.documentElement.clientHeight ||document.body.clientHeight);}function i() {r.clearRect(0, 0, a, c);var n, e, t, o, m, l;s.forEach(function (particle, index) {for (particle.x += particle.xa,particle.y += particle.ya,particle.xa *= particle.x > a || particle.x < 0 ? -1 : 1,particle.ya *= particle.y > c || particle.y < 0 ? -1 : 1,// 使用粒子的颜色属性进行绘制r.fillStyle = particle.color,r.fillRect(particle.x - 0.5, particle.y - 0.5, 1, 1),e = index + 1;e < u.length;e++) {(n = u[e]),null !== n.x &&null !== n.y &&((o = particle.x - n.x),(m = particle.y - n.y),(l = o * o + m * m),l < n.max &&(n === y &&l >= n.max / 2 &&((particle.x -= 0.03 * o), (particle.y -= 0.03 * m)),(t = (n.max - l) / n.max),r.beginPath(),(r.lineWidth = t / 2),// 连线颜色和粒子颜色一致r.strokeStyle = particle.color,r.moveTo(particle.x, particle.y),r.lineTo(n.x, n.y),r.stroke()));}}),x(i);}var fixedColors = ["rgba(255, 0, 0, 1.0)",   // 红色"rgba(0, 255, 0, 1.0)",   // 绿色"rgba(0, 0, 255, 1.0)",   // 蓝色"rgba(255, 255, 0, 1.0)", // 黄色"rgba(0, 255, 255, 0.8)", // 青色"rgba(255, 0, 255, 0.8)", // 紫色"rgba(255, 165, 0, 0.8)", // 橙色"rgba(127, 255, 212, 1.0)","rgba(0, 255, 127, 1.0)"];var a,c,u,m = document.createElement("canvas"),d = t(),l = "c_n" + d.l,r = m.getContext("2d"),x =window.requestAnimationFrame ||window.webkitRequestAnimationFrame ||window.mozRequestAnimationFrame ||window.oRequestAnimationFrame ||window.msRequestAnimationFrame ||function (n) {window.setTimeout(n, 1e3 / 45);},w = Math.random,y = { x: null, y: null, max: 2e4 };(m.id = l),(m.style.cssText ="position:fixed;top:0;left:0;z-index:" + d.z + ";opacity:" + d.o),e("body")[0].appendChild(m),o(),(window.onresize = o),(window.onmousemove = function (n) {(n = n || window.event), (y.x = n.clientX), (y.y = n.clientY);}),(window.onmouseout = function () {(y.x = null), (y.y = null);});//固定颜色for (var s = [], f = 0; d.n > f; f++) {var h = w() * a,g = w() * c,v = 2 * w() - 1,p = 2 * w() - 1,// 从固定颜色数组中随机选择一个颜色color = fixedColors[Math.floor(Math.random() * fixedColors.length)];s.push({ x: h, y: g, xa: v, ya: p, max: 6e3, color: color }); // 使用选定的固定颜色}(u = s.concat([y])),setTimeout(function () {i();}, 100);})();</script>
</body>
</html>

http://www.ppmy.cn/embedded/148471.html

相关文章

大模型与呼叫中心结合的呼入机器人系统

大模型与呼叫中心结合的呼入机器人系统 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 随着人工智能技术的发展&#xff0c;特别是大模型&#xff08;large language models, LLMs&#xff09;的进步&#xf…

介绍 Html 和 Html 5 的关系与区别

HTML&#xff08;HyperText Markup Language&#xff09;是构建网页的标准标记语言&#xff0c;而 HTML5 是 HTML 的最新版本&#xff0c;包含了一些新的功能、元素、API 和属性。HTML5 相对于早期版本的 HTML&#xff08;比如 HTML4&#xff09;有许多重要的改进和变化。以下是…

【CSS in Depth 2 精译_085】14.2:CSS 蒙版的用法

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 14 章 蒙版、形状与剪切】 ✔️ 14.1 滤镜 14.1.1 滤镜的类型14.1.2 背景滤镜 14.2 蒙版 ✔️ 14.2.1 带渐变效果的蒙版特效 ✔️14.2.2 基于亮度来定义蒙版 ✔️14…

将HTML转换为PDF:使用Spire.Doc的详细指南(一) 试用版

目录 引言 1. 为什么选择 Spire.Doc&#xff1f; 1.1 主要特点 1.2 适用场景 2. 准备工作 2.1 引入 Spire.Doc 依赖 2.2 禁用 SSL 证书验证 3. 实现功能 3.1 主类结构 3.2 代码解析 4. 处理图像 5. 性能优化 5.1 异步下载图像 示例代码 5.2 批量处理优化 示例代…

探索:为什么数组数据后端确要求前端传递,拼接的字符呢

你们好&#xff0c;我是金金金。 前言 撰写本文是因为好奇&#xff0c;好奇为什么,拼接的字符串数据过去能直接变成数组&#xff0c;好奇为什么让传,拼接的字符串而不是直接传递数组数据&#xff0c;好奇… 探索 首先看get请求&#xff0c;get请求参数一般都是携带在路径后面的…

汽车IVI中控开发入门及进阶(44):杰发科智能座舱芯片

概述: 杰发科技自成立以来,一直专注于汽车电子芯片及相关系统的研发与设计。 产品布局: 合作伙伴: 杰发科技不断提升产品设计能力和产品工艺,确保产品达 到更高的质量标准。目前杰发科技已通过ISO9001质 量管理体系与CMMIL3认证。 杰发科技长期合作的供应商(芯片代工厂、…

【蓝桥杯python研究生组备赛】001 递归+二分+前缀和

题目1 【深基2.例12】上学迟到 题目描述 学校和 yyy 的家之间的距离为 s s s 米&#xff0c;而 yyy 以 v v v 米每分钟的速度匀速走向学校。 在上学的路上&#xff0c;yyy 还要额外花费 10 10 10 分钟的时间进行垃圾分类。 学校要求必须在上午 8:00 \textrm{8:00} 8:0…

面向高精度网络的时间同步安全管理架构

论文标题&#xff1a;A Security Management Architecture for Time Synchronization Towards High Precision Networks 中文标题&#xff1a;面向高精度网络的时间同步安全管理架构 作者信息&#xff1a; 李红星&#xff0c;李登魁&#xff0c;张小东&#xff0c;寿国柱&am…