advantages ui updated

This commit is contained in:
2025-11-02 14:03:38 +08:00
parent 0255ea7c8d
commit 98730da5f5

View File

@@ -1,11 +1,11 @@
import { Box, Stack, Image, Flex, Text, SimpleGrid } from '@chakra-ui/react' import { Box, Stack, Image, Flex, Text, SimpleGrid } from '@chakra-ui/react'
import { useState } from 'react' import { motion, useInView } from 'framer-motion'
import { motion } from 'framer-motion' import { useRef } from 'react'
const MotionImage = motion.create(Image) const MotionImage = motion.create(Image)
const MotionFlex = motion.create(Flex) const MotionFlex = motion.create(Flex)
const MotionBox = motion.create(Box) const MotionBox = motion.create(Box)
import { colors } from '../../colors';
const MotionStack = motion(Stack);
interface InfoData { interface InfoData {
id: number id: number
title: string title: string
@@ -15,13 +15,43 @@ interface InfoData {
description: string description: string
} }
const oilCube = [
{
bgColor: 'linear-gradient(to right,#00609E ,#008FD0,#00609E )',
title: '米糠油',
text: '含天然谷維素,具**抗氧化**作用,有助維持血管健康'
},
{
bgColor: 'linear-gradient(to right,#D44E2D ,#EAA72E,#D44E2D )',
title: '芥花籽油',
text: '**富含多元不飽和脂肪酸**Omega-3、6有助降低心血管疾病風險'
},
{
bgColor: 'linear-gradient(to right,#7DAE3A ,#AFC226,#7DAE3A )',
title: '橄欖油',
text: '**富含單元不飽和脂肪酸**Omega-9有助保護心臟健康'
},
{
bgColor: 'linear-gradient(to right,#0098D2 ,#00AFE6,#0098D2 )',
title: '亞麻籽油',
text: '是**亞麻酸**(Omega-3) 的良好來源,有助維持細胞健康'
},
{
bgColor: 'linear-gradient(to right,#D23431 ,#E28C24,#D23431 )',
title: '高油酸葵花籽油',
text: '低飽和脂肪,穩定性高,**適合高溫烹調**'
},
]
const info = [ const info = [
{ {
id: 1, id: 1,
title: "減少壞膽固醇", title: "減少壞膽固醇",
description: `**根據世界衛生組織數據高反式脂肪攝取可令全因死亡率上升34%**冠心病發病率上升21%及死亡率上升24%。全球每年因反式脂肪導致心血管疾病死亡病例已高達54萬人1 description: `**根據世界衛生組織數據高反式脂肪攝取可令全因死亡率上升34%**冠心病發病率上升 21%及死亡率上升24%。全球每年因反式脂肪導致心血管疾病死亡病例已高達54萬人¹
獅球嘜營萃護心油每食用份量含0克反式脂肪有助減少壞膽固醇減低患心臟病嘅風險。`, **獅球嘜營萃護心油每食用份量含0克反式脂肪**有助減少壞膽固醇,減低患心臟病嘅風險。`,
image: "/images/new/1.webp", image: "/images/new/1.webp",
titleImage: "/images/new/adv_img1.webp", titleImage: "/images/new/adv_img1.webp",
titleImage2: "/images/new/adv1.webp" titleImage2: "/images/new/adv1.webp"
@@ -29,9 +59,9 @@ const info = [
{ {
id: 2, id: 2,
title: "黃金比例脂肪酸調配", title: "黃金比例脂肪酸調配",
description: `根據世衛建議,脂肪攝取應以不飽和脂肪為主,當中包括多元與單元不飽和脂肪酸,同時應減少飽和脂肪攝取,以維持整體健康比例。 description: `根據世衛建議,脂肪攝取應以**不飽和脂肪為主,**當中包括多元與單元不飽和脂肪酸,同時應減少飽和脂肪攝取,以維持整體健康比例。
獅球嘜營萃護心油就係根據呢個原則調配出符合黃金比例嘅配方幫助身體攝取每日必需嘅脂肪酸並促進脂溶性維他命A、D、E、K嘅吸收全面支援日常健康所需。 `, 獅球嘜營萃護心油就係根據呢個原則調配出符合**世衛黃金比例**嘅配方²,幫助身體攝取每日必需嘅脂肪酸,並促進**脂溶性維他命A、D、E、K**嘅吸收,全面支援日常健康所需。 `,
image: "/images/new/2.webp", image: "/images/new/2.webp",
titleImage: "/images/new/adv_img2.webp", titleImage: "/images/new/adv_img2.webp",
titleImage2: "/images/new/adv2.webp" titleImage2: "/images/new/adv2.webp"
@@ -39,9 +69,9 @@ const info = [
{ {
id: 3, id: 3,
title: "比一般食油", title: "比一般食油",
description: `Omega-3有助降低三酸甘油脂水平並喺一定程度上減少血管發炎反應從而支援血管彈性及正常血液循環為心臟健康打好基礎。 description: `**Omega-3有助降低三酸甘油脂水平**並喺一定程度上減少血管發炎反應,從而支援血管彈性及正常血液循環,為心臟健康打好基礎。
獅球嘜營萃護心油內嘅Omega-3比例較一般花生油及粟米油高特別有助經常外出用餐嘅都市人平衡脂肪酸攝取比例從而支援心血管健康。 `, **獅球嘜營萃護心油內嘅Omega-3比例較一般花生油及粟米油高**特別有助經常外出用餐嘅都市人平衡脂肪酸攝取比例,從而支援心血管健康。 `,
image: "/images/new/3.webp", image: "/images/new/3.webp",
titleImage: "/images/new/adv_img3.webp", titleImage: "/images/new/adv_img3.webp",
titleImage2: "/images/new/adv3.webp" titleImage2: "/images/new/adv3.webp"
@@ -56,8 +86,7 @@ const info = [
} }
]; ];
const renderCubeDescription = (text: string) => {
const renderDescription = (text: string) => {
const parts = text.split(/(\*\*.*?\*\*)/) const parts = text.split(/(\*\*.*?\*\*)/)
return parts.map((part, index) => { return parts.map((part, index) => {
@@ -72,10 +101,29 @@ const renderDescription = (text: string) => {
}) })
} }
const renderDescription = (text: string) => {
const parts = text.split(/(\*\*.*?\*\*)/)
return parts.map((part, index) => {
if (part.startsWith('**') && part.endsWith('**')) {
const content = part.slice(2, -2)
.replace(/\^2/g, '²')
.replace(/\^1/g, '¹')
return (
<Text as="span" key={index} fontWeight={800} bgColor="#4E8C36" borderRadius="4px" px="2px">
{content}
</Text>
)
}
return <Text as="span" key={index}>{part}</Text>
})
}
function Advantages() { function Advantages() {
const oilCubesRef = useRef(null);
const isOilCubesInView = useInView(oilCubesRef, { once: true });
return ( return (
<Box <Box
position="relative" position="relative"
@@ -90,7 +138,7 @@ function Advantages() {
<SimpleGrid <SimpleGrid
columns={{ base: 1, sm: 1, md: 2 }} columns={{ base: 1, sm: 1, md: 2 }}
p={4} p={4}
w={{ base: '50vw', sm: '50vw', md: '50vw', lg: '50vw', xl: '60vw' }} w={{ base: '50vw', sm: '90vw', md: '90vw', lg: '80vw', xl: '70vw' }}
h={'auto'} h={'auto'}
> >
@@ -100,34 +148,34 @@ function Advantages() {
alignItems="center" alignItems="center"
key={item.id}> key={item.id}>
<Image <Image
w={{ base: '40vw', sm: '40vw', md: '20vw', lg: '20vw', xl: '110px' }} w={{ base: '40vw', sm: '180px', md: '80px', lg: '110px', xl: '110px' }}
src={item.image} src={item.image}
/> />
<Image <Image
mt={'-50px'} mt={{ base: '-30px', sm: '-70px', md: '-30px', lg: '-50px', xl: '-50px' }}
h={{ base: '40vw', sm: '40vw', md: '20vw', lg: '20vw', xl: '80px' }} h={{ base: '40vw', sm: '80px', md: '60px', lg: '80px', xl: '80px' }}
src={item.titleImage2} src={item.titleImage2}
/> />
<Text <Text
mt={'-25px'} mt={{ base: '-25px', sm: '-25px', md: '-15px', lg: '-25px', xl: '-25px' }}
className='font-melle font-xbold' className='font-melle font-xbold'
fontWeight={400} fontWeight={400}
color='white' color='white'
fontSize={{ base: '6vw', sm: '6vw', md: '3vw', lg: '2.5vw', xl: '5xl' }} fontSize={{ base: '6vw', sm: '6vw', md: '3xl', lg: '5xl', xl: '5xl' }}
> >
{item.title} {item.title}
</Text> </Text>
<Image <Image
h={{ base: '40vw', sm: '40vw', md: '20vw', lg: '20vw', xl: item.id != 4 ? '200px' : '300px' }} h={{ base: '40vw', sm: item.id != 4 ? '200px' : '300px', md: item.id != 4 ? '180px' : '280px', lg: item.id != 4 ? '200px' : '300px', xl: item.id != 4 ? '200px' : '300px' }}
src={item.titleImage} src={item.titleImage}
/> />
<Text <Text
w={{ base: '90%', sm: '90%', md: '80%', lg: '80%', xl: '80%' }} w={{ base: '90%', sm: '70%', md: '80%', lg: '80%', xl: '80%' }}
className="font-noto-sans font-demi-light" className="font-noto-sans font-demi-light"
fontSize={{ base: 'md', sm: 'lg', md: 'xl', lg: '2xl', xl: '2xl' }} fontSize={{ base: 'md', sm: 'xl', md: 'xl', lg: '2xl', xl: '2xl' }}
color="white" color="white"
lineHeight="1.8" lineHeight="1.8"
textAlign="left" textAlign="left"
@@ -136,6 +184,55 @@ function Advantages() {
{renderDescription(item.description)} {renderDescription(item.description)}
</Text> </Text>
{item.id === 4 ? (
<Box
width="100%"
display="flex"
flexDirection={'column'}
alignItems="center"
ref={oilCubesRef}
mt={-4}
ml={3}
>
<Flex flexWrap="wrap" justifyContent="center" gap="10px" maxWidth="945px">
{oilCube.map((item, index) => (
<MotionStack
key={index}
initial={{ opacity: 0, scale: 0.8 }}
animate={isOilCubesInView ? { opacity: 1, scale: 1 } : { opacity: 0, scale: 0.8 }}
transition={{ duration: 0.5, delay: index * 0.15 }}
w='300px'
h='100px'
bgImage={item.bgColor}
roundedTopLeft={'30px'}
roundedBottomRight={'30px'}
p={4}
justify="center"
>
<Text
color="white"
className='font-melle font-black'
fontSize="2xl"
mb={-1}
>
{item.title}
</Text>
<Text
color={colors.backgroundColor}
className='font-melle font-medium'
mt={-1}
>
{renderCubeDescription(item.text)}
</Text>
</MotionStack>
))}
</Flex>
</Box>
) : (
<></>
)}
</Stack> </Stack>
))} ))}
</SimpleGrid> </SimpleGrid>