首页 > 其他分享 >对在博客园中播放音乐及设置其自动播放的研究

对在博客园中播放音乐及设置其自动播放的研究

时间:2023-01-16 00:22:47浏览次数:55  
标签:pause 博客园 aplayer 自动播放 播放 data button

一. 如何播放音乐

首先打开设置博客后台设置页面,我们要先申请 js 权限,大概一个小时就会通过。

对于播放音乐,我们可以使用 Aplayer 音乐播放器,在页脚HTML中添加如下代码:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/APlayer.min.css">
<script src="https://blog-static.cnblogs.com/files/zouwangblog/APlayer.min.js"></script>
<script src="https://unpkg.com/[email protected]/dist/Meting.min.js"></script>
<div id="player" class="aplayer aplayer-withlist aplayer-fixed" data-id="8057140928" data-server="netease" data-type="playlist" data-order="random" data-autoplay="true" data-volume="0.6" data-fixed="true" data-listfolded="true" data-theme="orange"></div>  <!-- 播放器相关设置 -->

其中在div id="player" class=....一行中,data-id=...之后的是设置,格式为xxx="" ,具体介绍如下:

data-id:歌曲/专辑/歌单对应的id
data-server:音乐平台,可以为 netease(网易云音乐)、tecent(qq音乐)、xiami(虾米音乐)、kugou(酷狗音乐)
data-type:请求类型,可以为 song(单曲)、album(专辑)、playlist(歌单)
data-order:播放模式,可以为 random(随机)、single(循环单曲)、circulation(列表循环)、order(顺序播放)
data-autoplay:是否自动播放,true(是)或 false(否)
data-volume:默认音量,播放器会记忆用户设置,只要用户改过一次音量就这一项就无效了
data-fixed:是否开启吸底模式
data-listfolded:歌曲列表是否默认折叠
data-theme:主题色,也可以#RGB

将代码添加进页脚 HTML 之后,我们就可以在博客上看到音乐播放器了,但是,我们会发现,无论上面的data-autoplay设置成 true 还是 false,打开博客时都不能自动播放音乐,这个问题我搜索后并没有找到合适的解决方案。

二. 如何设置自动播放

我们在博客中点击F12打开开发者工具,就可以在控制台看到 warning:

大意是:“播放错误,因为用户还没有首先接触网页”,这是因为谷歌于2018年4月更改(禁止)自动播放的规定,我们不能在用户已与域进行了交互(单击,点击等)之前播放任何带声音的文件。

为了完成自动播放的目的,我们需要另辟蹊径,跟 chrome 打游击战,时不时骚扰一下浏览器,问问它能不能播放,代码如下:

<script> 
let ref = setInterval(function(){	//每隔2秒尝试播放一次
    isaplay();
},2000);
function isaplay(){
	$(".aplayer-play").click()	//尝试播放
}
</script>

将这堆代码加到页脚HTML,我们发现,自动播放的问题解决了,但又没完全解决,但至少现在用户只要任意点击一下页面或者任意按键就可以自动播放了,但是却又出现了新的问题,我们发现用户暂停不了音乐了,只要一点暂停,很快音乐就会继续播放。观察HTML代码后发现,当播放器处于播放状态时元素aplayer-button aplayer-play会变成aplayer-button aplayer-pause,于是我们检测通过检测.aplayer-pause是否存在来关闭Interval,更改后的代码如下:

<script> 
let ref = setInterval(function(){	//每隔2秒尝试播放一次
    isaplay();
},2000);
function isaplay(){
	$(".aplayer-play").click()	//尝试播放
	if($(".aplayer-pause").length > 0){    //`aplayer-button aplayer-pause`是否存在
        clearInterval(ref);		//停止Interval,即停止循环
    }
}
</script>

但是我惊奇的发现,音乐还没有开始播放,isaplay()却只运行了一次就歇菜了,起初我还以为aplayer-button aplayer-pause是被藏起来了,实质上是存在的,但是后来F12翻遍了文件也没有找到aplayer-button aplayer-pause的踪迹,后来我突然想到,会不会是因为,当$(".aplayer-play").click()执行的时候,浏览器并没有从一开始就拦截住它,而是让他成功地将元素aplayer-button aplayer-play变成了aplayer-button aplayer-pause(即便很快就恢复了过来),在这很短的时间内,判断执行了,aplayer-button aplayer-pause在那几十毫秒内刚好存在,$(".aplayer-pause").length > 0导致clearInterval(ref)执行。HTML元素变化与JS代码执行异步,就是isaplay()只运行了一次就歇菜的罪魁祸首。于是我根据上述推断改进代码如下:

