马黑黑 发表于 2023-3-24 07:08

萧瑟鸣风

<style>
#papa {
        margin: 100px 0 0 calc(50% - 593px);
        width: 1024px;
        height: 640px;
        background: gray url('https://638183.freep.cn/638183/t23/webp/xsmf.webp') center/cover no-repeat;
        box-shadow: 3px 3px 20px #000;
        position: relative;
        z-index: 1;
        --state: paused;
}
#mplayer {
        width: 80px;
        height: 160px;
        left: 10px;
        bottom: 10px;
        background: black;
        border-radius: 8px;
        box-shadow: 6px 4px 12px snow;
        transition: .6s;
        position: absolute;
        pointer-events: none;
}
#mplayer::before, #mplayer::after {
        position: absolute;
        content: '';
}
#mplayer::before {
        width: 30px;
        height: 30px;
        left: calc(50% - 15px);
        bottom: 15px;
        border-radius: 50%;
        background: #333;
        pointer-events: auto;
        cursor: pointer;
        border: 2px solid snow;
        box-shadow: 0 0 10px blue;
        animation: flash .3s infinite alternate var(--state);
}
#mplayer::after {
        content:attr(data-tt);
        top: 6px; right: 6px; bottom: 60px; left: 6px;
        background: #333;
        color: lightblue;
        font-size: 14px;
        text-align: center;
        padding: 4px;
        white-space:pre;
}
#mplayer:active { transform: rotate(5deg); }
#vid { display: none; }
#canv {
        position: absolute;
        display: block;
        right: 10px;
        top: 10px;
        border-radius: 50%;
        opacity: .35;
}
@keyframes flash {
        to { box-shadow: 0 0 30px white; }
}
</style>

<div id="papa">
        <canvas id="canv"></canvas>
        <div id="mplayer" data-tt="HCPlayer&#10;&#10;00:00&#10;00:00"></div>
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=30148242" loop></audio>
<video id="vid" src="https://img.tukuppt.com/video_show/2475824/00/02/06/5b50065e45b04.mp4" loop muted></video>

<script>

let ctx = canv.getContext('2d');
let ww = canv.width = 400, hh = canv.height = 400;
let loop = () => {ctx.drawImage(vid, 0, 0, ww, hh);if(!vid.paused) {requestAnimationFrame(loop);return;}}
let toMin = (val) => {if (!val) return '00:00';val = Math.floor(val);let min = parseInt(val / 60),sec = parseFloat(val % 60);if (min < 10) min = '0' + min;if (sec < 10) sec = '0' + sec;return min + ':' + sec;};
let mState = () => aud.paused ? (papa.style.setProperty('--state', 'paused'),vid.pause()) : (papa.style.setProperty('--state', 'running'),vid.play());
vid.playbackRate = 0.5;
vid.addEventListener('play', loop, false);
aud.addEventListener('play', () => mState());
aud.addEventListener('pause', () => mState());
aud.addEventListener('timeupdate', () => mplayer.dataset.tt = '萧瑟鸣风\n\n' + toMin(aud.duration) + '\n' + toMin(aud.currentTime));
mplayer.addEventListener('click', () => aud.paused ? aud.play() : aud.pause());

</script>

马黑黑 发表于 2023-3-24 07:11

帖子代码
<style>
#papa {
        margin: 100px 0 0 calc(50% - 593px);
        width: 1024px;
        height: 640px;
        background: gray url('https://638183.freep.cn/638183/t23/webp/xsmf.webp') center/cover no-repeat;
        box-shadow: 3px 3px 20px #000;
        position: relative;
        z-index: 1;
        --state: paused;
}
#mplayer {
        width: 80px;
        height: 160px;
        left: 10px;
        bottom: 10px;
        background: black;
        border-radius: 8px;
        box-shadow: 6px 4px 12px snow;
        transition: .6s;
        position: absolute;
        pointer-events: none;
}
#mplayer::before, #mplayer::after {
        position: absolute;
        content: '';
}
#mplayer::before {
        width: 30px;
        height: 30px;
        left: calc(50% - 15px);
        bottom: 15px;
        border-radius: 50%;
        background: #333;
        pointer-events: auto;
        cursor: pointer;
        border: 2px solid snow;
        box-shadow: 0 0 10px blue;
        animation: flash .3s infinite alternate var(--state);
}
#mplayer::after {
        content:attr(data-tt);
        top: 6px; right: 6px; bottom: 60px; left: 6px;
        background: #333;
        color: lightblue;
        font-size: 14px;
        text-align: center;
        padding: 4px;
        white-space:pre;
}
#mplayer:active { transform: rotate(5deg); }
#vid { display: none; }
#canv {
        position: absolute;
        display: block;
        right: 10px;
        top: 10px;
        border-radius: 50%;
        opacity: .35;
}
@keyframes flash {
        to { box-shadow: 0 0 30px white; }
}
</style>

