博客中有时候需要添加一些视频内容作为展示,一般使用上传到B站中的视频。
而仅仅将链接写在文中的方式太不优雅了,因此想要实现博客中包含一个可交互的视频播放模块的效果。
实现方式
首先需要去B站网页版视频链接的下方复制嵌入代码,以当时复刻自平衡莱洛三角的视频为例,如下图所示:
复制的内容为:
1 | <iframe |
在Markdown文档中直接粘贴上面的代码,Typora会自动识别为可播放视频,生成博客后也可以正常播放,效果如下:
然而用上面的代码生成博客后视频的效果不太好,因为外链HTML没有与Hexo适配,虽然Typora中显示正常,但在网页上打开后,播放器界面靠左,而且窗口很小,并不优雅。
可以通过如下几个个操作来修改播放器样式,使得视频播放更优雅:
B站默认的嵌入代码是一个
iframe
,在iframe
中添加css
样式:1
style="position: absolute; width: 100%; height: 100%; Left: 0; top: 0;"
在原来的
iframe
外面嵌套一层div
,div添加样式:1
style="position: relative; width: 100%; height: 0; padding-bottom: 75%;"
视频默认清晰度显示为360P,为改变默认播放清晰度,可以在
src
双引号中的内容最后添加&high_quality=1
,可以改变视频播放时默认显示的视频清晰度。现在往
iframe
里面加&high_quality=1
这个参数已经没办法调用高清晰度的b站外链视频了。加了这个参数之后,外链播放器上可能还会显示当前的视频清晰度是“720P”,但是目测实际上播放的视频只有最低的360P清晰度,也就是说上面显示的那个“720P”是假的。而且加了参数后外链播放器还无法切换到任意清晰度,一切换会显示“切换失败”或导致视频无法播放。
目前没有找到替代的方法,看后续这个BUG会不会被修复。
代码修改后如下:
1 | <div style="position: relative; width: 100%; height: 0; padding-bottom: 75%;"> |
如果你也想在Hexo博客中插入响应式Bilibili视频代码块,可以直接复制上面这段代码,将其中的src
双引号中&high_quality=1
前的内容替换为第一步复制的嵌入中src
中的内容,然后粘贴到Markdown文件中即可。
不过粘贴上面的代码时在Typora中并不能直接进行播放,会而用Hexo推送后博客中可以正常播放,效果如下:
2024.10.09 Typora最新版本V1.9.5,视频已可以显示,但视频部分相对于整体的视频块较小,不能填充完整。总的来说还是有点问题,看后续会不会更新解决。
原理
iframe
本身不可自动伸缩iframe
宽度和高度设置为100%后,会尽可能的填充满它的父级元素所以在
iframe
外部嵌套一个div
,只要这个div
根据页面大小变化按比例变化,就可以实现了iframe
使用绝对位置(position: absolute)
, 默认与父级div
的左上角对齐div
使用相对位置,并且用padding-bottom
来计算相对父元素的宽度(父元素宽度的75%作为div
的高度),100:75则为4:3
参考链接
- Hexo博客如何加入B站视频/How to add bilibili shared video in Hexo - 简书 (jianshu.com)
- 如何在Hugo/Hexo博客中插入响应式Bilibili视频代码块_SimZhou的博客-CSDN博客
- 引用B站嵌入代码如何提高清晰度? - 知乎 (zhihu.com)
- hexo博客添加bilibili外链视频 | 烟雨陌上云霄 (yymsyx.com)
- CSS position 属性 (w3school.com.cn)
- 响应式web布局中iframe的自适应 - royalrover - 博客园 (cnblogs.com)
本文链接: https://hanqingjiang.com/2023/01/05/20230105_bilibiliForBlog/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
