马黑黑 发表于 2023-2-25 08:23

美人思|思美人(to樵歌)

<style>
#papa {
        margin: -80px 0 0 calc(50% - 593px);
        width: 1024px;
        height: 640px;
        background: lightblue url('https://638183.freep.cn/638183/t23/webp/mwrfsi2.webp') no-repeat center/cover;
        box-shadow: 3px 3px 20px #000;
        position: relative;
        user-select: none;
        z-index: 1;
        --state: paused;
        --opa: 1;
}
#papa::before, #papa::after {
        position: absolute;
        content: '';
        width: 50%;
        height: 100%;
        background: url('https://638183.freep.cn/638183/t23/webp/mwrfsi1.webp') no-repeat center/cover;
        opacity: var(--opa);
        transition: opacity 1.2s;
}
#papa::after { left: 50%; transform: rotateY(180deg); }
#papa:hover { --opa: 0; }
#papa:fullscreen { animation: flash 8s linear infinite alternate; }
#fly {
        position: absolute;
        left: 50%;
        width: 360px;
        height: 200px;
        animation: fly 100s infinite alternate var(--state);
}
.mplayer {
        --tt: 6s;
        position: absolute;
        left: 0;
        width: 200px;
        height: 200px;
        border-radius: 50%;
        transform: perspective(1000px) rotateX(45deg) rotateY(30deg);
        animation: rot var(--tt) linear infinite var(--state);
        cursor: pointer;
        transition: .45s;
        z-index: 2;
}
.mplayer:hover { filter: drop-shadow(0 0 80px snow) brightness(200%); }
.mplayer:nth-of-type(2) {
        --tt: 4s;
        left: 210px;
        width: 150px;
        height: 150px;
}
.mplayer:nth-of-type(3) {
        --tt: 2s;
        left: 130px;
        width: 100px;
        height: 100px;
}
@keyframes rot { to { transform: perspective(1000px) rotateX(45deg) rotateY(30deg) rotateZ(360deg); } }
@keyframes fly { to { left: calc(100% - 360px); } }
@keyframes flash { from { --opa: 1; } to { --opa: 0; } }
</style>

<div id="papa">
        <div id="fly">
                <img class="mplayer" src="https://638183.freep.cn/638183/t23/1/toui.png" alt="" />
                <img class="mplayer" src="https://638183.freep.cn/638183/t23/1/toui.png" alt="" />
                <img class="mplayer" src="https://638183.freep.cn/638183/t23/1/toui.png" alt="" />
        </div>
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=1335968349.mp3" loop autoplay></audio>

<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 = () => papa.style.setProperty('--state', aud.paused ? 'paused' : 'running');
        let btns = document.querySelectorAll('.mplayer');
        [...btns].forEach((item) => item.onclick = () => aud.paused ? aud.play() : aud.pause());
        aud.addEventListener('play', () => mState());
        aud.addEventListener('pause', () => mState());
        FS({
                pa:papa,
                set:'right: 20px; bottom: 20px; background: transparent; color: snow; border: 2px solid snow;',
        });
        aud.onerror = () => {
                if(aud.error.code === 4) aud.src = 'http://www.kumeiwp.com/sub/filestores/2023/02/24/e2bf972fc421ee7cde43dcb8e2338ddd.mp3';
        }
})();
</script>

马黑黑 发表于 2023-2-25 08:25

帖子完整代码
<style>
#papa {
        margin: -80px 0 0 calc(50% - 593px);
        width: 1024px;
        height: 640px;
        background: lightblue url('https://638183.freep.cn/638183/t23/webp/mwrfsi2.webp') no-repeat center/cover;
        box-shadow: 3px 3px 20px #000;
        position: relative;
        user-select: none;
        z-index: 1;
        --state: paused;
        --opa: 1;
}
#papa::before, #papa::after {
        position: absolute;
        content: '';
        width: 50%;
        height: 100%;
        background: url('https://638183.freep.cn/638183/t23/webp/mwrfsi1.webp') no-repeat center/cover;
        opacity: var(--opa);
        transition: opacity 1.2s;
}
#papa::after { left: 50%; transform: rotateY(180deg); }
#papa:hover { --opa: 0; }
#papa:fullscreen { animation: flash 8s linear infinite alternate; }
#fly {
        position: absolute;
        left: 50%;
        width: 360px;
        height: 200px;
        animation: fly 100s infinite alternate var(--state);
}
.mplayer {
        --tt: 6s;
        position: absolute;
        left: 0;
        width: 200px;
        height: 200px;
        border-radius: 50%;
        transform: perspective(1000px) rotateX(45deg) rotateY(30deg);
        animation: rot var(--tt) linear infinite var(--state);
        cursor: pointer;
        transition: .45s;
        z-index: 2;
}
.mplayer:hover { filter: drop-shadow(0 0 80px snow) brightness(200%); }
.mplayer:nth-of-type(2) {
        --tt: 4s;
        left: 210px;
        width: 150px;
        height: 150px;
}
.mplayer:nth-of-type(3) {
        --tt: 2s;
        left: 130px;
        width: 100px;
        height: 100px;
}
@keyframes rot { to { transform: perspective(1000px) rotateX(45deg) rotateY(30deg) rotateZ(360deg); } }
@keyframes fly { to { left: calc(100% - 360px); } }
@keyframes flash { from { --opa: 1; } to { --opa: 0; } }
</style>

<div id="papa">
        <div id="fly">
                <img class="mplayer" src="https://638183.freep.cn/638183/t23/1/toui.png" alt="" />
                <img class="mplayer" src="https://638183.freep.cn/638183/t23/1/toui.png" alt="" />
                <img class="mplayer" src="https://638183.freep.cn/638183/t23/1/toui.png" alt="" />
        </div>
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=1335968349.mp3" loop autoplay></audio>

