马黑黑 发表于 2022-6-30 07:41

梦中的恋人

<style>

.papa { left: -214px; width: 1024px; height: 640px; border-radius: 4px; border: 1px solid rgba(0,0,0,.5); overflow: hidden; position: relative; }
.papa::before { content: ''; right: 160px; top: 80px; width: 460px;height: 460px;background: #ccc; animation: rot 6s linear infinite alternate;border-radius: 50%;background: linear-gradient(65deg, black, tan, green, red); mask-image: radial-gradient(transparent 40%, #eee); -webkit-mask-image: radial-gradient(transparent 40%, #eee); position: absolute; }
.papa img { width: 100%; height: 100%; border-radius: inherit; }
.papa img:first-child { position: absolute; mix-blend-mode: multiply; }
.papa input { border: none; outline: none; opacity: .75; cursor: pointer; }
.papa p { margin: 0; padding: 0; }
.playbox { position: absolute; top: 10px; left: 10px; padding: 10px; width: fit-content; font: normal 1em sans-serif; color: tan; background: rgba(255,255,255,.25); backdrop-filter: blur(2px); overflow: hidden; box-shadow: 1px 2px 2px #000; text-shadow: 1px 1px 1px #000; z-index: 100; }
#btnplay { width: 30px; height: 30px; border-radius: 50%; }
#btnplay:hover { background: #aaa; color: #ff0000; }
@keyframes rot { to { transform: rotate(1turn) scale(1.5); } }

</style>

<div class="papa">
        <img src="https://638183.freep.cn/638183/t22/t8.jpg" alt = "" />
        <img src="https://638183.freep.cn/638183/t22/t7.jpg" alt = "" />
        <div class="playbox">
                <p id="geci" style="font-size: 1.2em">LRC Loading ... </p>
                <p style="display: flex; align-items: center; gap: 4px; margin-top: 10px;">
                        <input id="btnplay" type="button" value=">" />
                        <input id="slider" type="range" min="0" max="100" value="0" />
                        <span id="per">0:0 | 0:0</span>
                </p>
        </div>
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=41641783.mp3" autoplay="autoplay" loop="loop"></audio>

<script>
let papa = document.querySelector('.papa'),
        slider = document.querySelector('#slider'),
        aud = document.querySelector('#aud'),
        per = document.querySelector('#per'),
        btnplay = document.querySelector('#btnplay'),
        geci = document.querySelector('#geci');
let slip = 0;

let lrcAr = [
        ['0.01','梦中的恋人- 纯音乐'],
        ['30.00','作曲:曹思义'],
        ['100.05','所属专辑:星河'],
        ['280','音乐能带领我们找回过去']
];

slider.onmousedown = () => aud.pause();
slider.onchange = () => { aud.currentTime = slider.value * aud.duration / 100; aud.play(); }
btnplay.onclick = () => aud.paused ? aud.play() : aud.pause();
aud.addEventListener('playing', () => btnplay.value = '||');
aud.addEventListener('pause', () => btnplay.value = '>');

aud.addEventListener('timeupdate', () => {
        let prog = 100 * aud.currentTime / aud.duration;
        slider.value = prog;
        per.innerText = toMin(aud.currentTime) + ' | ' + toMin(aud.duration);
                for(j=0; j<lrcAr.length; j++){
                if(aud.currentTime >= lrcAr - slip){
                        geci.innerHTML = lrcAr;
                }
        }
});

let toMin = (sec) => {
        if(!sec) return '0:00';
        sec = parseInt(sec);
        return parseInt(sec / 60) + ':' + parseFloat(sec % 60).toString().padStart(2,'0');
}
</script>

马黑黑 发表于 2022-6-30 07:49

技法:

两张图片叠加,其中一张使用 multiply 滤镜修饰(mix-blend-mode: multiply)。滤镜不能产生满意效果时,可以改用 opacity 将其中一张图片设置为合适的透明度。

再次使用气泡,不同的是,关键帧动画加入 scale 方法(变大变小效果),animation 加入参数 alternate(反向循环效果)。

马黑黑 发表于 2022-6-30 07:49

放代码:
<style>

.papa { margin: auto; width: 1024px; height: 640px; border-radius: 4px; border: 1px solid rgba(0,0,0,.5); overflow: hidden; position: relative; }
.papa::before { content: ''; right: 160px; top: 80px; width: 460px;height: 460px;background: #ccc; animation: rot 6s linear infinite alternate;border-radius: 50%;background: linear-gradient(65deg, black, tan, green, red); mask-image: radial-gradient(transparent 40%, #eee); -webkit-mask-image: radial-gradient(transparent 40%, #eee); position: absolute; }
.papa img { width: 100%; height: 100%; border-radius: inherit; }
.papa img:first-child { position: absolute; mix-blend-mode: multiply; }
.papa input { border: none; outline: none; opacity: .75; cursor: pointer; }
.papa p { margin: 0; padding: 0; }
.playbox { position: absolute; top: 10px; left: 10px; padding: 10px; width: fit-content; font: normal 1em sans-serif; color: tan; background: rgba(255,255,255,.25); backdrop-filter: blur(2px); overflow: hidden; box-shadow: 1px 2px 2px #000; text-shadow: 1px 1px 1px #000; z-index: 100; }
#btnplay { width: 30px; height: 30px; border-radius: 50%; }
#btnplay:hover { background: #aaa; color: #ff0000; }
@keyframes rot { to { transform: rotate(1turn) scale(1.5); } }

</style>

<div class="papa">
        <img src="https://638183.freep.cn/638183/t22/t8.jpg" alt = "" />
        <img src="https://638183.freep.cn/638183/t22/t7.jpg" alt = "" />
        <div class="playbox">
                <p id="geci" style="font-size: 1.2em">LRC Loading ... </p>
                <p style="display: flex; align-items: center; gap: 4px; margin-top: 10px;">
                        <input id="btnplay" type="button" value=">" />
                        <input id="slider" type="range" min="0" max="100" value="0" />
                        <span id="per">0:0 | 0:0</span>
                </p>
        </div>
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=41641783.mp3" autoplay="autoplay" loop="loop"></audio>

<script>
let papa = document.querySelector('.papa'),
        slider = document.querySelector('#slider'),
        aud = document.querySelector('#aud'),
        per = document.querySelector('#per'),
        btnplay = document.querySelector('#btnplay'),
        geci = document.querySelector('#geci');
let slip = 0;

let lrcAr = [
        ['0.01','梦中的恋人- 纯音乐'],
        ['30.00','作曲:曹思义'],
        ['100.05','所属专辑:星河'],
        ['280','音乐能带领我们找回过去']
];

slider.onmousedown = () => aud.pause();
slider.onchange = () => { aud.currentTime = slider.value * aud.duration / 100; aud.play(); }
btnplay.onclick = () => aud.paused ? aud.play() : aud.pause();
aud.addEventListener('playing', () => btnplay.value = '||');
aud.addEventListener('pause', () => btnplay.value = '>');

aud.addEventListener('timeupdate', () => {
        let prog = 100 * aud.currentTime / aud.duration;
        slider.value = prog;
        per.innerText = toMin(aud.currentTime) + ' | ' + toMin(aud.duration);
                for(j=0; j<lrcAr.length; j++){
                if(aud.currentTime >= lrcAr - slip){
                        geci.innerHTML = lrcAr;
                }
        }
});

let toMin = (sec) => {
        if(!sec) return '0:00';
        sec = parseInt(sec);
        return parseInt(sec / 60) + ':' + parseFloat(sec % 60).toString().padStart(2,'0');
}
</script>


梦油 发表于 2022-6-30 10:40

大小伸缩的圆,给了人们一种梦幻的感觉,这与“梦幻中的恋人”配合得相得益彰。

马黑黑 发表于 2022-6-30 11:44

梦油 发表于 2022-6-30 10:40
大小伸缩的圆,给了人们一种梦幻的感觉,这与“梦幻中的恋人”配合得相得益彰。

谢谢完美的解读{:4_190:}

红影 发表于 2022-6-30 14:49

这个滤镜用得好,让人物的背景几乎不可见呢。气泡的动态也漂亮。梦中的恋人,如梦似幻{:4_187:}

梦油 发表于 2022-6-30 15:07

马黑黑 发表于 2022-6-30 11:44
谢谢完美的解读

得到黑黑朋友谬赞,我很高兴。

加林森 发表于 2022-6-30 16:43

老黑开始玩浪漫了啊。{:4_199:}

小辣椒 发表于 2022-6-30 18:00

原来队长的制作是黑黑这个教程分享{:4_199:}

小辣椒 发表于 2022-6-30 18:01

黑黑,你速度会不会太快了啊,小辣椒都来不及完成作业了

小辣椒 发表于 2022-6-30 18:15

今天我提早上来的,准备吃饭去了,晚上可能会迟一点来了

马黑黑 发表于 2022-6-30 18:15

小辣椒 发表于 2022-6-30 18:15
今天我提早上来的,准备吃饭去了,晚上可能会迟一点来了

悠着点就好

马黑黑 发表于 2022-6-30 18:16

红影 发表于 2022-6-30 14:49
这个滤镜用得好,让人物的背景几乎不可见呢。气泡的动态也漂亮。梦中的恋人,如梦似幻

好像有那么一点点样纸

四海八荒 发表于 2022-6-30 18:44

梦幻的颜色,偏爱紫红

马黑黑 发表于 2022-6-30 19:05

四海八荒 发表于 2022-6-30 18:44
梦幻的颜色,偏爱紫红

紫色据说是很难对付的

醉美水芙蓉 发表于 2022-6-30 19:52

马黑黑 发表于 2022-6-30 20:16

醉美水芙蓉 发表于 2022-6-30 19:52
欣赏学习黑黑老师佳作!

{:4_190:}

四海八荒 发表于 2022-6-30 21:12

马黑黑 发表于 2022-6-30 19:05
紫色据说是很难对付的

黑色更难对付{:4_189:}

绿叶清舟 发表于 2022-6-30 21:15

气泡经过下面图象也会有变化的啊

马黑黑 发表于 2022-6-30 21:34

绿叶清舟 发表于 2022-6-30 21:15
气泡经过下面图象也会有变化的啊

这是滤镜产生的效果:滤镜对颜色做处理,当有它能处理的颜色经过时,就会有效果出来
页: [1] 2 3
查看完整版本: 梦中的恋人