梦中的恋人
<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>
技法:
两张图片叠加,其中一张使用 multiply 滤镜修饰(mix-blend-mode: multiply)。滤镜不能产生满意效果时,可以改用 opacity 将其中一张图片设置为合适的透明度。
再次使用气泡,不同的是,关键帧动画加入 scale 方法(变大变小效果),animation 加入参数 alternate(反向循环效果)。 放代码:
<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
大小伸缩的圆,给了人们一种梦幻的感觉,这与“梦幻中的恋人”配合得相得益彰。
谢谢完美的解读{:4_190:} 这个滤镜用得好,让人物的背景几乎不可见呢。气泡的动态也漂亮。梦中的恋人,如梦似幻{:4_187:} 马黑黑 发表于 2022-6-30 11:44
谢谢完美的解读
得到黑黑朋友谬赞,我很高兴。 老黑开始玩浪漫了啊。{:4_199:} 原来队长的制作是黑黑这个教程分享{:4_199:} 黑黑,你速度会不会太快了啊,小辣椒都来不及完成作业了 今天我提早上来的,准备吃饭去了,晚上可能会迟一点来了 小辣椒 发表于 2022-6-30 18:15
今天我提早上来的,准备吃饭去了,晚上可能会迟一点来了
悠着点就好 红影 发表于 2022-6-30 14:49
这个滤镜用得好,让人物的背景几乎不可见呢。气泡的动态也漂亮。梦中的恋人,如梦似幻
好像有那么一点点样纸 梦幻的颜色,偏爱紫红 四海八荒 发表于 2022-6-30 18:44
梦幻的颜色,偏爱紫红
紫色据说是很难对付的 醉美水芙蓉 发表于 2022-6-30 19:52
欣赏学习黑黑老师佳作!
{:4_190:} 马黑黑 发表于 2022-6-30 19:05
紫色据说是很难对付的
黑色更难对付{:4_189:} 气泡经过下面图象也会有变化的啊 绿叶清舟 发表于 2022-6-30 21:15
气泡经过下面图象也会有变化的啊
这是滤镜产生的效果:滤镜对颜色做处理,当有它能处理的颜色经过时,就会有效果出来