
加载中...
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
前提
在使用APlayer的时候发现了有能根据音乐封面自适应主题颜色,这是第一次接触js的时候,不能说是一点不会,只能说是一窍不通,直接复制官网代码过来也用不了,发现错误了但是是英文,导致开始下载翻译软件,开始百度,后面发现错误在最后一句setTheme(index),得益于js的缺点,导致百度白天也没找到解决方案,到最后才发现index是一个对象,下面还有一个index,需要调用索引setTheme(index.index)这样才有效。
后面看这个js的时候发现它可以根据图片的颜色来获取主色调,博客是有自动获取获取封面主色调的函数的,但是需要图片存放在有数据万象功能的存储桶里,但是需要亿点点的money,本着能白嫖就白嫖的想法,想了一下,把这个插件整合到博客中去,结果很成功,会拖慢一点点的响应速度。免费的还要什么自行车。
下面是官网的函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
   | const colorThief = new ColorThief(); const image = new Image(); const xhr = new XMLHttpRequest(); const setTheme = (index) => {     if (!ap.list.audios[index].theme) {         xhr.onload = function(){             let coverUrl = URL.createObjectURL(this.response);             image.onload = function(){                 let color = colorThief.getColor(image);                 ap.theme(`rgb(${color[0]}, ${color[1]}, ${color[2]})`, index);                 URL.revokeObjectURL(coverUrl)             };             image.src = coverUrl;         }         xhr.open('GET', ap.list.audios[index].cover, true);         xhr.responseType = 'blob';         xhr.send();     } }; setTheme(ap.list.index); ap.on('listswitch', (index) => {     setTheme(index);    //错误在这 });
   | 
 
引入js
找到 _config.butterfly.yml文件,在inject的bottom引入js
1 2 3 4
   | inject:
     bottom:     - <script data-pjax async type="text/javascript" src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/color-thief/2.3.2/color-thief.umd.js"></script>
   | 
 
下面这段js需要插入到主题下的source/main.js函数中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   | const coverColor = async () => {     const root = document.querySelector(":root");     var path = document.getElementById("post-top-bg")?.src;     const colorThief = new ColorThief();     const image = new Image();     if (path != undefined) {         image.src = path;         image.setAttribute('crossOrigin', 'anonymous')         image.onload = function () {           let color = colorThief.getColor(image);                      root.style.setProperty("--bieyinan-bar-background", value);           root.style.setProperty("--bieyinan-main", value);           root.style.setProperty("--bieyinan-theme-op-deep", `rgb(${color[0]}, ${color[1]}, ${color[2]},0.6)`);         }     } }
  coverColor();
  | 
 
不得不说,这个插件还是很好用的,现在也支持了webp格式的图片。