노무현 전 대통령 서거 - 삼가 고인의 명복을 빕니다

티스토리 툴바

바람이 머무는 곳

블로그 이미지
by 파란바람
  • 59,610Total hit
  • 3Today hit
  • 41Yesterday hit

겉보기 문제 : ie7에서 마우스를 따라 움직이는 툴팁(with javascript)을 작성했으나 scroll 했을 경우 바르게 표시되지 않음. 웹 문서를 아래로 스크롤 했을 경우, 툴팁은 출력은 되나 보이지 않는다. 툴팁이 출력 되는 곳은 스크롤 하기 전 화면이다.
기존 코드
function hidebox(){
var objLayer =document.getElementById('altlayer');
objLayer.style.display='none';
objLayer.style.top = '-100px';
objLayer.style.left= '-100px';
}
var w = 400;
var msgtext;
function showbox(e,obj) {
object = document.getElementById(obj);
if ( !object ) { return; }
msgtext = object.innerHTML;
if ( msgtext == '' ) { return; }
if ( msgtext.length > 40 ) {
var tablewidth='width=' + w;
} else {
var tablewidth = '';
}
var div_string = ''; // 툴팁 모양,내용. 스타일 포함
objLayer = document.getElementById('altlayer');
var BodyWidth = document.body.scrollWidth - 200;
var BodyLeft = document.body.scrollLeft;
var BodyHeight = document.body.clientHeight;
var BodyTop = document.body.scrollTop;
var DivWidth = objLayer.scrollWidth;
var DivHeight = objLayer.scrollHeight;
xpos = e.clientX + BodyLeft + 11;
ypos = e.clientY + BodyTop + 20;
//limit right edge
if ( xpos + DivWidth > BodyWidth ) xpos = BodyWidth - DivWidth;
//limit left edge
if (BodyLeft > xpos) xpos = BodyLeft + 10;
//limit bottom edge
if (ypos + DivHeight > BodyTop + BodyHeight) ypos = ypos - DivHeight - 30;
//limit top edge
if ( ypos < BodyTop ) ypos = BodyTop + 30;
objLayer.innerHTML = div_string;
objLayer.style.top = ypos;
objLayer.style.left = xpos;
objLayer.style.display = 'block';
}

debug tool
mozilla firefox + firebug way:
console.debug("BodyLeft = document.body.scrollLeft : " + document.body.scrollLeft)
원인
document.body.scrollLeft, document.body.scrollTop 값이 항상 0. 스크롤한 값(스크롤해서 내려간 문서 길이)을 받아오지 못함.

해결
검색 키워드 :
document.body.scrollTop 대체를 보고
document.documentElement.scrollTop
으로 바꿈.

결과
파이어폭스에서 제대로 표시되지 않음.

원인(짐작)
	objLayer.style.top  = ypos;
objLayer.style.left = xpos;
에 단위(px)가 없음.

해결
	objLayer.style.top  = ypos + "px";
objLayer.style.left = xpos + "px";
결과
파이어폭스에서 정상으로 작동.
ie7에서 정상으로 작동.
ie6에서 정상으로 작동.
ie8에서 정상으로 작동하지 않음.

삽질 감상평
firefox + firebug + console.debug 유용하다.
검색하기 전에 원인부터 찾자. console.debug까지 찍어본 다음에 검색하자.
빌어먹을 ie. (

참고 링크
http://www.webuit.com/160 - document.body.scrollTop 값이 항상 0인 것에 대해 정리가 잘 되어있다. 한국어.
http://jmvidal.cse.sc.edu/talks/javascriptinbrowser/windowgeometry.html - 여러 브라우저를 고려한 좌표 얻어내기 javascript 모듈. 영어. (상위 메뉴는 http://jmvidal.cse.sc.edu/talks/javascriptinbrowser/)
http://msdn.microsoft.com/en-us/library/bb250395(VS.85).aspx - enhanced support for the Cascading Style Sheets (CSS) specification provided by Microsoft Internet Explorer 6 or later.(!DOCTYPE을 어떻게 선언하면 MSIE에서 표준 모드로 작동하는지에 대한 정보)영어. 출처 : http://forums.mozilla.or.kr/viewtopic.php?f=9&t=2382

다 하고 나니 날이 밝는다.



TRACKBACK 0 AND COMMENT 0

ARTICLE CATEGORY

분류 전체보기 (445)
미투데이 (142)
연습일기 (2)

CALENDAR

«   2012/05   »
    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 30 31    

ARCHIVE