событие mouseleave запускается при пересечении границ дочернего div. Должно срабатывать только при выходе из границ контейнера

#css #reactjs #mouseleave

#CSS #реагирует на #муселив

Вопрос:

Таким образом, «mouseleave» запускается, когда я покидаю дочерний компонент styledLink и запускаю. Он у меня на контейнере, и я хочу, чтобы он сработал, когда я оставлю весь контейнер. Я перепробовал множество потенциальных решений, но Гэтсби, похоже, не хочет хорошо работать с этими слушателями событий. Любая входная помощь! Спасибо 🙂

 const MenuDropDown: React.FClt;Propsgt; =  ({ menuLinks = [  { title: 'Events', url: '/events' },  { title: 'Performers', url: '/performers' },  { title: 'Venues', url: '/venues' },  ], setFocus, focus, explore }) =gt; {  const ref = useReflt;HTMLDivElementgt;(null);   useEffect(() =gt; {  /**  * Alert if hovered outside of element  */  function handleUserEvent(event: any) {  event.stopPropagation();  console.log("fired");  console.log(ref.current)  if (ref amp;amp; ref.current) {  setFocus(false);  }  }  // Bind the event listener   ref.current?.addEventListener('mouseleave', handleUserEvent);  return () =gt; {  ref.current?.removeEventListener('mouseleave', handleUserEvent);  };  }, [ref]);   return (  lt;S.Wrapper explore={explore}gt;  lt;S.Container ref={ref}gt;  {menuLinks.length gt; 0 amp;amp;  menuLinks.map((data, key) =gt; {  const url = data.url;  const title = data.title;  return (  lt;S.StyledLink key={key} activeStyle={{ background: 'rgb(245, 245, 244)' }} to={url}gt;  {title}  lt;/S.StyledLinkgt;  );  })}  lt;/S.Containergt;  lt;/S.Wrappergt;  ); };  export default MenuDropDown;  
 export const Wrapper = styled.divlt;{ explore?: boolean; isAuthenticated?: boolean }gt;`  box-shadow: rgb(36 63 97 / 12%) 0px 3px 20px, rgb(36 63 97 / 8%) 0px 1.5px 4px;  border-radius: 10px;  //opacity: 0;  background-color: white;  position: absolute;  top: 100%;  display: block;  z-index: 1000;  height: 100%;  pointer-events: none;  /* transition: opacity 200ms ease-in-out 0s; */  width: 140px;  margin-top: 28px;  margin-right: ${(props) =gt; (props.explore ? '65px' : null)};  margin-left: ${(props) =gt; (props.explore ? null : '250px')}; `;  export const Container = styled.div`  pointer-events: none;  z-index: 900;  display: flex;  flex-direction: column;  padding: 1.25rem;  border-radius: 10px;  //background: rgba(245, 245, 244, 0.2);  background: white;  border-right: 1px solid rgba(0, 0, 0, 0.08);  /* height: 200px;  margin-top: 200px; */ `;  export const StyledLink = styled(Link)`  pointer-events: auto;  text-align: left;  -webkit-font-smoothing: antialiased;  font-family: proxima-nova, 'Proxima Nova', 'Helvetica Neue', Arial, Helvetica, sans-serif;  font-size: 1.5rem;  line-height: 1.575rem;  margin: 5px 0px;  font-weight: 500;  /* box-sizing: border-box; */  width: 100%;  padding: 0.95rem 1.15rem;  border-radius: 0.5rem;  text-overflow: ellipsis;  overflow: hidden;  white-space: nowrap;  color: rgb(24, 24, 24); `;  

Ответ №1:

Мне нужно было убедиться, что «указатель-события: авто;» был применен ко всем дочерним компонентам. Это решило проблему