马黑黑 发表于 2023-3-25 08:46

东吴

本帖最后由 马黑黑 于 2023-3-25 08:57 编辑 <br /><br /><style>
#papa {
        margin: -80px 0 0 calc(50% - 593px);
        width: 1024px;
        height: 640px;
        background: url('https://638183.freep.cn/638183/t23/1/dswu.jpg') center/cover no-repeat;
        position: relative;
        --state: running;
}
#papa:hover #mplayer { display: block; }
#mplayer {
        position: absolute;
        width: 80px;
        height: 160px;
        left: 15px;
        bottom: 15px;
        background: darkgreen;
        border-radius: 6px;
        box-shadow: 2px 2px 4px lightgreen;
        pointer-events: none;
        transition: all .8s;
        display: none;
}
#mplayer::before, #mplayer::after {
        position: absolute;
        content: '';
}
#mplayer::before {
        width: 30px;
        height: 30px;
        left: calc(50% - 15px);
        bottom: 15px;
        border-radius: 50%;
        background: green;
        pointer-events: auto;
        cursor: pointer;
        border: 2px solid snow;
        box-shadow: 0 0 10px white inset, 0 0 10px white;
        animation: flash .35s infinite alternate var(--state);
}
#mplayer::after {
        content: attr(data-tt);
        top: 6px;
        right: 6px;
        bottom: 60px;
        left: 6px;
        font-size: 14px;
        text-align: center;
        white-space: pre;
        padding: 6px 2px;
        background: lightgreen;
}
#mplayer:hover { transform: rotate(10deg); }
#mplayer:hover::before { background: red; }
#canv {
        position: absolute;
        display: block;
        mix-blend-mode: difference;
}
#vid { display: none; }
@keyframes flash { to { box-shadow: 0 0 50px green inset, 0 0 10px 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=484088500" loop autoplay></audio>
<video id="vid" src="https://img.tukuppt.com/video_show/2629112/00/01/91/5b4d7c5becb5a.mp4" loop muted></video>

<script>
(function() {
let ctx = canv.getContext('2d');
let ww = canv.width = 1024, hh = canv.height = 300;
let loop = () => {ctx.drawImage(vid, 0, 50, ww, hh, 0, 0, ww + 70, 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 = '东吴\x0a\x0a' + toMin(aud.duration) + '\x0a' + toMin(aud.currentTime));
mplayer.addEventListener('click', () => aud.paused ? aud.play() : aud.pause());
})();
</script>

马黑黑 发表于 2023-3-25 08:47

帖子代码
<style>
#papa {
        margin: 80px 0 0 calc(50% - 593px);
        width: 1024px;
        height: 640px;
        background: url('https://638183.freep.cn/638183/t23/1/dswu.jpg') center/cover no-repeat;
        position: relative;
        --state: running;
}
#papa:hover #mplayer { display: block; }
#mplayer {
        position: absolute;
        width: 80px;
        height: 160px;
        left: 15px;
        bottom: 15px;
        background: darkgreen;
        border-radius: 6px;
        box-shadow: 2px 2px 4px lightgreen;
        pointer-events: none;
        transition: all .8s;
        display: none;
}
#mplayer::before, #mplayer::after {
        position: absolute;
        content: '';
}
#mplayer::before {
        width: 30px;
        height: 30px;
        left: calc(50% - 15px);
        bottom: 15px;
        border-radius: 50%;
        background: green;
        pointer-events: auto;
        cursor: pointer;
        border: 2px solid snow;
        box-shadow: 0 0 10px white inset, 0 0 10px white;
        animation: flash .35s infinite alternate var(--state);
}
#mplayer::after {
        content: attr(data-tt);
        top: 6px;
        right: 6px;
        bottom: 60px;
        left: 6px;
        font-size: 14px;
        text-align: center;
        white-space: pre;
        padding: 6px 2px;
        background: lightgreen;
}
#mplayer:hover { transform: rotate(10deg); }
#mplayer:hover::before { background: red; }
#canv {
        position: absolute;
        display: block;
        mix-blend-mode: difference;
}
#vid { display: none; }
@keyframes flash { to { box-shadow: 0 0 50px green inset, 0 0 10px 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=484088500" loop autoplay></audio>
<video id="vid" src="https://img.tukuppt.com/video_show/2629112/00/01/91/5b4d7c5becb5a.mp4" loop muted></video>

<script>
let ctx = canv.getContext('2d');
let ww = canv.width = 1024, hh = canv.height = 300;
let loop = () => {ctx.drawImage(vid, 0, 50, ww, hh, 0, 0, ww + 70, 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 = '东吴\x0a\x0a' + toMin(aud.duration) + '\x0a' + toMin(aud.currentTime));
mplayer.addEventListener('click', () => aud.paused ? aud.play() : aud.pause());
</script>

马黑黑 发表于 2023-3-25 08:56

帖子上半部的例子效果是视频影射:canvas画布将视频实时绘制出来。视频标签在帖子中不可见。

canvas画布对视频的裁剪见 77 行:drawImage() 方法的9个参数中,第一个参数 vid 是视频id;第二至第五个参数基于视频,0、50 是起始裁剪的xy坐标,ww、hh 是裁剪的宽高;第六至第九个参数基于canvas画布,从哪开始画、画多宽多高的尺寸。帖子中的基于视频的尺寸好理解,基于画布的是根据实际效果做了手工调整(主要依据是视频呈现出来的效果)。

马黑黑 发表于 2023-3-25 09:02

帖子代码中的第 83 行,监听音频播放器的播放时间变化,实时将播放时间信息等写在伪元素上。其中,\x0a 是十六进制的换行符,等同于 \n ,在论坛中二者都可以使用。在基于 xeditor 之类的web编辑器中,建议使用十六进制的表示方法,在基于php文本整站系统中发布,反斜杠要写两个。

马黑黑 发表于 2023-3-25 09:06

帖子播放控制器设计为遥控器样式。鼠标指针进入帖子界面,遥控器出现,鼠标指针离开帖子画面,遥控器消失。遥控器自身也有些许动态交互表现:鼠标指针移到底部圆形按钮,遥控器倾斜、按钮变色。

遥控器用单标签做成。

马黑黑 发表于 2023-3-25 09:10

视频背景色为纯黑色。故此,可以使用 mix-blend-mode: difference; 将黑色背景去掉。帖子不直接处理视频的呈现,而是通过画布将视频映射出来,所以,滤镜加诸于 canvas 画布便可(58行)。

花飞飞 发表于 2023-3-25 09:26

新的视频裁剪工艺

马黑黑 发表于 2023-3-25 09:43

花飞飞 发表于 2023-3-25 09:26
新的视频裁剪工艺

在整站系统的网站,用这个没问题,问题仅在对伪元素换行文本的操作:不论用哪一种方法,都不太理想——使用十六进制字符可以成功发帖,但xEditor在修改帖子是读取错误。

亦是金 发表于 2023-3-25 09:45

欣赏黑黑老师新代码!谢谢老师的教程!学习中.....{:4_191:}

花飞飞 发表于 2023-3-25 10:39

马黑黑 发表于 2023-3-25 09:43
在整站系统的网站,用这个没问题,问题仅在对伪元素换行文本的操作:不论用哪一种方法,都不太理想——使 ...

这么说问题不大,不影响什么

马黑黑 发表于 2023-3-25 10:40

花飞飞 发表于 2023-3-25 10:39
这么说问题不大,不影响什么
最好还是跟上一个帖子那样,播放时间信息用一个独立的元素装载

马黑黑 发表于 2023-3-25 10:42

亦是金 发表于 2023-3-25 09:45
欣赏黑黑老师新代码!谢谢老师的教程!学习中.....

{:4_191:}

非常开心 发表于 2023-3-25 11:07

老师制作的太漂亮了{:4_187:}

非常开心 发表于 2023-3-25 11:11

老师!怎么把视频转换成mp4的?

非常开心 发表于 2023-3-25 11:13

网页上很难找到mp4的

马黑黑 发表于 2023-3-25 11:33

非常开心 发表于 2023-3-25 11:13
网页上很难找到mp4的

是不好找

马黑黑 发表于 2023-3-25 11:33

非常开心 发表于 2023-3-25 11:11
老师!怎么把视频转换成mp4的?

有各类转换工具的,找找

小辣椒 发表于 2023-3-25 13:23

今天这个是隐藏播放器了,要鼠标滑过出来

樵歌 发表于 2023-3-25 13:27

反正俺 也做不来,加分走银{:4_206:}

小辣椒 发表于 2023-3-25 13:32

这个视频手机也是可以看见{:4_199:}
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 东吴