马黑黑 发表于 2022-7-4 13:47

夏日风荷(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>

马黑黑 发表于 2022-7-4 13:48

代码分享

<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>

马黑黑 发表于 2022-7-4 13:49

右上角的球球挺漂亮的,@东篱闲人 来玩玩

绿叶清舟 发表于 2022-7-4 15:10

这球的脾气有点犟的啊,还碰不得,象谁啊

东篱闲人 发表于 2022-7-4 15:26

嗯嗯。很好很好,又是一个技术贴。。。{:5_112:}

梦油 发表于 2022-7-4 16:51

右上角的一轮弯月真美。粉红色的月亮在夜空中,像是一个婀娜的少女,那么文静而又贤淑,美得让我不得不如痴如醉地,一往深情地望着她——粉红色的月亮。

加林森 发表于 2022-7-4 18:06

老黑的这个制作真漂亮。一点小园球就出来这么多大美女,太厉害。{:4_199:}

马黑黑 发表于 2022-7-4 18:11

加林森 发表于 2022-7-4 18:06
老黑的这个制作真漂亮。一点小园球就出来这么多大美女,太厉害。

响应式交互

马黑黑 发表于 2022-7-4 18:12

绿叶清舟 发表于 2022-7-4 15:10
这球的脾气有点犟的啊,还碰不得,象谁啊

麻风病人{:4_170:}

樵歌 发表于 2022-7-4 18:12

平板只有静图!{:4_203:}

马黑黑 发表于 2022-7-4 18:12

东篱闲人 发表于 2022-7-4 15:26
嗯嗯。很好很好,又是一个技术贴。。。

主要是球好{:4_170:}

马黑黑 发表于 2022-7-4 18:12

梦油 发表于 2022-7-4 16:51
右上角的一轮弯月真美。粉红色的月亮在夜空中,像是一个婀娜的少女,那么文静而又贤淑,美得让我不得不如痴 ...

感谢欣赏

马黑黑 发表于 2022-7-4 18:13

樵歌 发表于 2022-7-4 18:12
平板只有静图!

看看点一下小球

加林森 发表于 2022-7-4 18:15

马黑黑 发表于 2022-7-4 18:11
响应式交互

有些图片我上传了这么发不出来呢?

马黑黑 发表于 2022-7-4 18:25

加林森 发表于 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:41

换了极速模式,这几个美女极速地出来了

加林森 发表于 2022-7-4 18:44

马黑黑 发表于 2022-7-4 18:25
你需要知道我这帖图片地址是如何组成的:

第38行,


谢谢老黑。

东篱闲人 发表于 2022-7-4 19:12

马黑黑 发表于 2022-7-4 18:12
主要是球好

你的球真棒!{:5_116:}

马黑黑 发表于 2022-7-4 19:18

东篱闲人 发表于 2022-7-4 19:12
你的球真棒!
玩了大半辈子的球球了{:4_170:}

东篱闲人 发表于 2022-7-4 19:19

马黑黑 发表于 2022-7-4 19:18
玩了大半辈子的球球了

{:4_181:}{:4_189:}
页: [1] 2 3 4 5
查看完整版本: 夏日风荷(to粥粥)