Skip to content

Commit ab03a99

Browse files
authored
feat: 赞助者列表 perf: 关于我们页面 (#124)
2 parents b2623d6 + 5a03fb5 commit ab03a99

4 files changed

Lines changed: 167 additions & 36 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Dependencies
22
/node_modules
3+
package-lock.json
34

45
# Production
56
/build

docs/sponsor.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
---
2+
sidebar_position: 8
3+
hide_table_of_contents: true
4+
---
5+
6+
# 赞助社区
7+
8+
感谢赞助了社区的玩家。
9+
10+
***
11+
12+
## 赞助玩家名单
13+
14+
import SponsorList from '@site/src/components/SponsorList/SponsorList';
15+
16+
<SponsorList
17+
sponsors={[
18+
{ name: "Suifengsama520", amount: "¥10", date: "2026-07-12" },
19+
{ name: "DARKMATTERZ", amount: "¥20", date: "2026-08-03" },
20+
{ name: "waibibabo2009", amount: "¥50", date: "2026-08-03" },
21+
{ name: "NMDHTX", amount: "¥15", date: "2026-08-27" },
22+
]}
23+
/>
24+
25+
## 社区赞助规定
26+
27+
1. 赞助社区为玩家自愿行为,赞助前请确认您的赞助完全出于自愿且未受奖励性诱导;
28+
2. 本社区为公益,赞助行为不会获得任何特权、道具、称号或特殊权限,社区保障所有玩家的游戏体验完全一致;
29+
3. 赞助统一使用人民币核算;
30+
4. 为了方便管理组统计和联络,赞助满 15 元的可以在页面留言;
31+
5. 赞助满 50 元的,如果赞助方有需要,可以跟管理组商量约定这笔钱是用于某个特定活动、或者在某个时间内用完。如果时间到了或活动搞完了还有剩余,自动转为无限制赞助,用于社区其他运营开支;
32+
6. 提供实物作为赞助的,以赞助时确定的价格为准。
33+
34+
请联系管理员进行赞助。
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import React, { useEffect, useRef, useState } from 'react';
2+
3+
const SponsorList = ({ sponsors = [] }) => {
4+
const [visible, setVisible] = useState([]);
5+
const cardRefs = useRef([]);
6+
7+
useEffect(() => {
8+
if (!('IntersectionObserver' in window)) {
9+
setVisible(sponsors.map(() => true));
10+
return;
11+
}
12+
const observer = new IntersectionObserver(
13+
(entries) => {
14+
entries.forEach((entry) => {
15+
const index = Number(entry.target.dataset.index);
16+
if (entry.isIntersecting) {
17+
setVisible((prev) => {
18+
const next = [...prev];
19+
next[index] = true;
20+
return next;
21+
});
22+
observer.unobserve(entry.target);
23+
}
24+
});
25+
},
26+
{ threshold: 0.15, rootMargin: '0px 0px -20px 0px' }
27+
);
28+
cardRefs.current.forEach((el) => el && observer.observe(el));
29+
return () => observer.disconnect();
30+
}, [sponsors]);
31+
32+
useEffect(() => {
33+
setVisible(sponsors.map(() => false));
34+
const timer = setTimeout(() => {
35+
if (cardRefs.current.length && 'IntersectionObserver' in window) {
36+
const observer = new IntersectionObserver(
37+
(entries) => {
38+
entries.forEach((entry) => {
39+
const index = Number(entry.target.dataset.index);
40+
if (entry.isIntersecting) {
41+
setVisible((prev) => {
42+
const next = [...prev];
43+
next[index] = true;
44+
return next;
45+
});
46+
observer.unobserve(entry.target);
47+
}
48+
});
49+
},
50+
{ threshold: 0.15, rootMargin: '0px 0px -20px 0px' }
51+
);
52+
cardRefs.current.forEach((el) => el && observer.observe(el));
53+
return () => observer.disconnect();
54+
}
55+
}, 100);
56+
return () => clearTimeout(timer);
57+
}, [sponsors]);
58+
59+
return (
60+
<div className="grid grid-cols-[repeat(auto-fill,minmax(260px,1fr))] gap-6 max-w-6xl mx-auto my-8 px-4">
61+
{sponsors.map((sponsor, index) => {
62+
const isVisible = visible[index] || false;
63+
const delay = (index % 6) * 60;
64+
65+
return (
66+
<div
67+
key={index}
68+
ref={(el) => (cardRefs.current[index] = el)}
69+
data-index={index}
70+
className='bg-white dark:bg-[#1f262b] rounded-2xl p-5 text-center border border-gray-200 dark:border-[#354048] shadow-sm transition-all duration-300 ease-out hover:-translate-y-1.5 hover:shadow-lg hover:border-[#f08a7f]"}'
71+
style={{ transitionDelay: isVisible ? `${delay}ms` : '0ms' }}
72+
>
73+
{/* 名称:强制单行,不换行,且留足空间 */}
74+
<div className="text-lg font-semibold text-gray-800 dark:text-gray-100 whitespace-nowrap overflow-visible">
75+
{sponsor.name || '匿名赞助者'}
76+
</div>
77+
78+
{/* 金额 + 日期 */}
79+
{(sponsor.amount || sponsor.date) && (
80+
<div className="flex justify-center gap-2 mt-1 flex-wrap">
81+
{sponsor.amount && (
82+
<span className="text-xs bg-gray-100 dark:bg-[#2a333a] text-gray-600 dark:text-gray-300 px-2 py-0.5 rounded-full">
83+
{sponsor.amount}
84+
</span>
85+
)}
86+
{sponsor.date && (
87+
<span className="text-xs bg-gray-100 dark:bg-[#2a333a] text-gray-600 dark:text-gray-300 px-2 py-0.5 rounded-full">
88+
{sponsor.date}
89+
</span>
90+
)}
91+
</div>
92+
)}
93+
94+
{/* 留言 */}
95+
{sponsor.message && (
96+
<div className="text-sm text-gray-600 dark:text-gray-400 mt-2 static border-t border-dashed border-gray-200 dark:border-[#354048] pt-2">
97+
{sponsor.message}
98+
</div>
99+
)}
100+
</div>
101+
);
102+
})}
103+
</div>
104+
);
105+
};
106+
107+
export default SponsorList;

src/pages/about.md

Lines changed: 25 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,17 @@ hide_table_of_contents: true
88

99
## 简介
1010

11-
我们 ( 即 RedStarMC社区 / RedStarMCCommunity / 红星我的世界社区 ) 目前正依托单一服务器,开展核心社区运营工作。
11+
我们 ( 即 RedStarMC社区 / RedStarMCCommunity / 红星我的世界社区 ) 目前正依托 Minecraft 服务器,开展核心社区运营工作。
1212
但我们的发展愿景不止于此,我们不仅希望能为玩家提供优质的生存游戏体验,还计划拓展多元化游戏玩法,包括各类小游戏、模组生存、创造服务器等。
1313
同时,我们希望能组建由玩家组成的建筑玩家社区、开发玩家社区、动画制作玩家社区等各类玩家玩家社区,为各位玩家提供一个快乐游玩、共同创造的平台。
1414

1515
目前,社区已搭建维基和 Github 组织,为社区发展与玩家互动提供坚实支撑。未来,我们计划进一步开发用户系统,以支持外置登录等相关功能,持续完善社区服务体系。
1616

1717
我们郑重承诺,社区将始终保持公益性质,不在游戏内设置任何收费项目及氪金内容,保障每一位玩家的公平游戏权益。
1818

19-
我们致力于打造一个和谐友爱的社区环境,坚决杜绝各类不良行为,包括但不限于低俗言论、不良图片传播、不雅行为及网络暴力等,共同守护健康、积极的社区氛围。
19+
我们致力于打造一个和谐友爱的社区环境,坚决杜绝各类不良行为,包括但不限于发表低俗言论、传播不良图片、制作不雅建筑及网络暴力等,共同守护健康、积极的社区氛围。
2020

21-
我们以 Minecraft 游戏服务器作为构成社区的组成部分,社区的组成部分同时还包括
22-
23-
* 维基
24-
* QQ 群/频道
25-
* Github 组织
26-
* 外置登陆身份系统 (未开发完毕,未投入使用)
27-
28-
我们目前致力于为 Minecraft:Java Edition 多人游戏服务器的创作。
29-
30-
对于我们的 Minecraft 游戏服务器 通常被称为 “红星服务器”。
21+
我们目前致力于为 Minecraft:Java Edition 多人游戏服务器的创作,通常称为 “红星服务器”。
3122

3223
:::info 我们的宗旨
3324

@@ -41,55 +32,53 @@ hide_table_of_contents: true
4132

4233
### 组成部分
4334

44-
社区下辖以下部分
35+
社区由以下部分组成
4536

4637
* 管理组
4738
* Minecraft 服务器
48-
* 官网、维基
39+
* 官网
40+
* 维基
4941
* 社区所管辖的 QQ 群/频道
5042
* RedStarMC Github 组织
5143
* 外置登陆身份系统 (未开发完毕,未投入使用)
5244

53-
除第一项 `管理组` 外,均为实际存在的社区公共场所。
45+
:::note 社区所有权
5446

55-
:::note 社区所有权
47+
社区归全体玩家所有,社区利益即为全体玩家利益。社区由管理组领导,管理组实行民主集中制。
5648

57-
社区归全体玩家所有,社区利益即为全体玩家利益
49+
`管理组` 是社区的管理机构,管理其他各部分,对社区和玩家负责,受玩家监督,保证社区正常运转。管理组以全体玩家利益为自己的利益
5850

5951
:::
6052

61-
:::tip
53+
### 玩家
6254

63-
`管理组` 是社区的管理机构,管理其他各部分,对社区和玩家负责,受玩家监督,保证社区正常运转
55+
所有正式加入社区且未被封禁的成员均为玩家,担任社区职务或加入管理组的前提是一名玩家
6456

65-
`管理组` 是从玩家中而来,`管理组` 成员均为社区玩家。
57+
### 社区职务
6658

67-
:::
59+
社区职务包括以下职务:
6860

69-
### 社区人员
70-
71-
除因其他原因留在社区管辖范围内的其他社区代表,社区内所有人均为 `玩家`
72-
73-
### 社区职务
74-
75-
社区职务包括下列内容
76-
77-
* `腐竹` 社区的主要管理者,负责社区各个方面。
78-
* `运行维护`(简称 `运维` ) 社区的主要管理者,主要负责运营,社区管理,保障社区各项服务正常运转。
61+
* `腐竹` 社区的主要管理者,负责统筹社区全面工作。
62+
* `运行维护`(简称 `运维` ) 社区的主要管理者,主要负责运营,社区维护,保障社区各项服务正常运转。
7963
* `管理` 社区的主要管理者,协助 `腐竹``运维` ,主要负责社区管理和运营。
8064
* `协管` 主要负责社区管理,协助 `腐竹``运维`
8165
* `建筑师` 主要负责社区内 Minecraft 服务器的建筑等内容创作。
82-
* `核心玩家` 社区的主要监督者,监督其他职务,和许多玩家深入交流,确保管理组能准确执行全体玩家的意愿。
83-
* `开发 / 技术人员` 社区负责其他方面的人员。
66+
* `核心玩家` 社区的主要监督者,监督其他职务,和玩家深入交流,确保管理组能准确执行全体玩家的意愿。
67+
* `开发 / 技术人员` 社区负责其他方面的人员,单独列出。
68+
69+
`腐竹``运行维护` 外,其他职位正式担任前均可设置一段实习期。实习期的长度、是否实行、是否转正由管理组决定。实习期职务在原职务名前加 `实习``见习`
70+
`协管``建筑师``开发 / 技术人员` 直接由社区玩家自行申请担任。
8471

85-
### 管理组
72+
### 管理组 {#Management-Committee}
8673

87-
管理组由以下人员组成
74+
管理组由以下人员组成
8875

8976
* 组长
9077
* 副组长若干人
9178
* 组员若干人
92-
* 核心玩家若干
79+
80+
管理组实行集体领导、民主集中、个别酝酿、会议决定。
81+
管理组的职权包括:任免 `腐竹``运行维护``管理`,制定社区规则,决定是否封禁玩家,决定其他社区重大事项。
9382

9483
## 其他
9584

0 commit comments

Comments
 (0)