马黑PHP整站系统

spriteparticle.js模块使用说明

位置: 首页 > JS插件[ 发布时间: 2025.6.12  作者: 马黑  阅读: 21 ]

spriteparticle.js 是使用 ES6 标准、基于 ThreeJS 核心库编写的JS模块,专为音画帖打造粒子系统及提供音、视频联动管控功能,模块内部使用 Sprite 精灵制作粒子、Sphere 球形几何体制作播放器。以下是使用说明:

一、导入 spriteparticle 模块

分两种情况进行导入:

其一:简单导入,适用于帖子使用模块默认配置和自定义配置——

import { LZ } from 'https://638183.freep.cn/638183/web/ku/spriteparticle.js';

可以将 spriteparticle.js 保存为自己的文档(存为本地测试需要开启虚拟服务器且文档放在合法目录内),若此,导入地址跟着改变即可。

其二:全部导入,适用于在帖子中需要绘制其它 ThreeJS 图像的情形——

import { THREE, scene, camera, renderer, clock, LZ } from 'https://638183.freep.cn/638183/web/ku/spriteparticle.js';

scene 是场景,camera 是相机,renderer 是渲染器,clock 是时钟。这些都是绘制 ThreeJS 图像的基本变量,是绘制3d图像不可或缺的。自行绘制的 ThreeJS 图像可以自行设置动画和动画管理机制。

二、使用模块

导入的 { LZ } 是一个函数,它至少需要一个参数,就是帖子的id标识,即装载粒子和播放器的父元素。假设父元素 id="papa",那么——

LZ(papa);

注意 papa 标识不要引号。这将在 id="papa" 的标签里运行精灵粒子系统,以默认的配置方式。自然,总要有自己的配置,若此,LZ() 函数需要第二个参数,即配置参数,可以命名一个变量用以装载配置:

// config 变量 :配置精灵和播放器
const config = {
	// 1. 精灵
	sprite: {
		number: 200, // 粒子数量(正整数)
		scale: 0.4, // 原始缩放(正数浮点数),支持用数组表达xyz轴缩放系数,如 : [1, 1, 0.5],
		// 纹理贴图(要求是同源或支持跨域数据解析的图片)
		pic: 'https://638183.freep.cn/638183/small/hdxk.png',
		rotation: [30, 30, 30] // 精灵组在xyz轴上自转速度的除数(大于0的正整数)
	},
	// 2. 播放器
	mesh: {
		// 纹理贴图(要求是同源或支持跨域数据解析的图片)
		pic: 'https://638183.freep.cn/638183/small/2025/fl101.png', 
		color: 0x00ffee, // 叠加到贴图颜色的颜色
		transparent: true, // 开启透明(false为不开启)
		position: [0, 0, 0], // 播放器位置(正负浮点数)
		// 初始自转xyz轴上的角度(正负浮点数或 Math.PI / N 的表达式)
		rotate: [0, 0, 0],
		// 播放器在xyz轴上旋转速度的乘数(正负浮点数)
		rotation: [0.5, -0.5, 0]
	}
};
// 加入第二个参数
LZ(papa, config);
	

如果需要在帖子中绘制另外的 ThreeJS 图形,在运行 LZ() 函数后,使用标准的 ThreeJS 代码规范即可实现,例如,绘制一个矩形——

const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshNormalMaterial();
const cube = new THREE.Mesh(geometry, material);
cube.rotateX(Math.PI / 4);
cube.position.set(0, -2.5, 2);
scene.add(cube);
	

三、其它配置

模块提供有全屏切换功能,通过按钮操作,按钮 id="btnFs",自设有基本样式,但需要在帖子CSS代码至少自定义位置、文本颜色等,可以这样——

/* 全屏按钮CSS代码 */
#btnFs { left: 48%; bottom: 20px; color: #eee; }
	

此外,模块支持对 video 视频的管理,视频标签需要放在帖子内。

而最重要的是 audio 音频,没有它,精灵粒子系统将不会运行。音频标签可以放在帖子内外,模块只认第一个出现的 audio 标签。

【附】应用代码示例

<style>
	#tz { margin: 30px 0; left: 50%; transform: translateX(-50%);  width: clamp(600px, 90vw, 1400px); height: auto; aspect-ratio: 16/9; background: url('https://638183.freep.cn/638183/t24/w4/hero.webp') no-repeat center/cover; box-shadow: 2px 2px 8px #000; display: grid; place-items: center; z-index: 1; position: relative; }
	#btnFs { bottom: 20px; color: #eee; }
	#tz > canvas { position: absolute; left: 0; top: 0; right: 0; bottom: 0; display: block; }
</style>

<div id="tz"></div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=36586597" autoplay loop></audio>

<script type="module">
	import { THREE, scene, camera, renderer, clock, LZ } from 'https://638183.freep.cn/638183/web/ku/spriteparticle.js';

	const config = {
		sprite: {
			number: 200,
			scale: 0.4,
			pic: 'https://638183.freep.cn/638183/small/hdxk.png',
			rotation: [30, 30, 30]
		},
		mesh: {
			pic: 'https://638183.freep.cn/638183/small/2025/fl101.png',
			color: 0x00ffee,
			transparent: true,
			position: [0, 2, 0],
			rotate: [0, 0, -Math.PI / 2],
			rotation: [0.5, -0.5, 0]
		}
	};

	LZ(tz, config);

	const geometry = new THREE.BoxGeometry();
	const material = new THREE.MeshNormalMaterial();
	const cube = new THREE.Mesh(geometry, material);
	cube.rotateX(Math.PI / 4);
	cube.position.set(0, -2.5, 2.05);
	scene.add(cube);
</script>
	

前一篇: mp3player单曲js模块v1版本文档
下一篇: 没有了

发表评论:

       

评论列表 [1条]

#1 | 飞飞 于 2025-6-13 15:17 发布: 乐一个,说明书还是正版的好看

Copyright © 2023 All Right Reserved 马黑PHP文章管理整站系统v1.8
联系我们: gxblk@163.com