메뉴 건너뛰기

조회 수 130 댓글 3

...

<script language="JavaScript">

var clickState = null;

 function btn_OnClick(e,img){
  

  if(clickState == null){
    
   clickState = setTimeout("btn_OnClick(e,img)", 1000);

  }

  else{
    
   ClearClickState();
   fonclick(e,img);
  }
 }
 
 function btn_OnDbClick(e,img){

  ClearClickState();
  fondbclick(e,img);
 }
 
 function ClearClickState(){

  clearTimeout(clickState);
  clickState = null;
 }

...

</script>

...

이미지를 더블클릭하면 축소되고 한번 클릭하면 이미지가 확대 됩니다.<br>
<img id ="i" onclick="btn_OnClick(event,this)" ondblClick="btn_OnDbClick(event,this)"
src="media/Tulips.png" width="100" height="100" alt="img">

 

현재 과제로 실습 9-6번문제를 변형하여 한 오브젝트에 onclick,ondblClick을 이용하여 

이미지 확대 축소를 해야합니다.

 

헌데 강의와 교재에 있는 내용을 잘못이해 했는지 결과가 좋지 않습니다.

하여 제가 제대로 이해하고있는지 그리고 위의 코드에서 고쳐야하는 부분은 뭔지 궁금해서 질문드립니다.

위와같은 코드를 실행시키면 이미지를 한번 클릭 후 fbtn_OnClick(e,img) 함수가 작동된뒤 null값을 갖고있는clickState 가

if 문을 통과하여 setTimeout("btn_OnClick(e,img)", 1000);로 인해 1초뒤 정수를 받게 됩니다.

그리고 다시한번 이미지를 클릭하면 else 결과인   ClearClickState();  fonclick(e,img);가 실행되며 clickState는 타이머가 중지되며 값은 null로 초기화되고

fonclick(e,img);[이미지가 확대되는 함수]가 실행됩니다.

여기 까진 문제가 없지만 더블클릭 시 시간에 관계없이 btn_OnClick(e,img)의 else가 실행됩니다.

위의 코드대로라면 btn_OnClick(e,img)가 한번 실행된후 1초안에 더블클릭을 행하면 btn_OnDbClick(e,img) 함수가 실행되고

clickState의 값을 초기화 시키기 때문에 btn_OnClick(e,img)는 실행중지 되는 것이 아닌가요?

6시간째 해결방법을 몰라 고민중입니다. 답변해주시면 감사하겠습니다.

 

