东吴
本帖最后由 马黑黑 于 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 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>
(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>
帖子代码
<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>
帖子上半部的例子效果是视频影射:canvas画布将视频实时绘制出来。视频标签在帖子中不可见。
canvas画布对视频的裁剪见 77 行:drawImage() 方法的9个参数中,第一个参数 vid 是视频id;第二至第五个参数基于视频,0、50 是起始裁剪的xy坐标,ww、hh 是裁剪的宽高;第六至第九个参数基于canvas画布,从哪开始画、画多宽多高的尺寸。帖子中的基于视频的尺寸好理解,基于画布的是根据实际效果做了手工调整(主要依据是视频呈现出来的效果)。 帖子代码中的第 83 行,监听音频播放器的播放时间变化,实时将播放时间信息等写在伪元素上。其中,\x0a 是十六进制的换行符,等同于 \n ,在论坛中二者都可以使用。在基于 xeditor 之类的web编辑器中,建议使用十六进制的表示方法,在基于php文本整站系统中发布,反斜杠要写两个。 帖子播放控制器设计为遥控器样式。鼠标指针进入帖子界面,遥控器出现,鼠标指针离开帖子画面,遥控器消失。遥控器自身也有些许动态交互表现:鼠标指针移到底部圆形按钮,遥控器倾斜、按钮变色。
遥控器用单标签做成。 视频背景色为纯黑色。故此,可以使用 mix-blend-mode: difference; 将黑色背景去掉。帖子不直接处理视频的呈现,而是通过画布将视频映射出来,所以,滤镜加诸于 canvas 画布便可(58行)。 新的视频裁剪工艺 花飞飞 发表于 2023-3-25 09:26
新的视频裁剪工艺
在整站系统的网站,用这个没问题,问题仅在对伪元素换行文本的操作:不论用哪一种方法,都不太理想——使用十六进制字符可以成功发帖,但xEditor在修改帖子是读取错误。 欣赏黑黑老师新代码!谢谢老师的教程!学习中.....{:4_191:} 马黑黑 发表于 2023-3-25 09:43
在整站系统的网站,用这个没问题,问题仅在对伪元素换行文本的操作:不论用哪一种方法,都不太理想——使 ...
这么说问题不大,不影响什么 花飞飞 发表于 2023-3-25 10:39
这么说问题不大,不影响什么
最好还是跟上一个帖子那样,播放时间信息用一个独立的元素装载 亦是金 发表于 2023-3-25 09:45
欣赏黑黑老师新代码!谢谢老师的教程!学习中.....
{:4_191:} 老师制作的太漂亮了{:4_187:} 老师!怎么把视频转换成mp4的? 网页上很难找到mp4的 非常开心 发表于 2023-3-25 11:13
网页上很难找到mp4的
是不好找 非常开心 发表于 2023-3-25 11:11
老师!怎么把视频转换成mp4的?
有各类转换工具的,找找 今天这个是隐藏播放器了,要鼠标滑过出来 反正俺 也做不来,加分走银{:4_206:} 这个视频手机也是可以看见{:4_199:}