欢迎光临散文网 会员登陆 & 注册

【在B站身体上学JS】怎么在看视频的时候同时享受三份快乐呢 # S01E01

2020-03-22 17:34 作者:Yazawaにこ  | 我要投稿

🚧并不是很实用警告!警告!🚧

描述问题

    不同于N站,Bilibili在拥有弹幕的时候同时拥有评论区。在手机端上,很多人和我一样会打开视频就直奔评论区,看弹幕√ 看评论√ 看视频√ 同时享受三份的快乐√
    但是!假如是在电脑上!这件事情就变得有些困难了。

你看就是不方便

    假如需要看评论,则需要滚动到下方,这时虽然有一个mini size的播放器,上面也有弹幕,但是和手机的体验是截然不同的 !
 ( 在手机上视频区域还有 1 / 3 ,而minisize的播放占全屏的1 / 10都不到 ! )

1 / 10都不到 ! 

    虽然我的至理名言是 “ 又不是不能用 ” ,嗒嘚!为了缓解我发现我提出的问题其实根本不存在的尴尬!我还是要解决这个问题!

解决方案设计

    首先我们分析一下现在要解决的问题:
        · 要看见弹幕、视频、评论!
        · 视频区域不能小!同时能发弹幕和评

论!即弹幕评论功能不能少!

    我们再分析一下视频播放页会发现,蓝色部分是视频部分黄色部分是弹幕部分。红色部分却是多余部分!那我们把红色部分成评论区就行了!!

分析图!(顺便惊讶一下黄+蓝居然=绿)

开始实现

    首先,我们先打开浏览器的console控制台。这里推荐使用Chrome浏览器 ( 虽然其实只要是浏览器都可以 F12 打开控制台 ) 进行操作。

    我们的思路是把 “ 不必要的部分拆除掉,再把评论区搬过去 " 所以我们需要先定位好要拆掉和搬运过去的位置。

    我们先定位一下评论区: 在评论区任意范围 右键检查元素 然后就可以看见鼠标下面的部分所在树节点,鼠标一层层往上层移动,会发现页面反馈被选中的区域不断扩大,达到覆盖整个评论区的时候右键节点 Store as global variable ,这时在console选项就可以看见评论所在已经被赋值成功 ( temp1 ) 啦!

搜寻示例

    同理可得,我们再搜寻要拆除的地方,成功后在console可以看见这亚子的反馈。

搜寻完毕

    接下来就是大家都快乐的代码时间了:
        · 首先是拆除工作,temp2 是需要拆除的地方,但不是拆除的房子。地方和房子是从属关系,换句话说是父子关系,我们要除去的是子节点。故我们写这样的代码 : 

  [...temp2.children].map(儿子=>儿子.remove())

    先不考虑语法,这段代码的意思就是 把 temp2 的 儿子排成一列,然后一个个执行remove ( 自毁 ) 操作,然后就消失了!画面反馈结果大概是这样:

子——节——点——!

    然后是搬入过程了,这一部分也可以参考移房子不移地的思路(不过其实移地也可以的。),代码如下 :

[...temp1.children].map(儿子=>temp2.appendChild(儿子))    

    同样的先不考虑语法,这段代码的意思就是 把 temp1 的 儿子排成一列,然后一个个执行appendChild ( 认父 ) 操作,然后就换地方了!画面反馈结果大概是这样:

好绿啊

但是还是会发现一个问题,滚动评论页面也会滚动,所以我们还得改成滚动户型:装个电梯

temp2.style.overflow = "scroll";
temp2.style.height = "560px"

    最终效果如下!

全系ok!

效果优化

    要用户进行那么多操作实在是太不人性了,我们可以从console里面发现,其实评论的节点的 id 就叫 comment ,不重要的节点 id 叫 reco_list。那我们可以直接通过查询器来完成搜寻过程 : 

let 有用的 = document.getElementById("comment");
let 待拆除 = document.getElementById("reco_list");

待拆除x2 

同时我们会发现有一个广告会占用一定空间。所以我们也一起拆掉吧!从上面的方法我们可以找到广告节点的id为 slide_ad 所以代码可以这样写 : 

let 广告 = document.getElementById("slide_ad ");
广告.remove();

最终代码

let 有用的 = document.getElementById("comment");
let 待拆除 = document.getElementById("reco_list");
let 广告 = document.getElementById("slide_ad ");

广告.remove();
[...待拆除.children].map(儿子=>儿子.remove());
[...有用的.children].map(儿子=>待拆除.appendChild(儿子));

    好的,这样就可以达到需要的结果了呢!每次打开视频复制粘贴一下就可以了呢!是不是很方便!( 方便:有被冒犯到 )

本次实例可以发现以下知识:

    · 从属关系用 . (英文的小数点符号) 来引用 比如 父亲.儿子
    · remove在编程世界中是销毁的意思 appendChild 是修改父亲(emmm)的意思。
    · 可以用  document.getElementById 来通过 id 找到节点。
    .... 省略若千条

【在B站身体上学JS】怎么在看视频的时候同时享受三份快乐呢 # S01E01的评论 (共 条)

分享到微博请遵守国家法律