Minimal bass
本帖最后由 马黑黑 于 2025-2-17 12:20 编辑 <br /><br /><style>#papa { --state: running; --showbackface: visible; margin: 30px 0 30px calc(50% - 721px); width: 1280px; height: 720px; background: url('https://638183.freep.cn/638183/t24/5/R-C_result.jpg') no-repeat center/cover; box-shadow: 2px 2px 8px rgba(0,0,0,.5); perspective: 4000px; z-index: 1; position: relative; }
#papa:hover #backface { display: inline-block; }
#mplayer { position: absolute; right: 330px; top: 120px; width: 260px; height: 450px; transform-style: preserve-3d; display: grid;place-item: center; animation: rot 20s linear infinite var(--state); }
#mplayer:hover { --state: paused; }
.image { position: absolute; width: 100%; height: 100%; border-radius: 8px; filter: drop-shadow(2px 2px 20px #000); cursor: pointer; transition: .7s; backface-visibility: var(--showbackface); transform: rotateY(var(--deg)) translateZ(300px); }
.image:hover { transform: rotateY(var(--deg)) translateZ(300px) scale(1.2); }
#backface { position: absolute; bottom: 50px; right: 400px; border-radius: 6px; cursor: pointer; display: none; }
@keyframes rot { to { transform: rotateY(360deg); } }
</style>
<div id="papa">
<div id="mplayer"></div>
<input id="backface" type="button" value="隐藏背面" />
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=1859982992" autoplay loop></audio>
</div>
<script>
var mState = () => {
papa.style.setProperty('--state', aud.paused ? 'paused' : 'running');
mplayer.title = aud.paused ? '点击播放' : '点击暂停';
};
var pics = [
'https://638183.freep.cn/638183/t24/biu/ji01.jpg',
'https://638183.freep.cn/638183/t24/biu/ji02.jpg',
'https://638183.freep.cn/638183/t24/biu/ji03.jpg',
'https://638183.freep.cn/638183/t24/biu/ji04.jpg',
'https://638183.freep.cn/638183/t24/biu/ji05.jpg',
'https://638183.freep.cn/638183/t24/biu/ji06.jpg',
];
Array.from({length: pics.length}).forEach((img,key) => {
img = document.createElement('img');
img.className = 'image';
img.style.cssText += `--deg: ${key * 360 / pics.length}deg`;
img.src = pics;
mplayer.appendChild(img);
});
aud.onpause = aud.onplaying = () => mState();
mplayer.onclick = () => aud.paused ? aud.play() : aud.pause();
backface.onclick = () => {
if(backface.value === '隐藏背面') {
papa.style.setProperty('--showbackface', 'hidden');
backface.value = '显示背面';
}else{
papa.style.setProperty('--showbackface', 'visible');
backface.value = '隐藏背面';
}
};
papa.scrollIntoView(true);
</script> 本帖最后由 马黑黑 于 2025-2-17 12:21 编辑
帖子代码
<style>
#papa { --state: running; --showbackface: visible; margin: 30px 0 30px calc(50% - 721px); width: 1280px; height: 720px; background: url('https://638183.freep.cn/638183/t24/5/R-C_result.jpg') no-repeat center/cover; box-shadow: 2px 2px 8px rgba(0,0,0,.5); perspective: 4000px; z-index: 1; position: relative; }
#papa:hover #backface { display: inline-block; }
#mplayer { position: absolute; right: 330px; top: 120px; width: 260px; height: 450px; transform-style: preserve-3d; display: grid;place-item: center; animation: rot 20s linear infinite var(--state); }
#mplayer:hover { --state: paused; }
.image { position: absolute; width: 100%; height: 100%; border-radius: 8px; filter: drop-shadow(2px 2px 20px #000); cursor: pointer; transition: .7s; backface-visibility: var(--showbackface); transform: rotateY(var(--deg)) translateZ(300px); }
.image:hover { transform: rotateY(var(--deg)) translateZ(300px) scale(1.2); }
#backface { position: absolute; bottom: 50px; right: 400px; border-radius: 6px; cursor: pointer; display: none; }
@keyframes rot { to { transform: rotateY(360deg); } }
</style>
<div id="papa">
<div id="mplayer"></div>
<input id="backface" type="button" value="隐藏背面" />
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=1859982992" autoplay loop></audio>
</div>
<script>
var mState = () => {
papa.style.setProperty('--state', aud.paused ? 'paused' : 'running');
mplayer.title = aud.paused ? '点击播放' : '点击暂停';
};
var pics = [
'https://638183.freep.cn/638183/t24/biu/ji01.jpg',
'https://638183.freep.cn/638183/t24/biu/ji02.jpg',
'https://638183.freep.cn/638183/t24/biu/ji03.jpg',
'https://638183.freep.cn/638183/t24/biu/ji04.jpg',
'https://638183.freep.cn/638183/t24/biu/ji05.jpg',
'https://638183.freep.cn/638183/t24/biu/ji06.jpg',
];
Array.from({length: pics.length}).forEach((img,key) => {
img = document.createElement('img');
img.className = 'image';
img.style.cssText += `--deg: ${key * 360 / pics.length}deg`;
img.src = pics;
mplayer.appendChild(img);
});
aud.onpause = aud.onplaying = () => mState();
mplayer.onclick = () => aud.paused ? aud.play() : aud.pause();
backface.onclick = () => {
if(backface.value === '隐藏背面') {
papa.style.setProperty('--showbackface', 'hidden');
backface.value = '显示背面';
}else{
papa.style.setProperty('--showbackface', 'visible');
backface.value = '隐藏背面';
}
};
papa.scrollIntoView(true);
</script>
相关说明:CSS 3d属性:backface-visibility - 马黑黑教程专版 - 花潮论坛 - Powered by Discuz! 这版更加动感十足,欣赏学习咯~~{:4_190:} 哦,原来隐藏背面就变得什么都没有了,还以为是白板呢,原来直接就变透明了{:4_173:} 鼠标触碰时变大,只有点击时才是暂停{:4_204:} 还可以金屋藏娇{:4_189:} 会旋转美女的真漂亮,学习了! 梦江南 发表于 2025-2-17 15:46
会旋转美女的真漂亮,学习了!
{:4_190:} 朵拉 发表于 2025-2-17 12:29
这版更加动感十足,欣赏学习咯~~
{:4_190:} 樵歌 发表于 2025-2-17 13:23
还可以金屋藏娇
{:4_172:} 红影 发表于 2025-2-17 12:59
哦,原来隐藏背面就变得什么都没有了,还以为是白板呢,原来直接就变透明了
有实例比较好理解 红影 发表于 2025-2-17 13:00
鼠标触碰时变大,只有点击时才是暂停
指针交互有两种情形:CSS层面的,JS层面的,后者能做的更多 马黑黑 发表于 2025-2-17 18:24
有实例比较好理解
是的,这比说了多少都更有用{:4_187:} 马黑黑 发表于 2025-2-17 18:25
指针交互有两种情形:CSS层面的,JS层面的,后者能做的更多
js很强大,只是还不太适应它{:4_173:} 红影 发表于 2025-2-17 19:49
js很强大,只是还不太适应它
编程嘛,需要记住和理解它的语法,它的变量,它的函数,它的API,等等等等 红影 发表于 2025-2-17 19:49
是的,这比说了多少都更有用
但是,说是非常有必要的 看到贴子的时候就被这个效果惊艳到了,
特别想说这种卡片按角度转动以前在绘声绘影视频软件里出现过,
现在用代码整出来的效果是真是完全不输专业视频软件~~
代码是真的够强大。。厉害 卡片尺寸比例看上去相当舒适,
圆角设计,还有触碰放大,触碰出现隐藏按纽,触碰出现播放暂停提示,细节满满。。。
加上养眼的背景,视觉感和体验感特别好~{:4_173:} 音乐轻快,节奏感强,适配画面旋转。怪好听的。。