星系
<style>#papa { margin: -80px 0 0 calc(50% - 593px); width: 1024px; height: 640px; background: lightblue url('https://638183.freep.cn/638183/t23/1/xkxi.webp') center/cover no-repeat; box-shadow: 6px 3px 30px #000; position: relative; display: grid; place-items: center; z-index: 1; }
#mplayer { width: 100px; height: 100px; border-radius: 50%; background: lightblue; box-shadow: 5px 5px 30px black inset; cursor: pointer; animation: rot2d 8s infinite linear var(--state); position: absolute; transition: box-shadow .6s; --state: running; }
#mplayer::before, #mplayer::after { position: absolute; content: ''; top: -50px; right: -50px; bottom: -50px; left: -50px; border: 6px dotted snow; border-radius: inherit; transform: perspective(1000px) rotateY(45deg) rotateX(15deg); animation: rot3d 10s infinite linear; --angle: 360deg; }
#mplayer:hover { box-shadow: 5px 5px 60px blue inset; }
#mplayer::after { top: -60px; right: -60px; bottom: -60px; left: -60px; --angle: -1080deg; }
#papa:fullscreen #mplayer { width: 150px; height: 150px; }
#papa:fullscreen #mplayer::before { top: -70px; right: -70px; bottom: -70px; left: -70px; }
#papa:fullscreen #mplayer::after { top: -80px; right: -80px; bottom: -80px; left: -80px; }
@keyframes rot2d { to { transform: rotate(360deg); } }
@keyframes rot3d { to { transform: perspective(1000px) rotateY(45deg) rotateX(15deg) rotateZ(var(--angle)); } }
</style>
<div id="papa">
<div id="mplayer"></div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=1939229183" autoplay loop></audio>
</div>
<script>
(function() {
(function(mkFS) {let setFullScreen = (user_set) => {let pa = user_set.pa;if(typeof(pa) !== 'object') return false;if(!user_set.set) user_set.set = 'color: snow; background: black; border: 2px solid snow; left: 40px; bottom: 40px;';btnMsg = document.createElement('span');btnMsg.style.cssText = `position: absolute; border-radius: 8px; padding: 4px; cursor: pointer; z-index:998; ${user_set.set}`;btnMsg.innerText = '全屏观赏';btnMsg.style.display = 'none';pa.appendChild(btnMsg);let timerId, fs = false;btnMsg.onclick = () => fs ? document.exitFullscreen() : pa.requestFullscreen();pa.addEventListener('mousemove', (e) => {clearTimeout(timerId);btnMsg.style.display = 'block';timerId = setTimeout('btnMsg.style.display = "none"', 3000);});document.addEventListener('fullscreenchange', () => {if (document.fullscreenElement !== null) {fs = true;btnMsg.innerText = '退出全屏';} else {fs = false;btnMsg.innerText = '全屏观赏';}});};mkFS.FS = setFullScreen;})(this);
let mState = () => mplayer.style.setProperty('--state', aud.paused ? 'pasued' : 'running');
aud.addEventListener('play', () => mState());
aud.addEventListener('pause', () => mState());
mplayer.addEventListener('click', () => aud.paused ? aud.play() : aud.pause());
FS({pa: papa, set: 'color: snow; background: none; border: 2px solid snow; bottom: 20px;'});
})();
</script>
帖子代码
<style>
#papa { margin: -80px 0 0 calc(50% - 593px); width: 1024px; height: 640px; background: lightblue url('https://638183.freep.cn/638183/t23/1/xkxi.webp') center/cover no-repeat; box-shadow: 6px 3px 30px #000; position: relative; display: grid; place-items: center; z-index: 1; }
#mplayer { width: 100px; height: 100px; border-radius: 50%; background: lightblue; box-shadow: 5px 5px 30px black inset; cursor: pointer; animation: rot2d 8s infinite linear var(--state); position: absolute; transition: box-shadow .6s; --state: running; }
#mplayer::before, #mplayer::after { position: absolute; content: ''; top: -50px; right: -50px; bottom: -50px; left: -50px; border: 6px dotted snow; border-radius: inherit; transform: perspective(1000px) rotateY(45deg) rotateX(15deg); animation: rot3d 10s infinite linear; --angle: 360deg; }
#mplayer:hover { box-shadow: 5px 5px 60px blue inset; }
#mplayer::after { top: -60px; right: -60px; bottom: -60px; left: -60px; --angle: -1080deg; }
#papa:fullscreen #mplayer { width: 150px; height: 150px; }
#papa:fullscreen #mplayer::before { top: -70px; right: -70px; bottom: -70px; left: -70px; }
#papa:fullscreen #mplayer::after { top: -80px; right: -80px; bottom: -80px; left: -80px; }
@keyframes rot2d { to { transform: rotate(360deg); } }
@keyframes rot3d { to { transform: perspective(1000px) rotateY(45deg) rotateX(15deg) rotateZ(var(--angle)); } }
</style>
<div id="papa">
<div id="mplayer"></div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=1939229183" autoplay loop></audio>
</div>
<script>
(function() {
(function(mkFS) {let setFullScreen = (user_set) => {let pa = user_set.pa;if(typeof(pa) !== 'object') return false;if(!user_set.set) user_set.set = 'color: snow; background: black; border: 2px solid snow; left: 40px; bottom: 40px;';btnMsg = document.createElement('span');btnMsg.style.cssText = `position: absolute; border-radius: 8px; padding: 4px; cursor: pointer; z-index:998; ${user_set.set}`;btnMsg.innerText = '全屏观赏';btnMsg.style.display = 'none';pa.appendChild(btnMsg);let timerId, fs = false;btnMsg.onclick = () => fs ? document.exitFullscreen() : pa.requestFullscreen();pa.addEventListener('mousemove', (e) => {clearTimeout(timerId);btnMsg.style.display = 'block';timerId = setTimeout('btnMsg.style.display = "none"', 3000);});document.addEventListener('fullscreenchange', () => {if (document.fullscreenElement !== null) {fs = true;btnMsg.innerText = '退出全屏';} else {fs = false;btnMsg.innerText = '全屏观赏';}});};mkFS.FS = setFullScreen;})(this);
let mState = () => mplayer.style.setProperty('--state', aud.paused ? 'pasued' : 'running');
aud.addEventListener('play', () => mState());
aud.addEventListener('pause', () => mState());
mplayer.addEventListener('click', () => aud.paused ? aud.play() : aud.pause());
FS({pa: papa, set: 'color: snow; background: none; border: 2px solid snow; bottom: 20px;'});
})();
</script>若需要分行源码,以及希望全屏插件独立剥离,请参阅 → 《星系》源码 (52qingyin.cn)
本帖的设计在之前相关帖子基础上有新的尝试:
① 播放控制器在窗口模式与全屏模式间切换时拥有尺寸自响应能力;
② 通过播放控制器主元素的自转带动伪元素的3d旋转。
其中,尝试 ② 有缺陷:3d转换由于受到主元素2d旋转的惯性影响,音乐暂停时不能完美保持它们的3d面,有一些偏差。如果伪元素也停止自转,情况会更糟糕,所以音乐暂停时保留伪元素的自转状态。transform多重应用问题颇多,感觉 transform 的机制需要改进。 3d旋转的面的变化, @绿叶清舟 无意中率先使用过。尝试能出新意。 可以空间三维旋转的,这个有意思,暂停的时候空间不旋转了,可是平面上还是在旋转的呢{:4_187:} 马黑黑 发表于 2023-3-12 08:58
帖子代码
若需要分行源码,以及希望全屏插件独立剥离,请参阅 → 《星系》源码 (52qingyin.cn)
跟着链接发现一个网站呢,是悄然的?{:4_173:} 黑黑又带来改进版新效果{:4_187:} 红影 发表于 2023-3-12 10:19
可以空间三维旋转的,这个有意思,暂停的时候空间不旋转了,可是平面上还是在旋转的呢
解释过的解释过的 红影 发表于 2023-3-12 10:20
跟着链接发现一个网站呢,是悄然的?
对{:4_181:}
之前就做过,后来停摆,现在又继续 红影 发表于 2023-3-12 10:24
黑黑又带来改进版新效果
其实开始做的时候就有这个效果,后来想想先留着,粥粥聪明,先做出来了,我就一直拖着 马黑黑 发表于 2023-3-12 09:16
3d旋转的面的变化, @绿叶清舟 无意中率先使用过。尝试能出新意。
这样二个可以分开控制了吧 效果很好。{:4_199:} 梦油 发表于 2023-3-12 11:20
效果很好。
感谢支持 绿叶清舟 发表于 2023-3-12 11:00
这样二个可以分开控制了吧
可以的 这个好像是双效果的,我都看了许久。。。。 马黑黑 发表于 2023-3-12 11:43
感谢支持
别客气。 去了你的地盘看见这么多的作品,好厉害的{:4_178:} 小辣椒 发表于 2023-3-12 14:49
去了你的地盘看见这么多的作品,好厉害的
不是我的地盘 梦油 发表于 2023-3-12 14:22
别客气。
应该的{:5_117:} 小辣椒 发表于 2023-3-12 14:16
这个好像是双效果的,我都看了许久。。。。
不知道好不好看