<div id="papa">
        <canvas id="canv"></canvas>
        <div id="mplayer" data-tt="HCPlayer

00:00
00:00"></div>
</div>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=30148242" loop></audio>
<video id="vid" src="https://img.tukuppt.com/video_show/2475824/00/02/06/5b50065e45b04.mp4" loop muted></video>

<script>

let ctx = canv.getContext('2d');
let ww = canv.width = 400, hh = canv.height = 400;
let loop = () => {ctx.drawImage(vid, 0, 0, ww, hh);if(!vid.paused) {requestAnimationFrame(loop);return;}}
let toMin = (val) => {if (!val) return '00:00';val = Math.floor(val);let min = parseInt(val / 60),sec = parseFloat(val % 60);if (min < 10) min = '0' + min;if (sec < 10) sec = '0' + sec;return min + ':' + sec;};
let mState = () => aud.paused ? (papa.style.setProperty('--state', 'paused'),vid.pause()) : (papa.style.setProperty('--state', 'running'),vid.play());
vid.playbackRate = 0.5;
vid.addEventListener('play', loop, false);
aud.addEventListener('play', () => mState());
aud.addEventListener('pause', () => mState());
aud.addEventListener('timeupdate', () => mplayer.dataset.tt = '萧瑟鸣风\n\n' + toMin(aud.duration) + '\n' + toMin(aud.currentTime));
mplayer.addEventListener('click', () => aud.paused ? aud.play() : aud.pause());

</script>

马黑黑 发表于 2023-3-24 07:14

媒体未设置为自动播放。若需要,仅需在 audio 标签加入 autoplay 属性即可:

<audio id="aud" src="..." loop autoplay></audio>

马黑黑 发表于 2023-3-24 07:26

帖子遥控器是一个单标签。单标签能具备如此丰富的功能,得益于mplayer两个伪元素的加持与JS对CSS的操作能力:荧屏与按钮使用用::before和::after实现,JS通过操控dataset和CSS变量令其动态变化。

马黑黑 发表于 2023-3-24 07:31

#mplayer选择器的伪类 :active 用在这里效果不是特别明显。

在此,:active 伪类给元素设定一个效果,即,当遥控器处于活动中时,旋转 5 度——

#mplayer:active { transform: rotate(5deg); }

啥情况是处于活动之时?比如,点击操作。把点击动作放慢一点,这个旋转效果会明显看到。

焱鑫磊 发表于 2023-3-24 09:30

欣赏学习老师佳帖!赞!!!{:4_187:}

梦油 发表于 2023-3-24 10:26

这是极光吗?这小小的遥控器设计的真妙。

马黑黑 发表于 2023-3-24 12:00

梦油 发表于 2023-3-24 10:26
这是极光吗?这小小的遥控器设计的真妙。

是极光

马黑黑 发表于 2023-3-24 12:00

焱鑫磊 发表于 2023-3-24 09:30
欣赏学习老师佳帖!赞!!!

中午好

红影 发表于 2023-3-24 12:57

原来不是自动播放的,进帖子听不到声音还以为是我网的问题呢{:4_173:}

红影 发表于 2023-3-24 12:59

点击播放后,视频也出来了,很漂亮大气的制作。这个遥控器用在帖子里还挺漂亮的呢{:4_199:}

马黑黑 发表于 2023-3-24 12:59

红影 发表于 2023-3-24 12:57
原来不是自动播放的,进帖子听不到声音还以为是我网的问题呢

嗯,这是为了测试遥控器。生活中,通过遥控器才能启动什么。

马黑黑 发表于 2023-3-24 13:01

红影 发表于 2023-3-24 12:59
点击播放后,视频也出来了,很漂亮大气的制作。这个遥控器用在帖子里还挺漂亮的呢

小而美就是酱紫的{:4_170:}

梦油 发表于 2023-3-24 13:31

马黑黑 发表于 2023-3-24 12:00
是极光

很漂亮

红影 发表于 2023-3-24 14:48

马黑黑 发表于 2023-3-24 12:59
嗯,这是为了测试遥控器。生活中,通过遥控器才能启动什么。

还有这样的说法啊,有意思{:4_170:}

红影 发表于 2023-3-24 14:49

马黑黑 发表于 2023-3-24 13:01
小而美就是酱紫的

而且还挺实用,一点击各种效果就都出来了{:4_173:}

晓哥 发表于 2023-3-24 17:06

极地极光,真美,小巧清秀的机体状控制器够打眼。点开了迷幻和惊艳,这设计给力!

小辣椒 发表于 2023-3-24 17:14

黑黑好棒,遥控器可以控制视频停止和播放

小辣椒 发表于 2023-3-24 17:15

这个也是好玩的,很喜欢的效果{:4_178:}

晓哥 发表于 2023-3-24 17:20

js操控css不懂,就觉得js可控视频,灵动短暂的5度旋归也很有创意,点赞问好!
页: [1] 2 3 4 5 6
查看完整版本: 萧瑟鸣风