<script> 
let ref = setInterval(function(){	//每隔2秒尝试播放一次
    isaplay();
},2000);
function isaplay(){
    $(".aplayer-play").click()	//尝试播放
    setTimeout(function() {		//延时100毫秒再执行其内部的判断
        if($(".aplayer-pause").length > 0){    //`aplayer-button aplayer-pause`是否存在
        clearInterval(ref);		//停止Interval,即停止循环
    }}, 100);
}
</script>

果然,改进后用户还是只要任意点击一下页面或者任意按键就可以自动播放,并且音乐也可以正常暂停或播放,问题基本解决,但还是期待能有大佬给出更为完善的方案。

在这次实践中,我在解决问题的过程中也查阅了许多资料,同时还学习了一下基本的 js 语法(其实我对JS基本上一窍不通,所以上面有些用语并不规范),只能笑说自己是“做中学”了 (*^_^*) 。

以上内容仅供参考,水平不高,大佬见笑。
下一篇文章:[代码Show]第一期- Calendar ——CSDN
再下一篇文章:从0开始学杂项 第一期:什么是杂项 ——CSDN(强烈推荐)


作者:CHTXRT

出处:https://www.cnblogs.com/chtxrt/

本站使用「CC BY-SA 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。

标签:pause,博客园,aplayer,自动播放,播放,data,button
From: https://www.cnblogs.com/chtxrt/p/17053228.html

相关文章

  • Recyclerview列表视频自动播放方案
    列表中自动播放视频,常规方案是在每个xml中写入视频布局,然后在滑动时获取当前的下标,播放此下标的视频弊端:播放容易出错,需要精准控制好停止播放操作,并且适配器中容易触发......
  • .NET MAUI 中创建录音机和播放器应用 (转)
    前言在本博客中,你将了解如何在.NETMAUI中开发录音机和播放器。音频播放器将录制和播放音频文件。此应用程序可以在Android和iOS上部署和使用。预览以下是该录音机和......
  • cctv8被《三体》卡住了,网站打开根本看不了,估计已经破千万播放量了。我等着看回放呢。
    电视:cctv8频道:CCTV-8电视剧频道高清直播_CCTV节目官网_央视网​ 来源:cctv8从来没有那个电视节目比这个卡的。无论如何:我会一直追剧下去的。......
  • python播放音频文件
    将mp3文件转换为wav文件trans_mp3_to_wav.pyfrompydubimportAudioSegment#这里filepath填的是.mp3文件的名字(也可加上路径)deftrans_mp3_to_wav(filepath):s......
  • Android开发学习之路--基于vitamio的视频播放器(一)
      之前也试过vitamio这个库,后来不知道被什么事情给耽搁了,就没继续下去。近来觉得视频还是需要学习一下的,谁让直播那么火呢,就想着写一个简单的视频播放的app先吧。好了那就......
  • Android开发学习之路--基于vitamio的视频播放器(二)
      终于把该忙的事情都忙得差不多了,接下来又可以开始goodgoodstudy,daydayup了。在​​Android开发学习之路–基于vitamio的视频播放器(一)​​中,主要讲了播放器的界面的......
  • AIR32F103(八) 集成Helix MP3解码库播放MP3
    目录AIR32F103(一)合宙AIR32F103CBT6开发板上手报告AIR32F103(二)Linux环境和LibOpenCM3项目模板AIR32F103(三)Linux环境基于标准外设库的项目模板AIR32F103(四)2......
  • 博客园下拉小猫,看板娘,鼠标图标特效
    博客园下拉小猫特效样式效果点击小猫之后会回到网页顶部  使用方法1.在自己的博客园中找到管理->设置页面2.在页首HTML代码中插入<!--悬挂的喵--><script......
  • 抽奖动画 - 播放svga动画
    svga动画本文介绍的动画不是css,js动画,是使用插件播放svga文件。1.需求UI同学在做一个春节活动,活动中需要有个开场动画,原本想的简单,不涉及接口调用逻辑,就直接用做一个gif......
  • 玩转html5画图 - TimeLangoliers - 博客园
    导航​​前言​​​​基本知识​​​​绘制矩形​​​​清除矩形区域​​​​圆弧​​​​路径​​​​绘制线段​​​​绘制贝塞尔曲线​​​​线性渐变​​​​径向渐变......