[TabLayout] 매직마우스일 경우 2초 후 메뉴 열리도록 처리

This commit is contained in:
jangheon Pyo
2024-05-02 15:08:09 +09:00
parent 470bfe1e9b
commit 2e82ebea2c
3 changed files with 50 additions and 11 deletions

View File

@@ -139,7 +139,7 @@ const TabItemBase = ({
)} )}
</> </>
); );
}, [title, focused]); }, [title, focused, expanded]);
delete rest.hasChildren; delete rest.hasChildren;
delete rest.getChildren; delete rest.getChildren;

View File

@@ -93,7 +93,7 @@ const TabItemBase = ({
const subtitle = title.split("-")[0]; const subtitle = title.split("-")[0];
return ( return (
<> <>
{expanded && ( {subtitle && (
<Marquee <Marquee
marqueeDisabled={!focused} marqueeDisabled={!focused}
marqueeOn={"focus"} marqueeOn={"focus"}
@@ -104,7 +104,7 @@ const TabItemBase = ({
)} )}
</> </>
); );
}, [title, focused]); }, [title, focused, expanded]);
delete rest.hasChildren; delete rest.hasChildren;
delete rest.getChildren; delete rest.getChildren;

View File

@@ -136,6 +136,8 @@ export default function TabLayout({ topPanelName, onTabActivated }) {
const { loginUserData } = useSelector((state) => state.common.appStatus); const { loginUserData } = useSelector((state) => state.common.appStatus);
const menuItems = useSelector((state) => state.home.menuItems); const menuItems = useSelector((state) => state.home.menuItems);
const mouseNavOpen = useRef(new Job((func) => func(), 1500));
const mouseMainEntered = useRef(false);
const { getScrollTo, scrollTop } = useScrollTo(); const { getScrollTo, scrollTop } = useScrollTo();
const getMenuData = (type) => { const getMenuData = (type) => {
@@ -327,20 +329,25 @@ export default function TabLayout({ topPanelName, onTabActivated }) {
const onTabHasFocus = useCallback( const onTabHasFocus = useCallback(
(type) => (event) => { (type) => (event) => {
console.log("yhcho onTabHasFocus ", cursorVisible);
switch (type) { switch (type) {
case COLLABSED_MAIN: case COLLABSED_MAIN: {
if (cursorVisible) {
mouseNavOpen.current.start(() => {
setMainExpanded(true);
});
}
break;
}
case ACTIVATED_MAIN: { case ACTIVATED_MAIN: {
if (!cursorVisible) { if (!cursorVisible) {
const parent = event.target.parentNode; const parent = event.target.parentNode;
const children = parent.childNodes; const children = parent.childNodes;
const index = Array.prototype.indexOf.call(children, event.target); const index = Array.prototype.indexOf.call(children, event.target);
setMainExpanded(true); setMainExpanded(true);
setMainSelectedIndex(index - 1); setMainSelectedIndex(index - 1);
setSecondDepthReduce(false); setSecondDepthReduce(false);
} else {
if (!panelSwitching.current) {
setMainExpanded(true);
}
} }
break; break;
@@ -367,6 +374,12 @@ export default function TabLayout({ topPanelName, onTabActivated }) {
const onTabBlur = useCallback( const onTabBlur = useCallback(
(type) => (event) => { (type) => (event) => {
switch (type) { switch (type) {
case COLLABSED_MAIN: {
if (cursorVisible) {
mouseNavOpen.current.stop();
}
break;
}
case ACTIVATED_MAIN: { case ACTIVATED_MAIN: {
if (!cursorVisible) { if (!cursorVisible) {
} }
@@ -550,9 +563,35 @@ export default function TabLayout({ topPanelName, onTabActivated }) {
} }
}, [secondDepthReduce, showSubTab, mainSelectedIndex]); }, [secondDepthReduce, showSubTab, mainSelectedIndex]);
const onMainMouseEnter = useCallback(
(ev) => {
mouseMainEntered.current = true;
onTabHasFocus(COLLABSED_MAIN)(ev);
},
[onTabHasFocus]
);
const onMainMouseLeave = useCallback(
(ev) => {
mouseMainEntered.current = false;
onTabBlur(COLLABSED_MAIN)(ev);
},
[onTabBlur]
);
const onMainMouseMove = useCallback(
(ev) => {
if (!mouseMainEntered.current) {
onMainMouseEnter(ev);
}
},
[onMainMouseEnter]
);
if (!showTab) { if (!showTab) {
return null; return null;
} }
return ( return (
<div className={classNames(css.tabLayoutWrap, !tabActivated && css.hide)}> <div className={classNames(css.tabLayoutWrap, !tabActivated && css.hide)}>
{data && ( {data && (
@@ -572,9 +611,10 @@ export default function TabLayout({ topPanelName, onTabActivated }) {
mainExpanded && css.expanded mainExpanded && css.expanded
)} )}
onFocus={onTabHasFocus(ACTIVATED_MAIN)} onFocus={onTabHasFocus(ACTIVATED_MAIN)}
onMouseOver={onTabHasFocus(COLLABSED_MAIN)}
onBlur={onTabBlur(ACTIVATED_MAIN)} onBlur={onTabBlur(ACTIVATED_MAIN)}
onMouseLeave={onTabBlur(ACTIVATED_MAIN)} onMouseMove={onMainMouseMove}
onMouseEnter={onMainMouseEnter}
onMouseLeave={onMainMouseLeave}
> >
<h1 className={css.logo}> <h1 className={css.logo}>
<img src={shoptimeFullIcon} alt="" /> <img src={shoptimeFullIcon} alt="" />
@@ -649,7 +689,6 @@ export default function TabLayout({ topPanelName, onTabActivated }) {
isSubItem={true} isSubItem={true}
deActivateTab={deActivateTab} deActivateTab={deActivateTab}
title={item.title + "-sub"} title={item.title + "-sub"}
F
lgCatCd={item.id} lgCatCd={item.id}
path={item.path} path={item.path}
showSubTab={showSubTab} showSubTab={showSubTab}