将B站视频设置为浏览器背景,你确定不试试?

简介: 将B站视频设置为浏览器背景,你确定不试试?

动图效果

说在前面

心血来潮做了个插件,通过该插件我们使用B站视频来做自己浏览器网页的背景视频,这样浏览起来是不是会更加的赏心悦目。

使用步骤

插件下载

Gitee地址:https://gitee.com/zheng_yongtao/chrome-plug-in/tree/master/Chrome-backGroundVideo

CSDN插件:https://download.csdn.net/download/Twinkle_sone/22003790

添加扩展程序

打开链接 chrome://extensions/ 进入扩展程序管理页面,将下载解压的文件夹拉入这里即可,如下图,第一个插件即为我们新加的插件。

使用

添加完成之后,页面上会有扩展程序的小图标,点击这个小图标,会弹出一个窗口

在这个窗口输入视频链接后,我们就可以使用该视频作为网页背景了,那么问题来了,这个视频链接要去哪里获取呢?

获取链接

我们先随便在B站上打开一个视频,视频下方会有一个分享按钮。

点击按钮后会出现两个链接,我们只需要复制我们需要的链接即可,如下图:

将这个链接放进输入框后点击确认,我们会发现视频出来了,如下图:

但是视频播放不了,这是因为浏览器限制了视频自动播放,所以我们还需要稍微的手动一下,我们看到了页面左边有个粉粉的按钮,点击它会有什么效果呢?

点击了之后我们可以看到视频的层级就跑到了最上层来了,我们就可以点击到播放按钮了,所以我们只需要切换层级点击播放之后再切换层级回去就可以实现开头动图的效果了(不会有人嫌麻烦吧,(╥╯^╰╥)流泪)。

代码分析

获取视频链接
chrome.runtime.onConnect.addListener((res) => {
    // console.log('contentjs中的 chrome.runtime.onConnect:',res)
    if (res.name === 'myConnect') {
        res.onMessage.addListener(mess => {
            console.log('popup中 res.onMessage.addListener:', mess)
            mess = iframeSrcSplit(mess);
            createIframe(mess)
        })
    }
})
解析视频链接
function iframeSrcSplit(iframeSrc){
    let temp = iframeSrc.split('src="')[1];
    iframeSrc = temp.split('" ')[0];
    //弹幕
    iframeSrc += '&danmaku=0' //+ (this.danmaku ? 1 : 0)
    //画质
    iframeSrc += '&high_quality=1'
    //自动播放
    // iframeSrc += '&autoplay=true'
    //循环
    iframeSrc += '&loop=true'
    return iframeSrc;
}
创建iframe并插入
function createIframe(iframeSrc){
    let body = document.getElementsByTagName('body')[0];
    body.style.opacity = 0.8;
    let iframe = document.createElement('iframe');
    iframe.muted = true
    iframe.src = iframeSrc;
    localStorage.setItem('iframeSrc',iframeSrc);
    iframe.id = 'BiliVideo';
    iframe.name = 'BiliVideo';
    iframe.style.width = '100%'
    iframe.style.height = '100%'
    iframe.style.position = 'fixed'
    body.before(iframe)
    iframe.style.zIndex = '100'
}
生成按钮
function btnGenerator(){
    let ghtml = document.getElementsByTagName('html')[0],
        gdiv = document.createElement('div');
    gdiv.id = 'changdiv'
    gdiv.style.position = 'fixed';
    gdiv.style.width = '100%';
    gdiv.style.height = '100%';
    gdiv.style.top = '0px';
    gdiv.style.left = '0px';
    gdiv.style.opacity = '0.7';
    gdiv.style.zIndex= '-1';
    ghtml.appendChild(gdiv);
    //页面上的切换按钮
    let gBtn = document.createElement('div');
    gBtn.id = 'gBtn';
    gBtn.innerText = "切换层级";
    gBtn.style.opacity = "0.6";
    gBtn.style.position = "fixed";
    gBtn.style.right = "40px";
    gBtn.style.top = "50%";
    gBtn.style.border = "solid black 1px"
    gBtn.style.width = "80px";
    gBtn.style.height = "80px";
    gBtn.style.borderRadius = "50% 50%";
    gBtn.style.lineHeight = "80px";
    gBtn.style.textAlign = "center";
    gBtn.style.backgroundImage = "linear-gradient(#e66465, #9198e5)";
    gBtn.style.fontSize = "initial";
    gBtn.style.cursor = "pointer";
    gBtn.style.zIndex = "999";
    ghtml.appendChild(gBtn);
    $("#gBtn").hover(function(){
        let w = parseInt($("#gBtn").css("left"));
        if(w == windowWidth-20){
            $("#gBtn").css({"left":windowWidth-80});
        }
    },function(){
        let w = parseInt($("#gBtn").css("left"));
        if(w >= windowWidth-80){
            $("#gBtn").css({"left":windowWidth-20});
        }
    });
    //按钮拖拽功能
    $("#gBtn").mousedown(function(e){
        gmove=true;
        startX = e.pageX
        startY = e.pageY
        // console.log("move",gmove);
        _gx=e.pageX-parseInt($("#gBtn").css("left"));
        _gy=e.pageY-parseInt($("#gBtn").css("top"));
    });
    $(document).mousemove(function(e){
        if(gmove){
            var x=e.pageX-_gx;//控件左上角到屏幕左上角的相对位置
            var y=e.pageY-_gy;
            $("#gBtn").css({"top":y,"left":x});
        }
    }).mouseup(function(e){
        endX = e.pageX;
        endY = e.pageY;
        let d = Math.sqrt((startX - endX) * (startX - endX) + (startY - endY) * (startY - endY));
        if (d === 0 || d < 7) {
            // console.log("执行了点击事件");
            let iframe = document.getElementById('BiliVideo');
            if(iframe.style.zIndex == '-1'){
                iframe.style.zIndex = '100'
            }else{
                iframe.style.zIndex = '-1'
            }
        } else {
            // console.log("执行了拖拽事件");
            if(windowWidth - endX < 60){
                $("#gBtn").css({"left":windowWidth-20});
            }
        }
        gmove=false;
    });
}

