Malfunction
<style>#tz { --state: running; margin: 30px 0; left: calc(50% - 81px); transform: translateX(-50%); width: clamp(600px, 90vw, 1400px); min-height: 80vh; aspect-ratio: 16/9; background: url('https://ts1.tc.mm.bing.net/th/id/R-C.c93abfd269ff10b63b99a124e7d093eb?rik=aEBnY3MFXu3WeA&riu=http%3a%2f%2fimage.woshipm.com%2fwp-files%2f2016%2f04%2f1756b215a1834ac2a831020e54884853.jpg&ehk=eYUtfBohsFX2U8bPPVAMqUit14EXFHJEG2UGcktktrk%3d&risl=&pid=ImgRaw&r=0') 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; text-align: center; }
#btnFs:hover { color: red; }
#vid {position: absolute; width: 100%; height: 100%; object-fit: cover; mask: radial-gradient(transparent 20%, red); -webkit-mask: radial-gradient(transparent 20%, red); pointer-events: none; }
</style>
<div id="tz">
<audio id="player" src="https://music.163.com/song/media/outer/url?id=423314145" autoplay loop></audio>
<video id="vid" src="https://bpic.588ku.com/video_listen/588ku_video/25/03/10/15/53/06/video67ce9a62ce8b9.mp4" autoplay loop muted></video>
</div>
<script type="module">
import * as THREE from 'https://638183.freep.cn/638183/web/ku/three.module.min.js';
import { FS } from 'https://638183.freep.cn/638183/web/ku/FS.js';
var scene = new THREE.Scene;
var clock = new THREE.Clock(), pointer = new THREE.Vector2(), raycaster = new THREE.Raycaster();
var camera = new THREE.PerspectiveCamera(45, tz.offsetWidth / tz.offsetHeight, 0.1, 1000);
camera.position.set(0, 0.2, 5);
var renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
renderer.setSize(tz.offsetWidth, tz.offsetHeight);
tz.appendChild(renderer.domElement);
var mesh = new THREE.Mesh(
new THREE.LatheGeometry(),
new THREE.MeshBasicMaterial({ wireframe: true })
);
mesh.rotateX(-0.1);
var son = new THREE.Mesh(
new THREE.LatheGeometry(),
new THREE.MeshBasicMaterial({ color: 0x071931, side: THREE.DoubleSide, transparent: true, opacity: .65 })
);
mesh.add(son);
scene.add(mesh);
var is3Obj = (event, obj) => {
pointer.x = (event.clientX / window.innerWidth) * 2 - 1;
pointer.y = - (event.clientY / window.innerHeight) * 2 + 1;
raycaster.setFromCamera(pointer, camera);
var intersects = raycaster.intersectObjects(obj, true);
return intersects.length > 0
}
var animate = () => {
requestAnimationFrame(animate);
var delta = clock.getDelta();
mesh.rotation.y -= delta;
renderer.render(scene, camera);
};
window.onresize = () => {
camera.aspect = tz.offsetWidth / tz.offsetHeight;
camera.updateProjectionMatrix();
renderer.setSize(tz.offsetWidth, tz.offsetHeight);
}
tz.onclick = (e) => {
if (!is3Obj(e, )) return;
player.paused ? player.play() : player.pause();
};
player.onpause = player.onplaying = () => player.paused ? clock.stop() : clock.start();
tz.onmousemove = (e) => {
tz.title = is3Obj(e, ) ? '播放/暂停 Alt+X' : '';
tz.style.cursor = is3Obj(e, ) ? 'pointer' : 'default';
};
animate();
FS(tz, player);
</script>
帖子代码
<style>
#tz { --state: running; margin: 30px 0; left: calc(50% - 81px); transform: translateX(-50%); width: clamp(600px, 90vw, 1400px); min-height: 80vh; aspect-ratio: 16/9; background: url('https://ts1.tc.mm.bing.net/th/id/R-C.c93abfd269ff10b63b99a124e7d093eb?rik=aEBnY3MFXu3WeA&riu=http%3a%2f%2fimage.woshipm.com%2fwp-files%2f2016%2f04%2f1756b215a1834ac2a831020e54884853.jpg&ehk=eYUtfBohsFX2U8bPPVAMqUit14EXFHJEG2UGcktktrk%3d&risl=&pid=ImgRaw&r=0') 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; text-align: center; }
#btnFs:hover { color: red; }
#vid {position: absolute; width: 100%; height: 100%; object-fit: cover; mask: radial-gradient(transparent 20%, red); -webkit-mask: radial-gradient(transparent 20%, red); pointer-events: none; }
</style>
<div id="tz">
<audio id="player" src="https://music.163.com/song/media/outer/url?id=423314145" autoplay loop></audio>
<video id="vid" src="https://bpic.588ku.com/video_listen/588ku_video/25/03/10/15/53/06/video67ce9a62ce8b9.mp4" autoplay loop muted></video>
</div>
<script type="module">
import * as THREE from 'https://638183.freep.cn/638183/web/ku/three.module.min.js';
import { FS } from 'https://638183.freep.cn/638183/web/ku/FS.js';
var scene = new THREE.Scene;
var clock = new THREE.Clock(), pointer = new THREE.Vector2(), raycaster = new THREE.Raycaster();
var camera = new THREE.PerspectiveCamera(45, tz.offsetWidth / tz.offsetHeight, 0.1, 1000);
camera.position.set(0, 0.2, 5);
var renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
renderer.setSize(tz.offsetWidth, tz.offsetHeight);
tz.appendChild(renderer.domElement);
var mesh = new THREE.Mesh(
new THREE.LatheGeometry(),
new THREE.MeshBasicMaterial({ wireframe: true })
);
mesh.rotateX(-0.1);
var son = new THREE.Mesh(
new THREE.LatheGeometry(),
new THREE.MeshBasicMaterial({ color: 0x071931, side: THREE.DoubleSide, transparent: true, opacity: .65 })
);
mesh.add(son);
scene.add(mesh);
var is3Obj = (event, obj) => {
pointer.x = (event.clientX / window.innerWidth) * 2 - 1;
pointer.y = - (event.clientY / window.innerHeight) * 2 + 1;
raycaster.setFromCamera(pointer, camera);
var intersects = raycaster.intersectObjects(obj, true);
return intersects.length > 0
}
var animate = () => {
requestAnimationFrame(animate);
var delta = clock.getDelta();
mesh.rotation.y -= delta;
renderer.render(scene, camera);
};
window.onresize = () => {
camera.aspect = tz.offsetWidth / tz.offsetHeight;
camera.updateProjectionMatrix();
renderer.setSize(tz.offsetWidth, tz.offsetHeight);
}
tz.onclick = (e) => {
if (!is3Obj(e, )) return;
player.paused ? player.play() : player.pause();
};
player.onpause = player.onplaying = () => player.paused ? clock.stop() : clock.start();
tz.onmousemove = (e) => {
tz.title = is3Obj(e, ) ? '播放/暂停 Alt+X' : '';
tz.style.cursor = is3Obj(e, ) ? 'pointer' : 'default';
};
animate();
FS(tz, player);
</script>
本帖图片未上传到我的网盘。
帖子使用车削缓冲几何体默认参数制作播放器。关于车削缓冲几何体,稍后另发帖介绍 原来这个叫车削缓冲几何体,太漂亮了,跟钻石似的{:4_199:} 黑黑配的背景也很漂亮,充满科技感,十分震撼{:4_199:} 这个是先出效果后出说明啊,我赶紧去看看说明去{:4_187:} 这颜色搭得太漂亮了,下方转动的视频跟背景还有几何体完全一体,高级。。
视频找得好,开始还以为是两个。。 这个播放暂停是直接控制几何体的,没有另外设置小播。。。{:4_199:} 音乐有金属感。。。跟画面科技风很搭配完美 花飞飞 发表于 2025-5-20 22:04
音乐有金属感。。。跟画面科技风很搭配完美
谢谢 花飞飞 发表于 2025-5-20 22:04
这个播放暂停是直接控制几何体的,没有另外设置小播。。。
嗯嗯 马黑黑 发表于 2025-5-20 22:17
谢谢
{:4_190:}谢了就多喝一杯 马黑黑 发表于 2025-5-20 22:17
嗯嗯
两种解决方法,这种是无痕 花飞飞 发表于 2025-5-20 22:19
两种解决方法,这种是无痕
反正都有缺点 马黑黑 发表于 2025-5-20 22:19
反正都有缺点
能解决问题的都是完美。。没有缺点 欣赏老师精彩,代码技术厉害呀!给老师点赞{:4_199:} 菲儿 发表于 2025-5-21 17:20
欣赏老师精彩,代码技术厉害呀!给老师点赞
谢点 花飞飞 发表于 2025-5-20 22:49
能解决问题的都是完美。。没有缺点
我今天去研究了那个点击插件,天哪,个头并不比 three.js 核心库小。还要额外导入,罢罢 马黑黑 发表于 2025-5-21 19:28
我今天去研究了那个点击插件,天哪,个头并不比 three.js 核心库小。还要额外导入,罢罢
three.js 核心库啊,它这么逆天。。
刚看到你说不适合论坛,这么大看来别的地方也不怎么合适。。
导入,跟个程序软件差不多吧 花飞飞 发表于 2025-5-21 21:20
three.js 核心库啊,它这么逆天。。
刚看到你说不适合论坛,这么大看来别的地方也不怎么合适。。
导入 ...
别的地方没问题,就是论坛运行的东东本来就非常多,一个帖子的代码一般也不建议超过两百行