본문 바로가기

SK고용디딤돌 2기/jQuery

setTimeout

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
안녕하세요

반말과 존댓말을 섞어서 글을 작성하려고 하니 굉장히 이상하네요 하핫

존댓말을 쓰도록 노력하겠습니다.



제가 1.5개월간 개인프로젝트를 진행하면서 느꼈던 점은 setTimeout를 잘 이용해야 한다 입니다.

setTimeout란?

The setTimeout() method calls a function or evaluates an expression after a specified number of milliseconds. 

이라고 잘 설명 되어 있네요 (참고 : http://www.w3schools.com/jsref/met_win_settimeout.asp)


프로젝트에서 외부 api를 사용하는 경우가 많았는데, 이때 html, jqm의 화면이 다 구성되기 전에 외부 api의 호출이 완료되는 경우가 많았습니다. 따라서 이때 setTimeout 메소드를 활용해서 dom객체가 생성되고 난 후에 호출을 해야 원하는 화면을 출력할 수 있습니다.



특히 jQuery Mobile에서 이게 중요한데요, 제가했던 코드를 보시면



render:function () { $(this.el).html(this.template());

setTimeout(this.mapRender, 220);
/*
var publicData = pData.toJSON();
console.log(publicData.openTime);
*/
},
mapRender: function(){
var publicData = pData.toJSON();
var location = new daum.maps.LatLng(publicData.lat, publicData.lng);
var mapContainer = document.getElementById("map");
var mapOption = {
center : location,
level : 3
};
var map = new daum.maps.Map(mapContainer, mapOption);
var control = new daum.maps.ZoomControl();
map.addControl(control, daum.maps.ControlPosition.TOPRIGHT);
var marker = new daum.maps.Marker({
map: map,
position: location
});
$(".title").append(publicData.dataTitle);
$("#toiletArea").append(publicData.toiletArea);
$("#openTime").append(publicData.openTime);
console.log("map");
}


mapRender함수를 setTimeout 메소드를 거치지 않고 실행했을 때 일부만 렌더링 되어 화면에 지도가 반절만 보여집니다.

jqm의 setTimeout 자체 렌더링 시간은 150입니다. 


따라서 저는 그보다 조금 뒤인 220( 200이나 180으로 설정했더니 불안정하게 지도가 뿌려지네요 잘 되는 경우와 안되는경우 모두 발생)으로 설정해서 제가 원하는 뷰를 볼 수 있게 구현했습니다.


'SK고용디딤돌 2기 > jQuery' 카테고리의 다른 글

jQuery sortable button handle  (0) 2016.09.27
jQuery img Upload preview  (0) 2016.09.26
jQuery UI accordion  (1) 2016.09.26
jQuery select option  (0) 2016.09.23