๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Language/JavaScript

[JavaScript] ๋งˆ์šฐ์Šค ๋ฐ ํœ  ์ด๋ฒคํŠธ (onMouseEnter, onMouseLeave, onWheel)

by DevIseo 2024. 5. 20.

[JavaScript] ๋งˆ์šฐ์Šค ๋ฐ ํœ  ์ด๋ฒคํŠธ (onMouseEnter, onMouseLeave, onWheel)

ํšŒ์‚ฌ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ ํ•˜๋ฉด์„œ ํšŒ์‚ฌ ์ž์ฒด ์ปดํฌ๋„ŒํŠธ ํˆดํŒ ์ŠคํŽ™๋•Œ๋ฌธ์—,

๋งˆ์šฐ์Šค๊ฐ€ ํ…์ŠคํŠธ ์œ„์— ์กด์žฌ ํ•˜์ง€ ์•Š์Œ์—๋„ ํœ  ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ํˆดํŒ์ด ๊ณ„์† ๋– ์žˆ๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜์˜€๋‹ค.

 

๊ทธ๋ž˜์„œ tooltip์ด ๋– ์•ผ ํ•˜๋Š” ํ…์ŠคํŠธ์— onMouseEnter, onMouseLeave, onWheel ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

onMouseEnter ์ด๋ฒคํŠธ

onMouseEnter ์ด๋ฒคํŠธ๋Š” ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ํŠน์ • ์š”์†Œ์— ์ฒ˜์Œ์œผ๋กœ ๋“ค์–ด๊ฐ”์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ.

์ด ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์šฐ์Šค๋ฅผ ์š”์†Œ ์œ„๋กœ ์ด๋™์‹œํ‚ฌ ๋•Œ ํŠธ๋ฆฌ๊ฑฐ ๋œ๋‹ค.

onMouseEnter๋Š” ํ•ด๋‹น ์š”์†Œ์˜ ์ž์‹ ์š”์†Œ์—๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ „ํŒŒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ ์š”์†Œ์™€ ์ž์‹ ์š”์†Œ๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.

 

onMouseLeave ์ด๋ฒคํŠธ

onMouseLeave ์ด๋ฒคํŠธ๋Š” ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ํŠน์ • ์š”์†Œ๋ฅผ ๋ฒ—์–ด๋‚ฌ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ.

์ด ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์šฐ์Šค๋ฅผ ์š”์†Œ ๋ฐ–์œผ๋กœ ์ด๋™์‹œํ‚ฌ ๋•Œ ํŠธ๋ฆฌ๊ฑฐ ๋œ๋‹ค.

onMouseLeave ์—ญ์‹œ ๋ถ€๋ชจ ์š”์†Œ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๊ฐ€ ์ž์‹ ์š”์†Œ๋กœ ์ „ํŒŒ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

onWheel ์ด๋ฒคํŠธ

onWheel ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์šฐ์Šค ํœ ์„ ๊ตด๋ ธ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ.

์ด ์ด๋ฒคํŠธ๋Š” ์Šคํฌ๋กค์„ ํ•  ๋•Œ ํŠธ๋ฆฌ๊ฑฐ ๋œ๋‹ค.

onWheel ์ด๋ฒคํŠธ๋Š” ์ˆ˜์ง ๋ฐ ์ˆ˜ํ‰ ํœ  ์ด๋ฒคํŠธ๋ฅผ ๋ชจ๋‘ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์ ์šฉ ์˜ˆ์‹œ

import React, { useState, useEffect, useRef } from 'react';
import styled from 'styled-components';

const TooltipComponent = () => {
  const [isTooltipVisible, setIsTooltipVisible] = useState(false);
  const [isHovered, setIsHovered] = useState(false);
  const [isScrolled, setIsScrolled] = useState(false);

//isHovered์™€ isScrolled ์ƒํƒœ ๊ฐ์ง€ - tooltip ํ‘œ์‹œ ์—ฌ๋ถ€ ์ œ์–ด
  useEffect(() => {
    if (isHovered && !isScrolled) {
      setIsTooltipVisible(true);
    } else {
      setIsTooltipVisible(false);
    }
  }, [isHovered, isScrolled]);

// ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ์˜์—ญ์— ๋“ค์–ด์™”์„ ๋•Œ
  const handleMouseEnter = () => {
    setIsHovered(true);
    setIsScrolled(false);
  };


// ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ์˜์—ญ์„ ๋ฒ—์–ด๋‚ฌ์„ ๋•Œ
  const handleMouseLeave = () => {
    setIsHovered(false);
  };

// ๋งˆ์šฐ์Šค ํœ ์„ ๊ตด๋ ธ์„ ๋•Œ
  const handleWheel = () => {
    setIsScrolled(true);
  };

  return (
    <TooltipDiv
      onMouseEnter={handleMouseEnter}
      onMouseLeave={handleMouseLeave}
      onWheel={handleWheel}
    >
      Hover over me
      <Tooltip visible={isTooltipVisible}>Tooltip Text</Tooltip>
    </TooltipDiv>
  );
};

export default TooltipComponent;

const TooltipDiv = styled.div`
  position: relative;
  display: inline-block;
  cursor: pointer;
`;

const Tooltip = styled.div`
  visibility: ${(props) => (props.visible ? 'visible' : 'hidden')};
  background-color: #555;
  color: #fff;
  text-align: center;
  border-radius: 5px;
  padding: 5px 0;
  position: absolute;
  z-index: 1;
  bottom: 125%;
  left: 50%;
  margin-left: -60px;
  opacity: 0.9;
`;

 

'Language > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JavaScript] ํŒ์—… ์ฐฝ ๊ตฌํ˜„ - window.open  (0) 2024.05.20
[JavaScript] javascript ์•Œ์•„๋‘˜ ๊ฒƒ  (0) 2023.01.31
[JavaScript] LocalStorage์™€ SessionStorage  (0) 2023.01.29
[JavaScript] async / await 2  (0) 2023.01.26
[JavaScript] async / await 1  (1) 2023.01.25

๋Œ“๊ธ€