|
|

楼主 |
发表于 2025-5-3 17:40
|
显示全部楼层
帖子代码:
- <style>
- #papa { --state: running; margin: 30px 0; left: calc(50% - 81px); transform: translateX(-50%); width: clamp(600px, 90vw, 1600px); height: auto; aspect-ratio: 16/9; background: #000 url('https://638183.freep.cn/638183/small/tdks.jpg') no-repeat center/cover; box-shadow: 2px 2px 10px rgba(0,0,0,.65); z-index: 1; display: grid; place-items: center; position: relative; }
- #player { position: absolute; z-index: 9; clip-path: circle(45%); transition: filter .7s; cursor: pointer; animation: rot 10s linear infinite var(--state); }
- #player:hover { filter: hue-rotate(90deg); }
- #btnFs { bottom: 30px; color: #eee; }
- #btnFs:hover { color: red; }
- @keyframes rot { to { transform: rotate(360deg); } }
- </style>
- <div id="papa">
- <audio id="aud" src="https://music.163.com/song/media/outer/url?id=1393476199" autoplay loop></audio>
- <img id="player" src="https://638183.freep.cn/638183/small/mufuz2.jpg" width="10%" title="播放/暂停" />
- </div>
- <script type="importmap">
- {
- "imports": {
- "three": "https://esm.sh/three/build/three.webgpu.js",
- "three/tsl": "https://esm.sh/three@0.176.0/es2022/build/three.tsl.mjs"
- }
- }
- </script>
- <script type="module">
- import * as THREE from 'three';
- import {uniform, time, instanceIndex, instancedBufferAttribute} from 'three/tsl';
- import {FS} from 'https://638183.freep.cn/638183/web/ku/fscreen.js';
- let camera, scene, renderer, material;
- let mouseX = 0, mouseY = 0;
- let width = papa.offsetWidth, height = papa.offsetHeight;
- let windowHalfX = width / 2;
- let windowHalfY = height / 2;
- const init = () => {
- camera = new THREE.PerspectiveCamera(55, width / height, 2, 2000);
- camera.position.z = 1000;
- scene = new THREE.Scene();
- scene.fog = new THREE.FogExp2(0x000000, 0.001);
- const count = 6000;
- const positions = [];
- for (let i = 0; i < count; i ++) {
- positions.push( 2000 * Math.random() - 1000, 2000 * Math.random() - 1000, 2000 * Math.random() - 1000 );
- }
- const positionAttribute = new THREE.InstancedBufferAttribute(new Float32Array(positions), 3);
- const map = new THREE.TextureLoader().load('https://638183.freep.cn/638183/small/star.png');
- map.colorSpace = THREE.SRGBColorSpace;
- material = new THREE.SpriteNodeMaterial({sizeAttenuation: true, map, alphaMap: map, alphaTest: 0.1});
- material.color.setHSL(1.0, 0.3, 0.7, THREE.SRGBColorSpace);
- material.positionNode = instancedBufferAttribute(positionAttribute);
- material.rotationNode = time.add(instanceIndex).sin();
- material.scaleNode = uniform(15);
- const particles = new THREE.Sprite(material);
- particles.count = count;
- scene.add(particles);
- renderer = new THREE.WebGPURenderer();
- renderer.setPixelRatio(window.devicePixelRatio);
- renderer.setSize(width, height);
- renderer.setAnimationLoop(render);
- papa.appendChild(renderer.domElement);
- papa.style.touchAction = 'none';
- papa.addEventListener('pointermove', onPointerMove);
- window.addEventListener('resize', onWindowResize);
- };
- const onWindowResize = () => {
- width = papa.offsetWidth;
- height = papa.offsetHeight;
- windowHalfX = width / 2;
- windowHalfY = height / 2;
- camera.aspect = width / height;
- camera.updateProjectionMatrix();
- renderer.setSize(width, height);
- };
- const onPointerMove = (event) => {
- if (event.isPrimary === false) return;
- mouseX = event.clientX - windowHalfX;
- mouseY = event.clientY - windowHalfY;
- };
- const render = () => {
- const time = Date.now() * 0.00005;
- camera.position.x += (mouseX - camera.position.x) * 0.05;
- camera.position.y += (- mouseY - camera.position.y) * 0.05;
- camera.lookAt(scene.position);
- const h = ( 360 * (1.0 + time ) % 360) / 360;
- material.color.setHSL(h, 0.5, 0.5);
- renderer.render(scene, camera);
- };
- init();
- FS(papa, player);
- </script>
复制代码
|
评分
-
| 参与人数 2 | 威望 +80 |
金钱 +160 |
经验 +80 |
收起
理由
|
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
花飞飞
| + 30 |
+ 60 |
+ 30 |
很给力! |
查看全部评分
|