代码地址

Gitee:https://gitee.com/zheng_yongtao/chrome-plug-in/tree/master/Chrome-backGroundVideo

(喜欢的可以点个星,呜呜呜)

更多插件

浏览器网页背景换肤插件

浏览器桌面挂件动画插件

B站视频评论屏蔽插件

鼠标点击烟花效果,妹子看后直说酷

目录
相关文章
|
1月前
|
Web App开发 缓存 UED
如何设置浏览器的缓存策略?
【10月更文挑战第23天】通过合理地设置浏览器的缓存策略,可以在提高网页性能、减少网络流量的同时,确保用户能够获取到最新的内容,从而提升用户体验和网站的性能优化效果。
87 4
|
1月前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
54 1
|
4月前
|
存储
【Azure APIM】APIM 策略语句如何来设置多个Cookie值让浏览器保存
【Azure APIM】APIM 策略语句如何来设置多个Cookie值让浏览器保存
|
4月前
|
Web App开发 JSON 安全
【跨域难题终结者】:一键解锁Chrome浏览器神秘设置,彻底告别开发阶段的跨域烦恼!
【8月更文挑战第20天】跨域是前端开发常遇难题,尤其在前后端分离项目中。浏览器因安全考量会阻止不同源间的请求。本文对比CORS、JSONP、代理服务器等解法,并介绍开发阶段通过调整Chrome设置来临时禁用跨域限制的方法,提供启动Chrome及使用`fetch`API示例,适合快速测试。但请注意这不适用于生产环境,存在一定安全风险。
1105 1
|
4月前
|
搜索推荐 前端开发 程序员
如何在浏览器中搜索内容自动过滤CSDN的相关文章,一次设置永久过滤
这篇文章介绍了如何在浏览器中设置搜索时自动过滤掉CSDN的相关文章,提供了具体的浏览器设置步骤和推荐使用的搜索引擎。
如何在浏览器中搜索内容自动过滤CSDN的相关文章,一次设置永久过滤
|
4月前
|
存储 API 网络架构
【Azure 存储服务】MP4视频放在Azure的Blob里面,用生成URL在浏览器中打开之后,视频可以正常播放却无法拖拽视频的进度
【Azure 存储服务】MP4视频放在Azure的Blob里面,用生成URL在浏览器中打开之后,视频可以正常播放却无法拖拽视频的进度
|
4月前
|
IDE 开发工具
Edge浏览器——如何设置跨域请求
Edge浏览器——如何设置跨域请求
274 0
|
1月前
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
在浏览器执行js脚本的两种方式
|
27天前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
|
26天前
|
算法 开发者
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
32 1