도영스 공간
리액트 모달창 세로 스크롤 막기 본문
반응형
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ모달창을 띄웠는데 !!!!
이럴수가 ?
고수찾기 페이지의
height 값이 3000px이어서 ..위처럼 스크롤이 되는 끔찍한 ...현상이 발생되었다..
홀..리 ~~~~~~~~~~~~~~
웨..웨 !!웨그러는고야 !!!
import React, { useEffect, useState } from "react";
import styled from "styled-components";
interface SearchProModalProps {
filterIsOpen: boolean;
setFiterIsOpen: any;
}
const SearchProModal = (props: SearchProModalProps) => {
const { filterIsOpen, setFiterIsOpen } = props;
const tabTitle: string[] = ["서비스", "지역"];
const [openTab, setOpenTab] = useState<number>(0);
const onClickTab = (idx: number) => {
setOpenTab(idx);
};
const ModalClose = () => {
setFiterIsOpen(!filterIsOpen);
};
return (
<>
<BackDrop onClick={ModalClose} />
<ModalOutter>
<ModalSearchBox>
<FilterTitle>
{tabTitle.map((title, idx) => {
return (
<FilterLi
key={idx}
idx={idx}
openTab={openTab}
onClick={() => {
onClickTab(idx);
}}
>
{title}
</FilterLi>
);
})}
</FilterTitle>
<button onClick={ModalClose} />
</ModalSearchBox>
</ModalOutter>
</>
);
};
export default SearchProModal;
const BackDrop = styled.div`
width: 100%;
height: 100vh;
position: absolute;
top: 0;
left: 0;
z-index: 999;
background: rgba(0, 0, 0, 0.5);
`;
const ModalOutter = styled.div`
width: 420px;
height: 42.5rem;
overflow-y: scroll;
background: #fff;
position: absolute;
top: 8px;
left: 50%;
transform: translateX(-50%);
z-index: 9999;
`;
const ModalSearchBox = styled.div`
width: 100%;
height: 60px;
padding: 10px 16px;
display: flex;
justify-content: space-between;
align-items: center;
& > button {
width: 14px;
height: 14px;
background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCI+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBpZD0iYSIgZD0iTTkgNy44NjlMMTYuNDM0LjQzNGwxLjEzMiAxLjEzMkwxMC4xMyA5bDcuNDM1IDcuNDM0LTEuMTMyIDEuMTMyTDkgMTAuMTNsLTcuNDM0IDcuNDM1LTEuMTMyLTEuMTMyTDcuODcgOSAuNDM0IDEuNTY2IDEuNTY2LjQzNCA5IDcuODd6Ii8+CiAgICA8L2RlZnM+CiAgICA8dXNlIGZpbGw9IiMzMjMyMzIiIGZpbGwtcnVsZT0ibm9uemVybyIgeGxpbms6aHJlZj0iI2EiLz4KPC9zdmc+Cg==")
center;
}
`;
const FilterTitle = styled.ul`
width: 96px;
height: 40px;
font-size: 1rem;
display: flex;
justify-content: space-between;
align-items: center;
font-weight: 500;
`;
interface LiType {
idx: number;
openTab: number;
}
const FilterLi = styled.li<LiType>`
height: 40px;
padding: 0 2px;
line-height: 40px;
cursor: pointer;
color: ${({ openTab, idx }) => (idx === openTab ? "#00c7ae" : "#323232")};
border-bottom: ${({ openTab, idx }) =>
idx === openTab ? `2px solid #00c7ae` : "none"};
`;
문제의 이전 코드 ..
BackDrop에 .. overflow:hidden을 주어도 아무런 변화가 일어나지 않았다고 한다. 🧐
하지만 구글링하다가..ㅋㅋ발견해버렸다 마법의 코드를
useEffect(() => {
document.body.style.cssText = `
position: fixed;
top: -${window.scrollY}px;
overflow-y: scroll;
width: 100%;`;
return () => {
const scrollY = document.body.style.top;
document.body.style.cssText = "";
window.scrollTo(0, parseInt(scrollY || "0", 10) * -1);
};
}, []);
위의 코드만 넣어주면 해결된다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
해결된 모달창의 모습
나이스 !!!
원래 오늘의 집 클론코딩에서 숨고 클론코딩으로 바뀌었고,,
내가 맡은 기능은 .. 무시무시한 숨고의 고수찾기 카테고리 기능이다 .. ^^
일단 뷰먼저 해두고..내일..카테고리 시도 해봐야징...핫..
728x90
반응형
'TIL > 2022 TIL' 카테고리의 다른 글
[safari] NaN 에러 (0) | 2022.08.27 |
---|---|
Warning: Each child in a list should have a unique "key" prop (1) | 2022.08.22 |
xxx 타입스크립트(Element형식에 checked 속성이 없습니다. ) (1) | 2022.07.28 |
스택과 큐 (1) | 2022.07.25 |
REST API(Representational State Transfer) (1) | 2022.07.21 |
Comments