Skip to content

Commit 21b09da

Browse files
EunbinJungahk0413mtm-git1018
authored
Dev (#154)
* [fix] 챗봇 추천 페이지 수정 및 기능추가 (#130) * [fix] 논알콜일 시 payload 값 수정 * [fix] options 기본으로 수정 * [feat] 다시 시작하기 추가 * [feat] 채팅 캡처기능 추가 * [fix] currentStep 제거 * [fix] 파비콘 추가 및 헤더 메뉴 네이밍 수정 * [style] layout 모바일 대응 추가 * Design/main#11 (#131) * [style] 배경 * [design] 랜딩페이지 3d모델 * 3d 렌더링 * Style/main page 2#122 (#132) * [style]마이페이지 슬라이드 퍼블리싱 * [style] 메인페이지 슬라이드 * [docs]provider문서 정리 * [style] 메인페이지 스타일 간격조정 * [feat]알림 설정처리 * [stype]메인페이지 반응형 * [feat] 나만의 바 삭제 동기화 * [feat] 마이페이지 전체삭제 * [style] 메인페이지 반응형 * [feat] 마이페이지 푸시 오류 수정 * [docs]미 사용 파일 삭제 * [style] 메인3d이미지 스크롤 실험div제거 * Style/메인페이지 슬라이드영역 (#135) * [style]마이페이지 슬라이드 퍼블리싱 * [style] 메인페이지 슬라이드 * [docs]provider문서 정리 * [style] 메인페이지 스타일 간격조정 * [feat]알림 설정처리 * [stype]메인페이지 반응형 * [feat] 나만의 바 삭제 동기화 * [feat] 마이페이지 전체삭제 * [style] 메인페이지 반응형 * [feat] 마이페이지 푸시 오류 수정 * [docs]미 사용 파일 삭제 * [style] 메인3d이미지 스크롤 실험div제거 * [style] 메인페이지 슬라이드 반응형 * [style]메인페이지 이미지교체 * [style] 시맨틱구조 * [style] 모바일 메인배경 위치조정 * [fix] 화면 리사이징시 슬라이드 고정 버그 해결 * [fix] 브라우저 리사이징 버그 수정 * [chore]포매팅 * [fix] 로그아웃 시 auth/me api 자동호출로 401 에러 (#136) * [fix] 로그아웃 시 auth/me 자동호출로 401 에러 해결 * [fix] 로그인 새로고침 시 오류 로직 수정 * [fix] 리다이렉트 setTimeout 추가 * Design/main#11 (#138) * [style] 배경 * [design] 랜딩페이지 3d모델 * 3d 렌더링 * 로고,텍스트 추가 * 패키지제이슨 * 메인작업 * 카메라액션 취소 * 별 애니메이션 취소 * 대문자 * [fix] 레이아웃 분리 (#139) * Refactor/recipe fetch (#140) * [refactor] 무한스크롤 tanstack * [refactor] 레시피페이지 리팩토링 * [refactor] 아코디언박스 * [feat]필터링 뒤로가기 스크롤 저장 * [chore] 머지 전 커밋 * [chore]머지 전 커밋 누락 내용 커밋 * [refactor]리팩토링 커밋 * [fix] 경로 오류 수정 * 경로 수정 * [fix] 경로수정 * Feat/write#19 (#142) * [feat] 글쓰기 기능 * [feat] 포스트 작성 기능 * Feat/communityscroll#23 (#114) * [feat] 스크롤링구현 * [feat] 주소, api설정 * [feat] 커뮤니티 탭, 필터 패치로직 * [feat] lastLikeCount, lastCommentCount, 추가 * [fix] 코멘트 삭제수정 마이페이지에선 뗄수있게 myPage props 추가 * 옵셔널로 수정 * 오류 수정 * [feat] 글쓰기 기능 * 카테고리필수 * [feat] 포스트 무한스크롤 + 글쓰기기능 이미지추가 * [feat] 이미지 스와이퍼 * [feat] 프로필 쑤리 이미지 * [feat] 댓글 누르면 댓글 섹션으로 가기 * [feat] 좋아요기능(아직 좋아요받아오는건 못함 api필요) * [feat] 게시물 수정 * [feat] 글 수정 * [refactor] 코드 조금정리 * [feat] 작성자본인만 글수정삭제 * [feat]글 삭제기능 * [feat] 칵테일태그 * [fix]칵테일, 쉐어 기능 * 수 라우터, 비로그인처리 * 타입 수정 * 타입 수정 * 타입수정 * 타입수정 * 타입수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 충돌해결 * 오류 수정 * 오류 수정 * 오류 수정 * [fix] 이미지 카운트, 10개 제한 * [fix] 글쓰기 placeholder * [fix] 공유 url 수정 * [fix] 프로필배경 지우기 * [fix] 플로팅탭 미디어쿼리 수정 * [fix] 수정 모달 * 댓글실시간반영 시도 * 수정 * [fix] 수정모달 로직 수정 * 수정로직 수정 * [feat] edit수정 * 타입오류 * [feat] 좋아요로직 수정 * [fix] 칵테일태그 너비 수정 * 글쓰기 로그인검사 * 버그들 수정 * 반응형 * 파일명 대문자수정 * [fix] MainSlide 수정 (#143) * [fix] MainSlide 수정 * [style] MainSlide 사진 추가 * Refactor/칵테일 정렬 기능 수정 (#144) * [refactor] 무한스크롤 tanstack * [refactor] 레시피페이지 리팩토링 * [refactor] 아코디언박스 * [feat]필터링 뒤로가기 스크롤 저장 * [chore] 머지 전 커밋 * [chore]머지 전 커밋 누락 내용 커밋 * [refactor]리팩토링 커밋 * [refactor] 정렬 중복아이템문제 * [feat] 칵테일 정렬기능 * [fix]댓글 알림 수정 * [chore] 충돌사항 수정 * [fix]충돌에러수정 * [style] 폰트 추가 * [fix]파일 내 코드중복 수정 * [chore]포매팅 * [fix]타입중복 수정 * [chore]포매팅 * docs/ 폰트 추가 및 삭제 (#146) * [refactor] 무한스크롤 tanstack * [refactor] 레시피페이지 리팩토링 * [refactor] 아코디언박스 * [feat]필터링 뒤로가기 스크롤 저장 * [chore] 머지 전 커밋 * [chore]머지 전 커밋 누락 내용 커밋 * [refactor]리팩토링 커밋 * [refactor] 정렬 중복아이템문제 * [feat] 칵테일 정렬기능 * [fix]댓글 알림 수정 * [chore] 충돌사항 수정 * [docs] 필요없는 폰트파일 정리 * [fix] scroll 위치이동 * Feat/write#19 (#147) * [feat] 글쓰기 기능 * [feat] 포스트 작성 기능 * Feat/communityscroll#23 (#114) * [feat] 스크롤링구현 * [feat] 주소, api설정 * [feat] 커뮤니티 탭, 필터 패치로직 * [feat] lastLikeCount, lastCommentCount, 추가 * [fix] 코멘트 삭제수정 마이페이지에선 뗄수있게 myPage props 추가 * 옵셔널로 수정 * 오류 수정 * [feat] 글쓰기 기능 * 카테고리필수 * [feat] 포스트 무한스크롤 + 글쓰기기능 이미지추가 * [feat] 이미지 스와이퍼 * [feat] 프로필 쑤리 이미지 * [feat] 댓글 누르면 댓글 섹션으로 가기 * [feat] 좋아요기능(아직 좋아요받아오는건 못함 api필요) * [feat] 게시물 수정 * [feat] 글 수정 * [refactor] 코드 조금정리 * [feat] 작성자본인만 글수정삭제 * [feat]글 삭제기능 * [feat] 칵테일태그 * [fix]칵테일, 쉐어 기능 * 수 라우터, 비로그인처리 * 타입 수정 * 타입 수정 * 타입수정 * 타입수정 * 타입수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 충돌해결 * 오류 수정 * 오류 수정 * 오류 수정 * [fix] 이미지 카운트, 10개 제한 * [fix] 글쓰기 placeholder * [fix] 공유 url 수정 * [fix] 프로필배경 지우기 * [fix] 플로팅탭 미디어쿼리 수정 * [fix] 수정 모달 * 댓글실시간반영 시도 * 수정 * [fix] 수정모달 로직 수정 * 수정로직 수정 * [feat] edit수정 * 타입오류 * [feat] 좋아요로직 수정 * [fix] 칵테일태그 너비 수정 * 글쓰기 로그인검사 * 버그들 수정 * 반응형 * 파일명 대문자수정 * 모바일 이미지 * 메인 수정 * 3d모델 * [style] 폰트 추가 * [feat] 스크롤 버튼 추가 * [fix] 시작 애니메이션 원복 * [docs]README * Feat/write#19 (#148) * [feat] 글쓰기 기능 * [feat] 포스트 작성 기능 * Feat/communityscroll#23 (#114) * [feat] 스크롤링구현 * [feat] 주소, api설정 * [feat] 커뮤니티 탭, 필터 패치로직 * [feat] lastLikeCount, lastCommentCount, 추가 * [fix] 코멘트 삭제수정 마이페이지에선 뗄수있게 myPage props 추가 * 옵셔널로 수정 * 오류 수정 * [feat] 글쓰기 기능 * 카테고리필수 * [feat] 포스트 무한스크롤 + 글쓰기기능 이미지추가 * [feat] 이미지 스와이퍼 * [feat] 프로필 쑤리 이미지 * [feat] 댓글 누르면 댓글 섹션으로 가기 * [feat] 좋아요기능(아직 좋아요받아오는건 못함 api필요) * [feat] 게시물 수정 * [feat] 글 수정 * [refactor] 코드 조금정리 * [feat] 작성자본인만 글수정삭제 * [feat]글 삭제기능 * [feat] 칵테일태그 * [fix]칵테일, 쉐어 기능 * 수 라우터, 비로그인처리 * 타입 수정 * 타입 수정 * 타입수정 * 타입수정 * 타입수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 충돌해결 * 오류 수정 * 오류 수정 * 오류 수정 * [fix] 이미지 카운트, 10개 제한 * [fix] 글쓰기 placeholder * [fix] 공유 url 수정 * [fix] 프로필배경 지우기 * [fix] 플로팅탭 미디어쿼리 수정 * [fix] 수정 모달 * 댓글실시간반영 시도 * 수정 * [fix] 수정모달 로직 수정 * 수정로직 수정 * [feat] edit수정 * 타입오류 * [feat] 좋아요로직 수정 * [fix] 칵테일태그 너비 수정 * 글쓰기 로그인검사 * 버그들 수정 * 반응형 * 파일명 대문자수정 * 모바일 이미지 * 메인 수정 * 3d모델 * 메인 수정 * 아래칵테일잔수정 * [fix] 로그인 시 여러번 뜨는 toast 알림 이슈 수정 * fix/메인페이지 아코디언박스 오류 수정 (#151) * [refactor] 무한스크롤 tanstack * [refactor] 레시피페이지 리팩토링 * [refactor] 아코디언박스 * [feat]필터링 뒤로가기 스크롤 저장 * [chore] 머지 전 커밋 * [chore]머지 전 커밋 누락 내용 커밋 * [refactor]리팩토링 커밋 * [refactor] 정렬 중복아이템문제 * [feat] 칵테일 정렬기능 * [fix]댓글 알림 수정 * [chore] 충돌사항 수정 * [docs] 필요없는 폰트파일 정리 * [feat]sse설정 * [feat]sse알림설정 * [chore]머지후 커밋 * [style] 메인페이지 아코디언 오류 수정 * [feat]알림 SSE기능 * [fix] 수정 * [fix] 다시 수정 * 수정 * 수정 * 메인 칵테일로고 반응형 * 수정 --------- Co-authored-by: ahk0413 <[email protected]> Co-authored-by: mtm-git1018 <[email protected]> Co-authored-by: ahk0413 <[email protected]>
1 parent f17d1cb commit 21b09da

File tree

8 files changed

+53
-24
lines changed

8 files changed

+53
-24
lines changed

src/domains/community/detail/ImageSlide.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ function ImageSlide({ imageUrls }: { imageUrls: string[] }) {
3737
quality={90}
3838
priority
3939
onLoad={() => handleImageLoad(img)}
40-
onError={() => handleImageLoad(img)}
40+
onError={(e) => {
41+
// 402 에러 등으로 이미지 로딩 실패 시 fallback 이미지 사용
42+
e.currentTarget.src = '/CocktailDrop.webp';
43+
handleImageLoad(img);
44+
}}
4145
className={`object-contain w-full max-h-[400px] transition-opacity duration-300 ${
4246
loadedImages.has(img) ? 'opacity-100' : 'opacity-0'
4347
}`}

src/domains/community/main/PostCard.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ function PostCard({ posts, isLoading, isEnd, onLoadMore }: Props) {
106106
width={105}
107107
height={105}
108108
className="w-full h-full object-cover self-center rounded-md"
109+
onError={(e) => {
110+
// 402 에러 등으로 이미지 로딩 실패 시 fallback 이미지 사용
111+
e.currentTarget.src = '/CocktailDrop.webp';
112+
}}
109113
/>
110114
)}
111115
</figure>

src/domains/community/write/image-upload/UploadedImage.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ function UploadedImage({ uploadedFile, setUploadedFile }: Props) {
6868
width={100}
6969
height={100}
7070
unoptimized={true} // next/image가 외부 url 처리 못 하면 이 옵션도 추가 가능
71+
onError={(e) => {
72+
// 402 에러 등으로 이미지 로딩 실패 시 fallback 이미지 사용
73+
e.currentTarget.src = '/CocktailDrop.webp';
74+
}}
7175
/>
7276
<figcaption className="sr-only">업로드된 이미지입니다</figcaption>
7377
<button

src/domains/main/cocktailDrop/CocktailDrop.tsx

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import Image from 'next/image';
44
import Cocktailcup from '../../../../public/CocktailDrop.webp';
5-
import { useLayoutEffect, useRef } from 'react';
5+
import { useLayoutEffect, useRef, useState } from 'react';
66
import gsap from 'gsap';
77
import { ScrollTrigger } from 'gsap/all';
88
import PassBtn from './PassBtn';
@@ -15,6 +15,7 @@ interface CocktailDropProps {
1515

1616
function CocktailDrop({ isDesktop = false }: CocktailDropProps) {
1717
const containerRef = useRef<HTMLDivElement>(null);
18+
const cupRef = useRef<HTMLDivElement>(null);
1819
const logoRef = useRef<HTMLDivElement>(null);
1920
const line1Ref = useRef<HTMLDivElement>(null);
2021
const line2Ref = useRef<HTMLDivElement>(null);
@@ -43,25 +44,38 @@ function CocktailDrop({ isDesktop = false }: CocktailDropProps) {
4344
}
4445
);
4546

46-
// 로고 위에서 아래로 자연스럽게 등장
47-
const screenWidth = window.innerWidth;
47+
const cupElement = cupRef.current;
48+
const logoElement = logoRef.current;
4849

49-
const viewportHeight = window.innerHeight;
50-
const isTablet = screenWidth >= 640 && screenWidth < 1024;
51-
const isMobile = screenWidth < 640;
50+
if (!cupElement || !logoElement) return;
5251

53-
// 뷰포트 높이 기반으로 로고 위치 계산
54-
const logoFinalY = isMobile
55-
? `-${viewportHeight * 0.3}px`
56-
: isTablet
57-
? `-${viewportHeight * -0.8}px`
58-
: '210px';
52+
const cupRect = cupElement.getBoundingClientRect();
53+
const logoRect = logoElement.getBoundingClientRect();
5954

55+
// container 기준 상대 위치 계산
56+
const containerTop = containerRef.current?.getBoundingClientRect().top || 0;
57+
const cupTopRelative = cupRect.top - containerTop + 10;
58+
console.log('containerTop', containerTop);
59+
console.log('cupTopRelative', cupTopRelative);
60+
console.log('logoRect.height', logoRect.height);
61+
62+
const getFinalY = (width: number): number => {
63+
if (width >= 1800) return 200;
64+
if (width >= 1400) return 10;
65+
if (width >= 1024) return 295;
66+
if (width >= 800) return 50;
67+
if (width === 768) return -30;
68+
return -235;
69+
};
70+
71+
// 내부에서 사용
72+
const finalY = getFinalY(window.innerWidth);
73+
console.log('finalY', finalY);
6074
gsap.fromTo(
6175
logoRef.current,
6276
{ y: -300, opacity: 0 },
6377
{
64-
y: logoFinalY, // 뷰포트 높이 기반 계산
78+
y: finalY, // 뷰포트 높이 기반 계산
6579
opacity: 1,
6680
duration: 3,
6781
ease: 'power3.out',
@@ -82,7 +96,7 @@ function CocktailDrop({ isDesktop = false }: CocktailDropProps) {
8296
return (
8397
<div
8498
ref={containerRef}
85-
className="relative w-full lg:min-h-[120vh] md:min-h-[95vh] min-h-[87vh] flex flex-col lg:justify-center md:justify-center justify-end items-center mt-10 overflow-hidden"
99+
className="relative w-full xl:min-h-[140vh] lg:min-h-[120vh] md:min-h-[95vh] min-h-[87vh] flex flex-col lg:justify-center md:justify-center justify-end items-center mt-10 overflow-hidden"
86100
id="scroll-fixed"
87101
>
88102
{/* 대각선 줄 1 */}
@@ -97,7 +111,7 @@ function CocktailDrop({ isDesktop = false }: CocktailDropProps) {
97111
/>
98112

99113
{/* 로고 */}
100-
<div ref={logoRef} className="absolute z-4 lg:w-125 md:w-115 w-65 lg:h-110 md:h-90 h-40">
114+
<div ref={logoRef} className="absolute z-4 lg:w-125 md:w-115 w-65 lg:h-60 md:h-50 h-20">
101115
<Image
102116
src="/logo.svg"
103117
alt="로고 이미지"
@@ -109,7 +123,7 @@ function CocktailDrop({ isDesktop = false }: CocktailDropProps) {
109123
</div>
110124

111125
{/* 컵 이미지 - 모바일에서 바닥에 붙도록 */}
112-
<div className="z-5 absolute bottom-0">
126+
<div className="z-5 absolute bottom-0" ref={cupRef}>
113127
<Image
114128
src={Cocktailcup}
115129
alt="칵테일 컵"

src/domains/main/components/3d/HomeLogo.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Image from 'next/image';
33
function HomeLogo({ isDesktop }: { isDesktop: boolean }) {
44
return (
55
<div
6-
className="z-5 absolute md:top-22 md:left-10 md:translate-none top-30 left-1/2 -translate-x-1/2"
6+
className="z-5 absolute top-30 left-1/2 -translate-x-1/2 lg:absolute lg:top-20 lg:left-10 lg:translate-none md:relative md:top-30 md:left-auto md:translate-none flex justify-center items-center"
77
style={{ width: !isDesktop ? 400 : 580, height: !isDesktop ? 70 : 210 }}
88
>
99
<Image src={'/logo.svg'} alt="로고 이미지" fill priority className="object-contain" />

src/domains/main/components/3d/Landing.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ function Landing({ setIsLoading, isDesktop }: Props) {
1919
return (
2020
<>
2121
<div className="page-layout max-w-full">
22-
<div className="relative w-full h-screen">
22+
<div className="relative w-full h-screen flex flex-col md:items-center">
2323
{isDesktop ? (
2424
<HomeModel onLoaded={() => setModelLoaded(true)} />
2525
) : (

src/domains/main/components/3d/ModelImage.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,14 @@ function ModelImage({ onLoaded }: Props) {
1111
onLoaded();
1212
});
1313
return (
14-
<div className="w-full flex justify-center items-center absolute bottom-13 left-1/2 -translate-x-1/2">
15-
<div className="rounded-tr-4xl rounded-tl-4xl overflow-hidden">
14+
<div className="w-full flex justify-center items-center absolute bottom-0 left-1/2 -translate-x-1/2">
15+
<div className="relative w-[85%] h-[60vh] rounded-tr-4xl rounded-tl-4xl overflow-hidden">
1616
<Image
1717
src={MobileCocktailDrop}
1818
alt="모바일 칵테일 드랍"
19-
width={260}
20-
height={290}
19+
fill
2120
priority
22-
className="object-cover w-[300px] h-[350px]"
21+
className="object-cover"
2322
/>
2423
</div>
2524
</div>

src/domains/recipe/components/details/DetailItem.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ function DetailItem({ name, nameKo, story, src, abv, glassType }: Props) {
6060
className="object-cover"
6161
sizes="300px"
6262
priority
63+
onError={(e) => {
64+
// 402 에러 등으로 이미지 로딩 실패 시 fallback 이미지 사용
65+
e.currentTarget.src = '/CocktailDrop.webp';
66+
}}
6367
/>
6468
</div>
6569

0 commit comments

Comments
 (0)