Pixiv - 晚晚喵
Pixiv - KiraraShss
公告
欢迎来到我的博客!这是一则示例公告。
音乐
音乐
暂未播放
0:00/0:00
暂无歌词
暂无歌曲
最新动态
2026年10月
日
一
二
三
四
五
六
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
目录
站点信息
本站使用astro开发,主题参考heo,但本教程具有通用性 本教程使用canvas提取主色 不用往下看了,会造成跨域
function getMainColor(img) {
const canvas = new OffscreenCanvas(1, 1);
const ctx = canvas.getContext("2d");
if (!ctx) return;
ctx.drawImage(img, 0, 0, 1, 1);
const { data } = ctx.getImageData(0, 0, 1, 1);
const rgba=data.join(",").split(",")
document.documentElement.style.setProperty('--heo-main-none',`rgba(${rgba[0]},${rgba[1]},${rgba[2]},0)`)
document.documentElement.style.setProperty('--heo-main-op-light',`rgba(${rgba[0]},${rgba[1]},${rgba[2]},0.05)`)
document.documentElement.style.setProperty('--heo-main-op-deep',`rgba(${rgba[0]},${rgba[1]},${rgba[2]},0.85)`)
document.documentElement.style.setProperty('--heo-main-op',`rgba(${rgba[0]},${rgba[1]},${rgba[2]},0.14)`)
document.documentElement.style.setProperty('--heo-main',`rgba(${rgba})`)
}先用canvas取色,然后将颜色转化为rgba
通过document.documentElement.style.setProperty插入样式
<img crossorigin="anonymous" onload="javascript:getMainColor(this);" />
crossorin允许canvas跨域
onload触发取色
判断当前页面是否存在#post-bg
const path = (document.querySelector("#post-cover") as HTMLImageElement)?.src
if (path == undefined) {
document.documentElement.style.setProperty('--heo-main', 'var(--heo-theme)');
document.documentElement.style.setProperty('--heo-main-op', 'var(--heo-theme-op)');
document.documentElement.style.setProperty('--heo-main-op-deep', 'var(--heo-theme-op-deep)');
document.documentElement.style.setProperty('--heo-main-none', 'var(--heo-theme-none)');
}在pjax:complete中执行