본문 바로가기
JAVA/javascript, jQuery

[미완성]자바스크립트 - 내장함수(Timeout/Interval)

by 설총이 2018. 7. 3.

*자바스크립트 내장 함수


1. setTimeout(function, millisecond) - 일정 시간 후 함수를 한번실행

   cleartTimeout(id) - 일정시간 후 함수를 한번 실행하는것을 중지


2. setInterval(function, millisecond) - 일정 시간마다 함수를 반복 실행

   clearInterval(id) - 일정 시간마다 함수를 반복하는 것을 중지


*setTimeout 예제


setTimeout(function(), 1000) --- 여기서 1000은 milliseconds 단위이므로 1/1000 초이다.(1초)


1
2
3
4
5
6
7
8
9
10
<script>
    var i;
    for(i = 0; i<10; i++){
        setTimeout(function(){
            document.write(i+"<br>");
        },1000); /* 1초뒤에 for문이 돌아 1,2,3,4,.. 를 출력하길 기대하지만 되지않는다.
        값이 복사된것이 아닌 변수에 직접 접근하고있기 때문이다.
        for문이 종료된시점의 값으로 핸들러는 직접 접근하여 출력한다.*/
    }
</script>
cs


예상대로라면 for문이 돌아  0,1,2,3,4.... 9까지 1초마다 10번 출력되어야 할것 같지만 그렇게 되지않는다.

출력되는값은 마지막 순번의 값에 1을 더한 10만 출력이 될뿐더러, 1초뒤에 한번에 다 출력이된다.



아직 이유를 모르겠다.

j-query가서 배운다(?)고 하였으니 보류





*버튼을 누를때까지 일정 시간마다 함수를 반복 실행하는 Interval 함수 예제



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<head>
<script>
    var id;
    function changeColor(){
        id = setInterval(flashText, 500);    
    }//flashtext를 0.5초마다 '반복실행'하는 function을 만들어 id에 저장. 
    
    function flashText(){
        var elem = document.getElementById("target");
        elem.style.color = (elem.style.color == "red") ? "blue" : "red";
        elem.style.backgroundColor
        = (elem.style.backgroundColor == "green") ? "yellow" : "green";
    }
    //0.5초마다 바뀌는 실행문.
    function stopTextColor(){
        clearInterval(id);
        // 버튼클릭을하면 이 function이 실행되며 interval이꺼진다
    }
    </script>
 
 
</head>
<body onload = "changeColor();"><!-- 바디가 끝나면 chngeColor() 호출한다.-->
    <div id ="target" style="color: blue; background-color : yello;">
    <p>This is a Text.</p>
    </div>
    <button onclick = "stopTextColor();">중지</button>
    //버튼을 클릭하는 순간 stopTextcolor()메서드 실행.
</body>
cs



*삼항연산자 ( 조건식 ? 참값 : 거짓값)


elem.style.color == "red" ? "blue" : "red"

(조건식)                   (참값)   (거짓값)



순서

1. 자바스크립트에서 처음 color의 기본값은 black이기때문에 false가 되고

elem.style.color = "red"로 설정이 된다.


2. 그리고 0.5초뒤에 다시 실행되었을때에는

elem.style.color = "red"인 상태로 참이기때문에 참일때의 실행문인

elem.style.color = "blue"로 바뀌게된다.


3. 0.5초뒤에 다시 실행될때에는 elem.style.color = "blue"로 false이기때문에

다시 elem.style.color = "red"가 된다.

이렇게 0.5초마다 바뀌면서 색이 계속 변하게된다.


4. 종료할때에는 Interval값을 넣어준 id를 clearInterval(id)로 넣어 종료시키는 메서드를 사용한다.


5.  <body onload = "changeColor();"> 

:: body가 끝나고 난 직후에 changeColor();를 호출한다.

(예제에서는 div태그와 p태그 button을 모두 생성후에 changeColor()를 실행하겠다는 의미가 된다.)


body안의 컨텐츠를 다 하고나면 메서드를 자동으로 호출할수있게된다.