夏日风荷(to粥粥)
<style>#ma { left: -242px; width: 1080px; height: 608px; background: #000 url('https://638183.freep.cn/638183/t22/hl/jj.jpeg') no-repeat; perspective: 1000px; box-shadow: 2px 2px 20px #000; position: relative; }
#circle { position: absolute; width: 100px; height: 100px; top: 10px; right: 10px; border-radius: 50%; background: red linear-gradient(120deg, lightgreen, transparent); mask-image: radial-gradient(circle at 30% 30%,transparent 20%, red); -webkit-mask-image: radial-gradient(circle at 30% 30%,transparent 20%, red); cursor: pointer; z-index: 100; }
#ma input { border: none; outline: none; opacity: .75; cursor: pointer; }
#ma p { margin: 0; padding: 0; }
#playbox { position: absolute; left: 10px; bottom: 10px; padding: 10px; font: normal 1em sans-serif; color: tomato; text-shadow: 1px 1px 1px #000; background: transparent; border-radius: 8px; overflow: hidden; box-shadow: 1px 1px 2px rgba(0,0,0,.15); z-index: 100; }
#playbox::before { position: absolute; content: ''; margin: -20px; left: 0; top: 0; right: 0; bottom: 0; background: rgba(255,255,255,.45); filter: blur(2px); z-index: -1; }
#btnplay { width: 30px; height: 30px; border-radius: 50%; }
#btnplay:hover { background: #aaa; color: #ff0000; }
.pics {position: absolute; width: 256px; box-shadow: inherit; transform-style: preserve-3d; display: none; opacity: .65; transition: all .5s; }
.pics:hover { width: 300px; opacity: 1; cursor: pointer; }
@keyframes drop { from { transform: translateY(10px); } to { transform: translateY(488px); } }
@keyframes up { from { transform: translateY(488px); } to { transform: translateY(10px); } }
</style>
<div id="ma">
<div id="circle"></div>
<div id="playbox">
<p id="geci" style="font-size: 1.2em">纯音乐 - 夏雨风荷</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%</span>
</p>
</div>
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=29437826.mp3" autoplay="autoplay" loop="loop"></audio>
<script>
let flag = 1;
let imgAr =;
let gnum = (min,max) => Math.floor(Math.random()*(max-min+1))+min;
imgAr.forEach((item,key) => {
item = document.createElement('img');
item.className = 'pics';
item.src = 'https://638183.freep.cn/638183/t22/hl/jj' + imgAr + '.jpg';
item.style.left = key * 190 + 30 + 'px';
item.style.top = gnum(40, 200) + 'px';
item.style.transform = 'rotateY(' + gnum(25,45) +'deg)';
item.alt = '';
ma.appendChild(item);
});
circle.onmouseover = () => {
let pics = document.querySelectorAll('.pics')
if(flag == 1) {
circle.style.animation = 'drop .5s forwards ease-in',
pics.forEach((ele) => ele.style.display = 'block');
flag = 0;
} else {
circle.style.animation = 'up .5s forwards ease-out';
pics.forEach((ele) => ele.style.display = 'none');
flag = 1;
}
}
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);
});
let toMin = (sec) => {
if(!sec) return '0:00';
sec = parseInt(sec);
return parseInt(sec / 60) + ':' + parseFloat(sec % 60).toString().padStart(2,'0');
}
</script>
代码分享
<style>
#ma { left: -242px; width: 1080px; height: 608px; background: #000 url('https://638183.freep.cn/638183/t22/hl/jj.jpeg') no-repeat; perspective: 1000px; box-shadow: 2px 2px 20px #000; position: relative; }
#circle { position: absolute; width: 100px; height: 100px; top: 10px; right: 10px; border-radius: 50%; background: red linear-gradient(120deg, lightgreen, transparent); mask-image: radial-gradient(circle at 30% 30%,transparent 20%, red); -webkit-mask-image: radial-gradient(circle at 30% 30%,transparent 20%, red); cursor: pointer; z-index: 100; }
#ma input { border: none; outline: none; opacity: .75; cursor: pointer; }
#ma p { margin: 0; padding: 0; }
#playbox { position: absolute; left: 10px; bottom: 10px; padding: 10px; font: normal 1em sans-serif; color: tomato; text-shadow: 1px 1px 1px #000; background: transparent; border-radius: 8px; overflow: hidden; box-shadow: 1px 1px 2px rgba(0,0,0,.15); z-index: 100; }
#playbox::before { position: absolute; content: ''; margin: -20px; left: 0; top: 0; right: 0; bottom: 0; background: rgba(255,255,255,.45); filter: blur(2px); z-index: -1; }
#btnplay { width: 30px; height: 30px; border-radius: 50%; }
#btnplay:hover { background: #aaa; color: #ff0000; }
.pics {position: absolute; width: 256px; box-shadow: inherit; transform-style: preserve-3d; display: none; opacity: .65; transition: all .5s; }
.pics:hover { width: 300px; opacity: 1; cursor: pointer; }
@keyframes drop { from { transform: translateY(10px); } to { transform: translateY(488px); } }
@keyframes up { from { transform: translateY(488px); } to { transform: translateY(10px); } }
</style>
<div id="ma">
<div id="circle"></div>
<div id="playbox">
<p id="geci" style="font-size: 1.2em">纯音乐 - 夏雨风荷</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%</span>
</p>
</div>
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=29437826.mp3" autoplay="autoplay" loop="loop"></audio>
<script>
let flag = 1;
let imgAr =;
let gnum = (min,max) => Math.floor(Math.random()*(max-min+1))+min;
imgAr.forEach((item,key) => {
item = document.createElement('img');
item.className = 'pics';
item.src = 'https://638183.freep.cn/638183/t22/hl/jj' + imgAr + '.jpg';
item.style.left = key * 190 + 30 + 'px';
item.style.top = gnum(40, 200) + 'px';
item.style.transform = 'rotateY(' + gnum(25,45) +'deg)';
item.alt = '';
ma.appendChild(item);
});
circle.onmouseover = () => {
let pics = document.querySelectorAll('.pics')
if(flag == 1) {
circle.style.animation = 'drop .5s forwards ease-in',
pics.forEach((ele) => ele.style.display = 'block');
flag = 0;
} else {
circle.style.animation = 'up .5s forwards ease-out';
pics.forEach((ele) => ele.style.display = 'none');
flag = 1;
}
}
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);
});
let toMin = (sec) => {
if(!sec) return '0:00';
sec = parseInt(sec);
return parseInt(sec / 60) + ':' + parseFloat(sec % 60).toString().padStart(2,'0');
}
</script>
右上角的球球挺漂亮的,@东篱闲人 来玩玩 这球的脾气有点犟的啊,还碰不得,象谁啊 嗯嗯。很好很好,又是一个技术贴。。。{:5_112:} 右上角的一轮弯月真美。粉红色的月亮在夜空中,像是一个婀娜的少女,那么文静而又贤淑,美得让我不得不如痴如醉地,一往深情地望着她——粉红色的月亮。 老黑的这个制作真漂亮。一点小园球就出来这么多大美女,太厉害。{:4_199:} 加林森 发表于 2022-7-4 18:06
老黑的这个制作真漂亮。一点小园球就出来这么多大美女,太厉害。
响应式交互 绿叶清舟 发表于 2022-7-4 15:10
这球的脾气有点犟的啊,还碰不得,象谁啊
麻风病人{:4_170:} 平板只有静图!{:4_203:} 东篱闲人 发表于 2022-7-4 15:26
嗯嗯。很好很好,又是一个技术贴。。。
主要是球好{:4_170:} 梦油 发表于 2022-7-4 16:51
右上角的一轮弯月真美。粉红色的月亮在夜空中,像是一个婀娜的少女,那么文静而又贤淑,美得让我不得不如痴 ...
感谢欣赏 樵歌 发表于 2022-7-4 18:12
平板只有静图!
看看点一下小球 马黑黑 发表于 2022-7-4 18:11
响应式交互
有些图片我上传了这么发不出来呢? 加林森 发表于 2022-7-4 18:15
有些图片我上传了这么发不出来呢?
你需要知道我这帖图片地址是如何组成的:
第38行,
item.src = 'https://638183.freep.cn/638183/t22/hl/jj' + imgAr + '.jpg';
红色部分是图片地址的第一节,红紫色部分是第二节,紫色部分是第三节。每一节的构造做好分析:第一节是有共同规律的,你根据你图片的地址共性抽取出共同的部分;第二节是文件名,数组放在第三十一行,我的文件名有规律,所以这样构造,没规律的,你需要这样:
let imgAr = ['xy','dk','cn','bb'];
第三节是文件后缀名,一样的后缀才能酱紫。
其实,之前说过,我这种构造,可以换成完全是数组格式的。这样的话,第三十一行改为:
let imgAr =[
'图片1完整地址',
'图片2完整地址',
'图片3完整地址',
'图片N完整地址'
];
然后第三十八行改为:
item.src = imgAr;
这样就可以了 换了极速模式,这几个美女极速地出来了 马黑黑 发表于 2022-7-4 18:25
你需要知道我这帖图片地址是如何组成的:
第38行,
谢谢老黑。 马黑黑 发表于 2022-7-4 18:12
主要是球好
你的球真棒!{:5_116:} 东篱闲人 发表于 2022-7-4 19:12
你的球真棒!
玩了大半辈子的球球了{:4_170:} 马黑黑 发表于 2022-7-4 19:18
玩了大半辈子的球球了
{:4_181:}{:4_189:}