인프런 커뮤니티 질문&답변

김민경님의 프로필 이미지
김민경

작성한 질문수

인터랙티브 웹 개발 제대로 시작하기

이벤트 위임 보강 영상

일분이 잔상

작성

·

401

0

안녕하세요 선생님!

선생님께서 주신 이벤트 위임 보강 영상 소스코드를 아래에서 다운받기도 했었고,

https://www.notion.so/4efb427f10a141088de833f6ec20ac1e

다른 질문글에서 답변주신대로 

<script src="IlbuniPointer.js"></script>

를 html 에 추가하고

IlbuniPointer.js 파일명으로 아래 내용을 추가했습니다.

background: url('./images/ilbuni2.png')

ㅠㅠ 요부분을 제 사진경로에 맞게 수정도 했습니다.

그런데 왜 아예 클릭해도 반응이 없는건지 잘모르겠어요..ㅠㅠ

콘솔창이나 element 창 둘다 변화가 없어서 뭐가 잘못된건지 모르겠습니다.

class IlbuniPointer {
	constructor() {
		let elem = document.createElement('div');
		let timerId;

		elem.style.cssText = `
			position: absolute;
			left: 0;
			top: 0;
			width: 60px;
			height: 60px;
			margin: -30px 0 0 -30px;
			border-radius: 50%;
			background: url('./images/ilbuni2.png') no-repeat 0 0 / cover;
			transform: scale(0);
		`;

		document.body.appendChild(elem);

		window.addEventListener('click', e => {
			elem.style.animation = 'pointer-ani 0.5s linear';
			elem.style.left = `${e.clientX}px`;
			elem.style.top = `${e.clientY}px`;
			timerId = setTimeout(() => {
				elem.style.animation = 'none';
				clearTimeout(timerId);
				timerId = null;
			}, 500);
		});
	}
}

아래는 js 파일만 실행이 되는지 테스트하기 위해 따로 만들었습니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>클릭테스트</p>
    <script src="./IlbuniPointer.js"></script>
</body>
</html>

파일명 : IlbuniPointer.js  (맨앞 대문자i 뒤는 l 이 맞습니다.)

무엇이 잘못되어 작동을 안하는것인지 감을 못잡겠어요..ㅠ 알려주세요 선생님...

class IlbuniPointer {
    constructor() {
        let elem = document.createElement('div');
        let timerId;

        elem.style.cssText = `
            position: absolute;
            left: 0;
            top: 0;
            width: 60px;
            height: 60px;
            margin: -30px 0 0 -30px;
            border-radius: 50%;
            background: url('./images/ilbuni_2.png') no-repeat 0 0 / cover;
            transform: scale(0);
        `;

        document.body.appendChild(elem);

        window.addEventListener('click', e => {
            elem.style.animation = 'pointer-ani 0.5s linear';
            elem.style.left = `${e.clientX}px`;
            elem.style.top = `${e.clientY}px`;
            timerId = setTimeout(() => {
                elem.style.animation = 'none';
                clearTimeout(timerId);
                timerId = null;
            }, 500);
        });
    }
}

답변 1

1

1분코딩님의 프로필 이미지
1분코딩
지식공유자

CSS에 아래 코드를 추가해 보세요~
animation은 스크립트로 지정했는데, CSS는 선언이 안되어 있기때문에
scale이 0이 된 상태로 머물러 있어서, 크기가 0이라 눈에 안보이는 것 같아요.
잘 동작하면, opacity등도 자연스럽게 한번 조정해 보세요 :)

@keyframes pointer-ani {
0% { transform: scale(0); }
100% { transform: scale(1); }
}
김민경님의 프로필 이미지
김민경
질문자

앗 선생님 감사합니다 :) 처음에 잘몰랐을때라 헤매다가 안됬던거같아요! 말씀해주신대로 하니까 잘됩니다! 정말 감사드립니다!!

김민경님의 프로필 이미지
김민경

작성한 질문수

질문하기