[Update] Add supporter period.

This commit is contained in:
Sakamoto Shiina
2025-01-27 20:14:36 +09:00
parent eb9519cfdd
commit ef5ec8732a
3 changed files with 97 additions and 21 deletions

View File

@@ -5,7 +5,7 @@ import styles from "./SupportUsContainer.module.scss";
export const SupportUsContainer = () => { export const SupportUsContainer = () => {
return ( return (
<div id="ttt" className={styles.support_us_container}> <div id="support_us_container" className={styles.support_us_container}>
<img className={styles.fanbox_img} src={fanbox_img} /> <img className={styles.fanbox_img} src={fanbox_img} />
<div className={styles.support_us_button_wrapper}> <div className={styles.support_us_button_wrapper}>
<div className={styles.fanbox_wrapper}> <div className={styles.fanbox_wrapper}>

View File

@@ -11,6 +11,7 @@ import {
import json_data from "./data.json"; import json_data from "./data.json";
const target_supporting_month = "2025-01"; const target_supporting_month = "2025-01";
const calc_support_period = ["2024-10", "2024-11", "2024-12", "2025-01"];
const SHUFFLE_INTERVAL_TIME = 20000; const SHUFFLE_INTERVAL_TIME = 20000;
@@ -142,9 +143,7 @@ export const SupportersWrapper = () => {
const random_delay = `${randomMinMax(0.1, 6).toFixed(1)}s`; const random_delay = `${randomMinMax(0.1, 6).toFixed(1)}s`;
const image_wrapper_classname = clsx(styles.supporter_image_wrapper, {
[styles.mogu_image]: target_plan === "もぐもぐ_2000",
});
const file_name = is_and_you ? "and_you" : `supporter_${item.supporter_id}`; const file_name = is_and_you ? "and_you" : `supporter_${item.supporter_id}`;
const label_img_src = getSupportersLabelsPath(file_name); const label_img_src = getSupportersLabelsPath(file_name);
@@ -172,27 +171,38 @@ export const SupportersWrapper = () => {
</div> </div>
); );
const supporter_image_wrapper_classname = clsx(styles.supporter_image_wrapper, {
[styles.mogu_image]: target_plan === "もぐもぐ_2000",
});
return is_and_you ? ( return is_and_you ? (
<a href="#ttt"> <a href="#support_us_container">
<div key={item.supporter_id} className={styles.supporter_image_container}>
<div
key={item.supporter_id}
className={supporter_image_wrapper_classname}
style={{ "--delay": random_delay }}
>
<img className={styles.supporter_image} src={img_src} />
{supporterLabelComponent()}
<AndYouIcon />
</div>
</div>
</a>
): img_src ? (
<div key={item.supporter_id} className={styles.supporter_image_container}>
<div <div
key={item.supporter_id} key={item.supporter_id}
className={image_wrapper_classname} className={supporter_image_wrapper_classname}
style={{ "--delay": random_delay }} style={{ "--delay": random_delay }}
> >
<img className={styles.supporter_image} src={img_src} /> <img className={styles.supporter_image} src={img_src} />
{supporterLabelComponent()} {supporterLabelComponent()}
<AndYouIcon />
</div> </div>
</a> <SupporterPeriodContainer settings={item}/>
): img_src ? (
<div
key={item.supporter_id}
className={image_wrapper_classname}
style={{ "--delay": random_delay }}
>
<img className={styles.supporter_image} src={img_src} />
{supporterLabelComponent()}
</div> </div>
) : null; ) : null;
}); });
@@ -230,3 +240,36 @@ const AndYouIcon = () => {
</> </>
); );
}; };
const SupporterPeriodContainer = ({settings}) => {
const period_data = extractKeys(settings, calc_support_period);
return (
<div className={styles.supporter_period_container}>
{Object.entries(period_data).map(([key, item]) => {
if (item === "") return null;
const class_name = clsx(styles.period_box, {
[styles.mogu_bar]: item === "もぐもぐ_2000",
[styles.mochi_bar]: item === "もちもち_1000",
[styles.fuwa_bar]: item === "ふわふわ_500",
[styles.basic_bar]: item === "Basic_300",
});
return <div className={class_name}></div>
})}
</div>
);
};
const extractKeys = (data, keys_to_extract) => {
const result = {};
for (const key of keys_to_extract) {
if (key in data) {
result[key] = data[key];
}
}
return result;
};

View File

@@ -5,16 +5,24 @@
align-content: start; align-content: start;
flex-wrap: wrap; flex-wrap: wrap;
column-gap: 1.4rem; column-gap: 1.4rem;
row-gap: 0.8rem; row-gap: 1.2rem;
}
.supporter_image_container {
position: relative;
width: 18rem;
display: flex;
flex-direction: column;
gap: 0.3rem;
} }
.supporter_image_wrapper { .supporter_image_wrapper {
position: relative; position: relative;
width: 18rem;
overflow: hidden; overflow: hidden;
} }
.supporter_image { .supporter_image {
position: relative;
width: 100%; width: 100%;
} }
@@ -121,7 +129,7 @@
transform: translate(-50%, -50%) rotate(90deg); transform: translate(-50%, -50%) rotate(90deg);
} }
.supporter_image_wrapper { .supporter_image_container {
&:hover .and_you_container { &:hover .and_you_container {
top: 36%; top: 36%;
transform: translate(-50%, -50%) rotate(180deg); transform: translate(-50%, -50%) rotate(180deg);
@@ -138,7 +146,7 @@
} }
} }
.supporter_image_wrapper.and_you_image { .supporter_image_container.and_you_image {
cursor: pointer; cursor: pointer;
&:active { &:active {
opacity: 0.6; opacity: 0.6;
@@ -186,3 +194,28 @@
opacity: 0; opacity: 0;
} }
} }
.supporter_period_container {
display: flex;
gap: 0.2rem;
padding-left: 0.4rem;
}
.period_box {
width: 1.8rem;
height: 0.3rem;
border-radius: 0.3rem;
&.mogu_bar {
background-color: var(--dark_basic_text_color);
}
&.mochi_bar {
background-color: var(--received_300_color);
}
&.fuwa_bar {
background-color: #5788a2;
}
&.basic_bar {
background-color: var(--dark_800_color);
}
}