<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 = () => papa.style.setProperty('--state', aud.paused ? 'paused' : 'running');
        let btns = document.querySelectorAll('.mplayer');
        [...btns].forEach((item) => item.onclick = () => aud.paused ? aud.play() : aud.pause());
        aud.addEventListener('play', () => mState());
        aud.addEventListener('pause', () => mState());
        FS({
                pa:papa,
                set:'right: 20px; bottom: 20px; background: transparent; color: snow; border: 2px solid snow;',
        });
        aud.onerror = () => {
                if(aud.error.code === 4) aud.src = 'http://www.kumeiwp.com/sub/filestores/2023/02/24/e2bf972fc421ee7cde43dcb8e2338ddd.mp3';
        }
})();
</script>

马黑黑 发表于 2023-2-25 08:39

帖子使用的音乐,主音乐地址曲名《美人思》,备用音乐地址曲名《思美人》。

帖子构思:

#papa 选择器背景图片是美人图,两个伪元素 #papa::before 和 #papa::after 是同一张花瀑布图,::after 伪元素沿Y轴旋转180度,构成无缝的瀑帘。然后使用 opacity 属性,令伪元素: ① 常规模式下,鼠标指针滑过时 opacity 值渐变为 0 ,达到美女暴露的目的;② 全屏模式下,间隔一定秒数,花瀑帘和美女来回切换。

实现全屏模式下的特效,使用的是伪类 :fullscreen 选择器,虽然该属性仍在发展中,各大浏览器对它的支持还是不错的,但不知何因,在 Firefox 浏览器中,全屏模式下CSS变量 --opa 的变化无法传递给伪元素,所以在火狐浏览器中全屏下美女和花瀑布帘幕的切换无效。经查,也经过测试,Firefox 支持 :fullscreen 伪类选择器。

曾考虑使用JS完成切换工作,这应该是可以的,不过使用 Firefox 的人不多,想想就算了。

马黑黑 发表于 2023-2-25 08:41

顺便提一下:播放控制器的物件,是菇凉的头饰,飞出来了{:4_170:}

庶民 发表于 2023-2-25 09:29

太漂亮了,让我们在欣赏的同时得到一种享受。

海笑 发表于 2023-2-25 09:41

欣赏老师佳作!

马黑黑 发表于 2023-2-25 09:45

海笑 发表于 2023-2-25 09:41
欣赏老师佳作!

感谢支持

马黑黑 发表于 2023-2-25 09:45

庶民 发表于 2023-2-25 09:29
太漂亮了,让我们在欣赏的同时得到一种享受。

感谢支持。早上好。

梦缘 发表于 2023-2-25 09:46

好有趣的风轮,欣赏老师的精彩分享!{:4_204:}

马黑黑 发表于 2023-2-25 09:47

梦缘 发表于 2023-2-25 09:46
好有趣的风轮,欣赏老师的精彩分享!

是菇凉头饰{:5_106:}

梦缘 发表于 2023-2-25 09:47

悠扬的旋律,欣赏问好!{:4_185:}

梦缘 发表于 2023-2-25 09:50

马黑黑 发表于 2023-2-25 09:47
是菇凉头饰

奥,真没注意啊!{:4_203:}

红影 发表于 2023-2-25 09:57

鼠标移开,姑娘就不见了,你让樵歌情何以堪{:4_173:}

红影 发表于 2023-2-25 10:00

马黑黑 发表于 2023-2-25 08:41
顺便提一下:播放控制器的物件,是菇凉的头饰,飞出来了

伪类 :fullscreen 选择器,这个还是头一次看到。
全屏下鼠标无法操作,黑黑为了让樵歌看到姑娘,还真是花了功夫,全屏下也能自动切换呢{:4_172:}

红影 发表于 2023-2-25 10:02

马黑黑 发表于 2023-2-25 08:41
顺便提一下:播放控制器的物件,是菇凉的头饰,飞出来了

姑娘的头饰飞到花瀑布图外面了,樵歌要抓到头饰,并打开花瀑布,才能见到姑娘。咋跟入洞房前的考验似的呢{:4_189:}

马黑黑 发表于 2023-2-25 10:28

红影 发表于 2023-2-25 10:02
姑娘的头饰飞到花瀑布图外面了,樵歌要抓到头饰,并打开花瀑布,才能见到姑娘。咋跟入洞房前的考验似的呢 ...

入洞房?想多了

马黑黑 发表于 2023-2-25 10:29

红影 发表于 2023-2-25 10:00
伪类 :fullscreen 选择器,这个还是头一次看到。
全屏下鼠标无法操作,黑黑为了让樵歌看到姑娘,还真是 ...

应该的应该的

马黑黑 发表于 2023-2-25 10:30

红影 发表于 2023-2-25 09:57
鼠标移开,姑娘就不见了,你让樵歌情何以堪

这你就不知道了。审美,是一个复杂的过程……天机不可泄露

马黑黑 发表于 2023-2-25 10:34

梦缘 发表于 2023-2-25 09:47
悠扬的旋律,欣赏问好!

{:4_180:}

马黑黑 发表于 2023-2-25 10:36

梦缘 发表于 2023-2-25 09:50
奥,真没注意啊!

画面太美,细节被忽略,正常现象。这大概和城里老太购买土鸡蛋、村里老太进城收购小鸡蛋一个道理{:4_170:}
页: [1] 2 3 4 5 6 7
查看完整版本: 美人思|思美人(to樵歌)