大家好

不小心在别人博客那看到了个Sakana! Widget,就是在你的网页右下角添加个可拉着玩的小组件

一个gif.png

自己试了下,用起来不错

图片封面.png

就分享一下怎么弄的吧

先看这里-> Github Here,如果你只想弄上面预设的这两个小人的话,引用一下上面网站里现成代码即可,以下为做一个自己的方法


看看我的组件效果

1690722215828gif

第一步

(先说明一下,本人使用的方法可能和Github上写的有点不一样,毕竟它上面的看不太懂…)

先创建一个js文件在你的public/js文件夹里,我这里取名为sakana-init.js

输入以下代码

1
2
3
4
5
6
7
8
9
10
11
function initSakanaWidget() {
const xxx = SakanaWidget.getCharacter("chisato");
xxx.image = "url";
SakanaWidget.registerCharacter("xxx", xxx);

new SakanaWidget({
character: "xxx",
controls: true,
initialState: { i: 1, r: 10 }
}).mount("#sakana-widget");
}

里面的xxx即为你想给你的组件小人取的名,没多大用,

xxx.image里输入你的图片链接即可(要透明且大小为宽高比例1:1的图片)

character和control,initialState等下面会说明其用处

当然在后面得加上一个网页加载时自动执行initSakanaWidget()的代码以及引入所需要的js,在这引入比在head标签前要好一点
我这找ChatGPT生成了一个,自己能用

1
2
3
4
5
6
7
8
document.addEventListener("DOMContentLoaded", () => {
const script = document.createElement("script");
script.src = "https://cdn.jsdelivr.net/npm/[email protected]/lib/sakana.min.js";
script.onload = () => {
initSakanaWidget();
};
document.body.appendChild(script);
});

第二步

在你的css文件里引入以下css:

1
2
3
4
5
#sakana-widget {
position: fixed;
right: 20px;
bottom: 20px;
}

位置可以随便弄,你甚至也可以加上”z-index: -1;”让它成为背景

第三步

inject你的js和css以及这个组件原本所需要的css等,js最好放在body前,css可以放在head前

1
2
3
4
5
# 组件需要的css
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/lib/sakana.min.css">
# 你的js和css
<script src="xxx/sakana-init.js"></script>
<link rel="stylesheet" href="xxx/mycss.css">

再在body里把你的组件容器放上去即可

1
<div id="sakana-widget"></div>

这样一个简单的石蒜模拟器网页小组件就完成了

其它配置

这个组件有很多的可配置的地方,详细的可以看Github

这里复制一下它的类型定义和构造函数选项

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 类型定义
export interface SakanaWidgetState {
/**
* 惯性
*/
i: number;
/**
* 粘性
*/
s: number;
/**
* 衰减
*/
d: number;
/**
* 角度
*/
r: number;
/**
* 高度
*/
y: number;
/**
* 垂直速度
*/
t: number;
/**
* 水平速度
*/
w: number;
}

export interface SakanaWidgetCharacter {
image: string;
initialState: SakanaWidgetState;
}

# 构造函数选项
export interface SakanaWidgetOptions {
/**
* 组件大小,默认 `200`
*/
size?: number;
/**
* 自动适应容器大小 (最小 120px),默认 `false`
*/
autoFit?: boolean;
/**
* 角色,默认 `chisato`
*/
character?: 'chisato' | 'takina';
/**
* 控制栏,默认 `true`
*/
controls?: boolean;
/**
* 展示支撑杆,默认 `true`
*/
rod?: boolean;
/**
* 可拖动,默认 `true`
*/
draggable?: boolean;
/**
* canvas 线条设置,默认 `#b4b4b4` & `10`
*/
stroke?: {
color?: string;
width?: number;
};
/**
* 停止动画的阈值,默认 `0.1`
*/
threshold?: number;
/**
* 旋转角度,默认 `0`
*/
rotate?: number;
}

具体怎么用呢

看看第一步的这个代码

1
2
3
4
5
6
  new SakanaWidget({
character: "xxx",
controls: true,
initialState: { i: 1, r: 10 }
}).mount("#sakana-widget");
}

把你想添加的依次加上就行了

这样你的网页应该就会有个可拖拽弹跳的石蒜模拟器了!