.animate() 와 .scrollTop()
웹 앱을 개발하다 보면 textfield 를 사용하는 경우가 많이 있습니다.
그리고 이 textfield 가 있는 화면을 모바일 디바이스에서 사용하려면 screen keyboard를 사용해야 되죠.
평상시에는 별 문제가 없는데 이걸 autocomplete 기능과 같이 사용하게 되면 문제가 발생할 수도 있습니다.
screen keyboard 가 리스트의 일부 아이템을 가려버려서 유저가 그 아이템을 클릭할 수 없게 될 수 있거든요.
화면 키보드 밑에 아이템이 깔려 있습니다.
이럴 경우 scroll 이 안되는 layout 하면이라면 유저가 많이 불편하겠죠.
이럴경우 jQuery 의 .animate() 과 .scrollTop() 함수를 사용하면 아주 우아하게 화면을 스크롤 업해서 유저 친화적인 인터페이스를 제공할 수 있습니다.
보통 자바스크립트의 window.scrollTo(x, y);를 사용하셔도 되는데요. 좀 더 자연스럽게 움직이도록 하기 위해 이 두 메소드를 사용하면 좋습니다.
저는 아래와 같이 사용했습니다.
$('body,html').animate({scrollTop: 160 }, 900);
textfield 에 focus 가 가서 키보드가 올라왔을 때.
$('body,html').animate({scrollTop: 0 }, 500);
키보드가 다시 내려갔을 때 화면을 다시 원상 복구 함.
숫자는 마음대로 넣으시면 됩니다.
이해를 돕기 위해 우선 .animate() 함수 예제를 볼까요?
<!DOCTYPE html>
<html>
<head>
<style>
div {
background-color:#bca;
width:100px;
border:1px solid green;
}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<button id="go">» Run</button>
<div id="block">Hello!</div>
<script>
/* Using multiple unit types within one animation. */
$("#go").click(function(){
$("#block").animate({
width: "70%",
opacity: 0.4,
marginLeft: "0.6in",
fontSize: "3em",
borderWidth: "10px"
}, 1500 );
});
</script>
</body>
</html>
#go 를 클릭하면 width 가 화면의 70%로 늘어나고 투명도도 바뀌고 폰트 사이즈, border 굵기 등이 바뀝니다. 이 동작은 1.5초 동안 일어납니다.
위 파일을 다운 받아서 실행해 보세요.
예제 하나 더 보면요.
<!DOCTYPE html>
<html>
<head>
<style>
div {
position:absolute;
background-color:#abc;
left:50px;
width:90px;
height:90px;
margin:5px;
}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<button id="left">«</button> <button id="right">»</button>
<div class="block"></div>
<script>
$("#right").click(function(){
$(".block").animate({"left": "+=50px"}, "slow");
});
$("#left").click(function(){
$(".block").animate({"left": "-=50px"}, "slow");
});
</script>
</body>
</html>
#right, #left 를 클릭하면 .block을 각각 50픽셀씩 오른쪽 혹은 왼쪽으로 움직이는 소스입니다.
|
.scrollTop()에 대한 예제도 보죠.
<!DOCTYPE html>
<html>
<head>
<style>
div.demo {
background:#CCCCCC none repeat scroll 0 0;
border:3px solid #666666;
margin:5px;
padding:5px;
position:relative;
width:200px;
height:100px;
overflow:auto;
}
p { margin:10px;padding:5px;border:2px solid #666;width:1000px;height:1000px; }
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div class="demo"><h1>lalala</h1><p>Hello</p></div>
<script>$("div.demo").scrollTop(300);
</script>
</body>
</html>
|
이 예제를 실행하면 작은 화면안에 페이지가 위에서 300픽셀 내려간 부분이 중앙이 되도록 display 할 겁니다.
이 두개를 조합해서 사용한 예제도 하나 올릴테니까 다운 받아서 보세요.
'jQuery Mobile > jQuery API' 카테고리의 다른 글
.clone() 메소드 알아보기 (0) | 2012.08.23 |
---|---|
.find() 메소드 알아보기 (0) | 2012.08.23 |
.delegate() 메소드 알아보기 (0) | 2012.08.23 |
jQuery API 몇개 훑어보기 .html(), .text(), .bind() (0) | 2012.08.10 |
jQuery API .live() 공부하기 (2) | 2012.08.09 |