?
  • ?
    관리자 2020.06.09 21:50

    몇 가지 설명할 부분이 있습니다.

    * 첨부된 html파일에서 클릭하면 아래 1번 때문에 바로 오류납니다.  오류를 확인하려면 크롬에서 개발자 도구를 켠 다음에(마우스 오른쪽 버튼 후 검사 메뉴 )실행시켜보세요
    1. onclick과 ondblclick를 하나의 객체에 함께 사용하는 것은 부적절합니다.
    브라우저마다 조금씩 다를 수 있지만, 더블클릭을 하면 onclick이 먼저 불려지고 다시 ondblclick이 불려집니다.
    그래서 클릭 핸들러와 더블클릭 핸들러를 함께 사용하는 것은 그다지 권하지 않습니다.
    제가 이 내용을 책에 기술해 놓지 않아서 미안하네요. 책이 너무 백과사전처럼 되는 것 같아서 이런 수준의 이야기는 뺐습니다.
    개정할 때는 넣어두어야 겠습니다.

    2. 타이머를 등록하는 함수에 문제가 있습니다.
    질문하시분은 아래와 같이 등록하면
    ;
    function btn_OnClick(e,img){
    clickState = setTimeout("btn_OnClick(e,img)", 1000);
    }

    매개변수로 넘어온 e와 img가 그대로 "btn_OnClick(e,img)"의 e와 img에 전달된다고 생각하는것 같습니다.
    그런데 "btn_OnClick(e,img)"은 보이는 그대로 문자열입니다. 그러니까 매개변수로 넘어온 e와 img를 평가하여 그 값이 전달되지 않습니다.
    "btn_OnClick(e,img)" 이 문자열 상태로 그대로 타이머가 기억하였다가.
    btn_OnClick(e,img)을 실행합니다. 그러면 이때 e, img라는 변수 값이 무엇인지 모르겠다고 자바스크립트 엔진은 오류를 발생시킵니다.
    그래서 클릭하여도 프로그램은 작동안하게 됩니다.

    만일 다음과 같이 하였다면 어떻게 될까요?
    function test(x, y){
    clickState = setTimeout("z = x + y", 1000);
    }
    test(2,4);

    test(2,4)가 호출되면 타이머 핸들러로 "z = 2 + 4"가 등록되는 것이 아니라, 그냥 "z = x + y"가 등록됩니다.
    그리고 1초후에 z = x + y를 실행하려고 하지요. 그리고 이 때 변수 x와 y를 찾으려고 할텐데 이 순간에 x와 y 값을 합하여 z 값이 결정됩니다.

    그래서 타이머에는 변수등의 매개변수를 가진 함수 호출문을 사용하지 않아야 합니다.

    이것도 제가 책에 넣지 못했네요. 설명이 복잡하여 이 자체로 이해하는데 어려움이 있을 것 같아서였습니다......

  • ?
    웹프공부중 2020.06.09 22:38
    감사합니다.
  • ?
    관리자 2020.06.09 21:56

    아래와 같은 식으로... 고쳐야합니다.

    var clicke;
    var clickimg;
     function btn_OnClick(e,img){
            clicke = e;
            clickimg = img;
            clickState = setTimeout("f()", 1000); // 함수 f()에서 clicke와 clickimg를 활용하여 원하는 작업을 하세요
    }

     

    3. 문제가 정확이 무엇인지 모르지만, 타이머를 이용하는 이유가 무엇인지 모르겠군요. 

     


QnA

공부하면서 궁금했던 것을 질문해보세요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18281
223 간단한 질문입니다 1 ㅇㅇ 2018.03.04 267
222 간단한 질문 드립니다. 1 뚜룹 2018.06.07 535
221 각 장의 연습문제에 쓰인 사진파일좀 올려주실수있나요? 1 익명 2018.09.29 159
220 ㅠㅠ..질문좀 드리겠습니다.. 1 은성 2017.04.18 3835
219 [명품 html5+ css3+ javascript 웹 프로그래밍 수정판] 1장 실습문제 4번 질문합니다... 2 file 나능냐공도리 2021.04.17 920
218 [개정판] p.357 sibling 에 대한 설명 및 그림 8-7 1 질문 2022.09.02 59
217 z-index 관련 질문 번역봇 2020.10.13 63
216 webgl 2차원. 1 궁금해요 2022.10.10 134
215 value 속성 1 열심히 공부하는 독자 2020.09.04 48
214 URL 과 IP 주소 2 tc0712 2021.09.14 120
213 u+ 공유기 포트포워딩 방법 1 ge님 2018.03.30 760
212 timerID값이 null인 이유 1 열공이 2022.05.26 602
211 target프로퍼티 질문(페이지 428쪽) 2 한성이 2022.08.14 47
210 Sublime Text, VS code IDE설명 update바랍니다 1 삼오칠 2023.04.15 90
209 SRC와 SRDOC의 차이를 여쭙고 싶습니다. 입문한 사람 2020.04.07 48
208 span과 text-align : center; 에 관한 문제입니다. file 2019.10.15 279664
» setTimeout 질문드립니다. 3 file 웹프공부중 2020.06.09 130
206 r/w는 무슨 뜻인가요? 1 ㅇㅁㅇㅈ 2021.12.22 396
205 placeholder속성 1 khl 2017.04.08 85735
204 page 46 마우스 올릴시 이미지 출력 2 file 공부중 2020.09.10 323
목록
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 21 Next
/ 21
위로