과제
폼 입력에 사용자가 숫자와 +, - 기호만 입력할수 있게 하고 싶다.

해결

먼저 아래와 같이 라벨과 submit 버튼 그리고 오류메세지 필드를 만들어 봅시다.

<form id="signup" method="post" action="">
<div><span class="test_label">핸드폰 번호를 입력하세요. </span><input type="text" class="test_infobox" name="phone" />

<span class="test_error">숫자와 +,- 만 입력하실수 있습니다.</span></div>
<input class="test_submit" type="submit" value="입력">
</form>

각 엘리먼트의 class 속성에 각각 "test_label" , "test_infobox", "test_submit", "test_error"를 지정해줍니다.

스크립트 소스는 아래와 같습니다.

$(document).ready(function() {
$('.test_error').hide();
$('.submit').click(function(event){
var data=$('.test_infobox').val();
if(validate_phoneno(data))
{
$('.test_error').hide();
}
else
{
$('.test_error').show();
event.preventDefault();
}
});
});
function validate_phoneno(ph)
{
var pattern=new RegExp(/^[0-9-+]+$/);
return pattern.test(ph);
}

동작은 아래와 같이...

핸드폰 번호를 입력하세요. 숫자와 +,- 만 입력하실수 있습니다.


저작자 표시 비영리 변경 금지
Posted by 웹눈
  • 시작하기 전에
  • 문제
    • 버튼이나 링크를 클릭해서 폰트의 크기를 변경하고 싶다.
      (대부분의 뉴스 사이트에서 구현되어 있는 기능)
      jQuery 강좌 - 폰트 크기 바꾸기

      그림 1-1


  • 해결
    • jQuery를 통해 현재의 폰트 사이즈를 알아낸 다음 그 수치에 버튼을 클릭할때마다 +1 이나 -1 을 해줌으로써 폰트 사이즈를 변경합니다.
  • 토의
    • 위 그림 1-1 에서 볼수 있듯이 크게, 작게 링크를 클릭하게 되면 현재 폰트 사이즈에서 +1이나 -1을 해줍니다. 예제 소스는 아래와 같습니다.

      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>폰트 사이즈 바꾸기 - 웹눈의 웹이야기</title>

      <script type="text/javascript" src="jquery.txt"></script>
      <script type="text/javascript">
      //현재 폰트 사이즈를 저장할 전역 변수
      var currentFontSize ;
      //문서가 준비되었는지 이벤트를 걸어준다.
      $(document).ready(init);
      //초기화
      function init()
      {
      // 1. 크게, 작게 링크에 이벤트를 걸어줍니다.
      $("#fontControll li a").click(clickHandler);
      }
      //크게, 작게 링크가 클릭되었을때 처리하는 함수
      function clickHandler(e)
      {
      //이벤트 전파를 막는다.
      e.preventDefault(); 
      //크게, 작게 중 어느것이 클릭되었는지 판별
      var whichClicked = $(this).attr("id");
      //현재의 폰트 사이즈를 전역 변수에 저장한다.
      currentFontSize = parseInt($(".article").css("font-size"));
      //클릭된 링크에 따라 폰트를 크게 혹은 작게 설정합니다.
      switch(whichClicked)
      {
      case "larger" :
      //1폰트 크게한다.
      setFontSize(1) ;
      break ;
      case "smaller" :
      //1폰트 작게한다.
      setFontSize(-1) ;
      break ;
      }
      }
      function setFontSize($size)
      {
      var totalFontSize = currentFontSize + $size ;
      $(".article").css({"font-size":totalFontSize+"px"});
      }

      </script>

      <style type="text/css">

      #fontControll li{
      display:inline ;
      font-size:12px ;
      }

      .article {
      font-size:12px ;
      }

      </style>

      </head>
      <body>
      <div id="titles">
          <h1>폰트 크기 바꾸기 예제 - <a href="http://webnoon.net" target="_blank">웹눈의 웹이야기</a></h1>
          </div>
          <div id="fontSizeControllBox">
              <ul id="fontControll">
                  <li><a href="http://naver.com" id="larger">크게</a></li>
                  <li><a href="http://google.com" id="smaller">작게</a></li>
              </ul>
          </div>
          <div id="contents">
              <p class="article">
                  이번 예제는 뉴스 사이트에서 흔히 볼수있는 폰트 사이즈를 변경해보는것입니다.<br />
                  크롬, 파이어폭스, 익스플로어7 에서 테스트 되었습니다.<br />
                  이 예제의 자세한 설명은 웹눈 블로그 <a href="http://webnoon.net" target="_blank">http://webnoon.net</a> 에서 자세히 보실수 있습니다.
              </p>
          </div>

      </body>

    • 코드는 매우 직관적으로 짜여져 있습니다. 여기서 "이벤트를 걸어준다" 라는 말이 모호하게 느껴질수도 있는데, 이말은 "이벤트 발생을 탐지한다" 정로도 해석할수 있겠습니다.

      즉, $(document).ready([callbackFunction]) 에서는 "문서가 로딩이 완료될때 발생시키는 이벤트" 를 탐지하기 위해서 $(document) 객체에 ready라는 이벤트를 걸어주었습니다.

      마찬가지로 크게, 작게 링크[$("#fontControll li a")]에도 click 이벤트를 탐지하도록 이벤트를 걸어준것입니다.(여기서 걸어준다는 표현은 전문용어가 아니므로 참고해주시기 바랍니다.)

      나머지 부분은 주석으로 자세히 설명되어 있어서 더이상 설명은 생략하겠습니다만, 질문이 있으시면 언제나 댓글란을 이용해주세요.
  • 참고자료
저작자 표시 비영리 변경 금지
Posted by 웹눈
우리가 선택하고자 하는것이 무엇이든지, jQuery 는 달러 사인으로 된 함수: $() 로 시작을 하게 됩니다.
$() 함수는 일반적으로 html 태그와 ID , Class 속성값과 함께 사용됩니다.

표1. CSS와 jQuery 의 선택자 비교문
 Selector CSS
jQuery
설명
 ID  #ID_Name  $('#ID_Name') ID값이  'ID_Name' 을 가지는 하나의 엘리먼트를 선택합니다.
 Class  .Class_Name $('.Class_Name')
Class 속성값이 'Class_Name' 값을 가지는 모든 엘리먼트를 선택합니다.
 Tag  P  $('P') 모든 P 태그를 선택합니다.

여기서 주목할만한 점은 Class Selector와 Tag Selector는 해당하는 엘리먼트를 하나만 선택하는것이 아니라 조건이 만족되는 모든 엘리먼트를 선택하고 있다는 점입니다.

관련 자료
- jQuey Selector 종류
Posted by 웹눈
이제 슬슬 서버사이드 언어인 PHP 와 jQuery 를 함께 사용하는 예제를 다루어 보도록 하겠습니다.
이번 강좌에서는 Select 필드의 항목이 변경되면 다른 필드가 동적으로 변경되는것을 해보도록 하겠습니다.

이 예제는, 여러 사이트의  회원가입 양식에서 보셨을텐데요. 예로, 내가 해당하는 국가를 선택하면 그에 따른 도시명들이 나열되는 select 필드가 동적으로 생성되는 예제입니다.

1. 먼저, Client Language 를 살펴보고, (jQuery 와 Html)
2. Server-side code 를 살펴본다음,
3. 코드에 대한 설명을 하도록 하겠습니다.

1. jQuery & html Code
<script src="../jquery.js.txt" type="text/javascript"></script>
<script type="text/javascript">
    function setup_country_change(){
        //나라가 바뀌는지 이벤트를 감지함.
        //문서가 ready 되면 실행되는 콜백 함수
        $('#country').change(update_cities);
    }
    function update_cities(){
        //선택된 나라를 country 변수에 저장한다.
        var country = $('#country').attr('value');
        //나라가 선택되면 get_city.php 함수 실행
        //데이터가 반환되면 show_cities() 함수가 실행된다.
        $.get('get_cities.php?country='+country,show_cities);
    }
    function show_cities(res){
        //get_cities.php 에 의해 데이터가 반환되면 res로 받아옵니다.
        //필드를 변경한다.
        $('#cities').html(res);
    }
    //문서가 로드 완료되면 setup_country_change() 함수를 실행한다.
    $(document).ready(setup_country_change);
   
</script>
</head>

<body>
<h1>웹눈의 jQuery 강좌 6 - Select 필드 동적으로 변경하기</h1>
<h3>이 강좌는 'http://webnoon.net - 웹눈의 웹이야기' 블로그에서 보실수 있습니다.</h3>
    <form id="select_country" name="select_country" method="" action="#">
        <table>
            <tr>
                <th>Country</th>
                <td>
                    <select name="country" id="country">
                        <option value="" selected="selected">나라를 선택해주세요.</option>
                        <option value="ko">한국</option>
                        <option value="us">미국</option>
                        <option value="uk">영국</option>
                    </select>
                </td>
            </tr>
            <tr>
            <th>Cities</th>
                <td id="cities">나라를 먼저 선택해주시기 바랍니다.</td>
            </tr>
        </table>
    </form>
</body>

2. PHP - Code
<?php
    switch($_REQUEST['country'])
    {
        case "ko":
        $cities = array('서울','대전','부산','대구');
        break ;
       
        case "us":
        $cities = array('New york','Cicago','L.A','또 뭐가 있니');
        break ;
       
        case "uk":
        $cities = array('London','도시1','도시2','도시3');
        break;
        default :
        $cities = false ;
        break;
    }
    if(!$cities) echo "나라를 선택해 주시와요.";
    else echo "<select name='city'><option>".
            join('</option><option>',$cities).
            '</option></select>';
?>

3. 코드에 대한 설명

먼저, 전체적인 그림을 잡아보도록 하지요.
사용자가 하는 행위를 생각해 보면, 우선 나라를 선택을 하게 될것입니다.. 이런 행위를 프로그래밍에서는 '이벤트가 발생한다' 고 하는데요, 즉, 사용자가 나라를 선택하는 행위의 발생을 말합니다.

그러면 우리가(코더 혹은 프로그래머)가 해야 할 일은 이러한 사용자의 행위(이벤트) 의 발생을 감지해서 그에 따른 적절한 조치들을 취해야 겠지요? 이번 예제에서는 선택하는 이벤트가 발생하면 해당 국가의 도시명들을 가지고 오는 작업을 해주어야 하겠습니다.

그럼 1번 jQuery 코드를 살펴보면, 사용자의 이벤트를 감지하는 코드를 볼수가 있습니다. 무엇이냐구요? 바로 setup_country_change() 함수 안에 있는 $('#country').change(update_cities) 부분이 사용자의 이벤트를 감지하는 부분입니다.

$('#country') 라는 'Object(객체)' 에 변화(change) 가 감지되면 update_cities 라는 콜백 함수를 실행하라는 내용이지요. html 코드를 보면 id가 country 로 되어 있는 부분이 select box 로 되어있는것을 알수 있습니다. 즉, 사용자가 select box를 선택(변경) 하면 발생하는 이벤트를 감지해서 update_cities() 라는 함수를 실행한다는 내용입니다.

그럼 변화가 발생하면 실행되는 함수인 update_cities() 함수를 살펴보도록 하지요.
이 함수는 어느 나라가 선택되어졌는지 확인하고, 서버사이드 언어인 PHP에 선택되어진 나라 정보를 전송하게 됩니다.

var country = $('#country').attr('value'); 이 부분이 선택되어진 나라를 변수에 저장하는 부분입니다. select box를 보면 option 마다 속성값이 있는것을 볼수 있는데, 이것이 선택될때마다 #country 객체의 value 값이 바뀌게 됩니다.

만약, '한국'을 선택했다면 country 변수에는 'ko'라는 값이 할당이 되겠지요?

이제 이 예제의 핵심적인 부분을 살펴 보도록 하겠습니다.

$.get('get_cities.php?country='+country,show_cities); 이 부분은 get_cities.php 인 서버측에 선택되어진 나라 정보를 전송하고나서 get_cities.php로 부터 제공되어지는 데이터를 retrieve(되돌려 전송) 받습니다.

선택되어지 나라 정보를 get 방식으로 전송한다는것을 알수 있지요?

$.get() 함수는 두개의 매개변수를 전달 받는데, 첫번째에는 데이터를 전송/수신 할 php 주소를, 두번째는 서버로부터 데이터를 전송받으면 실행할 콜백 함수를 정의합니다. 뭐.. 간단하지요?

마지막으로 show_cities()함수를 살펴보도록 하지요.

show_cities() 함수는 $.get에 의해 불리어지는 함수인데, 서버측에서 제공하는 데이터를 매개변수로 받습니다.
즉, show_cities(res){} 식으로 사용하는데, res에는 서버에서 전송하는 데이터 정보가 담겨져 있지요.
이렇게 서버로부터 전송받은 데이터를 $('#cities').html(res); 와 같은 식으로 #cities 필드의 html 값을 변경시키는 것입니다.

그럼 이제, 서버측 언어를 살펴보도록 하지요. 대충 어떻게 되어있을지 감이 오지 않나요?

네, 간단합니다. $.get에서 전송한 나라 정보를 switch문을 사용해서 판별한다음에,
그에 맞는 도시명들을 반환하는 역할을 하고 있습니다.

여기서는 DB와 연동 하지는 않았지만, DB와도 문제없이 사용할수 있겠지요?
그럼 강좌는 여기서 마치도록 하겠습니다.

p.s - 예제 소스는 파일로 첨부하였으니, 다운받아서 실행해 보시기 바래요. 질문은 언제나 환영입니다~




Posted by 웹눈
이번 시간에는 카테고리 별로 내용물을 분류해보도록 하겠습니다. (jQuery가 처음이신 분들은 강좌1부터 보시는걸 권장합니다. ) 우리가 무엇을 할것인지 보도록 하지요. 아래 예제를 참고해주세요.

위 예제처럼 카테고리를 클릭하면 리스트들이 각 분류에 맞게 정렬되는 것을 해볼것입니다. 어렵지 않아요.

위의 예제를 다운로드 하실수 있습니다.
1. 마크업 구조 보기
<div id="wrap">
<div id="category">
    <h3>카테고리</h3>
        <ul>
       <li><a href="#" title="all">전체기사</a></li>
         <li><a href="#" title="eco">경제/금융</a></li>
            <li><a href="#" title="soc">사회</a></li>
            <li><a href="#" title="star">연예</a></li>
            <li><a href="#" title="sports">스포츠</a></li>
        </ul>
    </div>
    <div id="newslist">
    <h3>뉴스 목록</h3>
    <ul>
     <li class="eco"><a href="#">경제뉴스 1 </a></li>
        <li class="sports"><a href="#">스포츠뉴스 1</a></li>
        <li class="soc"><a href="#">사회뉴스 1</a></li>
        <li class="eco"><a href="#">경제뉴스 2 </a></li>
        <li class="star"><a href="#">연예뉴스 </a></li>
        <li class="sports"><a href="#">스포츠뉴스 2</a></li>
        <li class="eco"><a href="#">경제뉴스 3 </a></li>
        <li class="soc"><a href="#">사회뉴스 2</a></li>
        <li class="eco"><a href="#">경제뉴스 4</a></li>
        <li class="sports"><a href="#">스포츠 뉴스3</a></li>
        <li class="star_sports"><a href="#">연예/스포츠 뉴스 </a></li>
        <li class="eco"><a href="#">경제뉴스 6</a></li>
        <li class="soc"><a href="#">사회뉴스 3</a></li>
        <li class="soc_eco"><a href="#">사회/경제뉴스 </a></li>
    </ul>
    </div>
</div>

우선, 마크업은 보시는바와 같이 간단한 구조로 되어 있습니다. 적색으로 되어진 부분을 활용하여 분류기능을 사용할것입니다.

2. jQuery 코드 보기
$(document).ready(function(){
$("#category a").click(function(e){
e.preventDefault();
var category = $(this).attr("title");
$("#newslist li").fadeOut("slow");
if(category == "all"){$("#newslist li").fadeIn("slow");}
else{$("#newslist li[class*="+category+"]").fadeIn("slow");}
});
});

굉장히 간단하지요? 저렇게 짧은 코드 하나로 멋진 분류기능을 사용할수 있다니.. jQuery가 그만큼 강력하다는 예기겠지요.
순서대로 가보겠습니다.

1. 우선 카테고리의 분류가 클릭(이벤트 발생) 됩니다.
2. 이벤트가 발생되면 실행될 함수(Callback Function)가 있겠지요?
3. 어떠한 내용이 실행되어야 하냐면, 분류에 해당하지 않는 리스트들은 숨기고(fadeOut), 분류에 해당하는 리스트들은 나타나도록(fadeIn) 합니다.

1번에 해당하는 내용은 $("#category a").click(Callback Function) ; 이 되겠군요. 클릭이 되는 대상에 click 이벤트를 적용해 주었습니다. 즉, <div id="category"></div> 안에 있는 Anchor 태그가 대상이 되겠군요.

2번에 해당하는 콜백함수 부분을 보도록 하겠습니다.
function(e){

e.preventDefault();
var category = $(this).attr("title"); // 클릭된 대상의 title 속성 값을 category 변수에 반환합니다.
$("#newslist li").fadeOut("slow"); // 우선 list들을 모두 숨깁니다.
if(category == "all"){$("#newslist li").fadeIn("slow");}
else{

$("#newslist li[class*="+category+"]").fadeIn("slow"); // 분류에 해당하는 list를 나타냅니다.

}
}

3. Key Point
이번 예제에서의 Key Point 는 속성 선택자 입니다.
$("#newslist li[class*="+category+"]").fadeIn("slow"); 이 부분에서 선택자 부분을 잘 보세요. [class*="+category+"] 이 부분이 생소하실 거라고 생각합니다.

[class*="+category+"] 이것을 속성 선택자라고 합니다. 형태는 [Attribute=value] 가 됩니다. 즉, 속성(Attribute)의 값이 value가 되는 대상을 선택하는 것이죠.

그런데 예제에서는 [Attribute*=value] 가 사용되었습니다. *= 은 value 값을 이부분이라도 포함하고 있는 속성값을 선택하겠다는 의미가 됩니다.

속성 선택자에 대해서 자세히 다루는 포스팅을 한번 하도록 하지요. 

난해하거나 기타 질문있으시면 댓글 남겨주세요.
Posted by 웹눈
이번 강좌에서는 섬네일 이미지를 누르면 큰 이미지가 변환되도록 해보겠습니다. 자세한 내용은 예제를 다운받아 보세요.

1. 마크업 코드
<div id="wrap">
<div id="largeimg">
<a href="#"><img src="images/01.jpg" alt="이미지1"></a>
</div>
<div id="thumnail">
<ul>
<li><a href="images/01.jpg"><img src="images/01.jpg" alt="이미지1 섬네일" /></a></li>
<li><a href="images/02.jpg"><img src="images/02.jpg" alt="이미지2 섬네일" /></a></li>
<li><a href="images/03.jpg"><img src="images/03.jpg" alt="이미지3 섬네일" /></a></li>
<li><a href="images/04.jpg"><img src="images/04.jpg" alt="이미지4 섬네일" /></a></li>
</ul>
</div>

</div>

2. jQuery 코드
$(document).ready(function(){
        $("#thumnail a").click(function(e) {
e.preventDefault();
var largeImgPath = $(this).attr("href");
var largeImgAlt = $(this).find("img").attr("alt").substr(0,4);
$("#largeimg img").attr({src:largeImgPath,alt:largeImgAlt});
});
});

먼저, e.preventDefault() 를 보도록 하지요. 이것은 무엇이냐 하면, 대상을 클릭했을때 발생하는 이벤트를 방지하는 것입니다. 즉, 링크가 걸려있는 Anchor 태그를 클릭하면 해당 주소로 페이지가 이동되지요? 그런데 우리는 해당 링크를 클릭하면 화면전환없이 이미지를 바꾸어야 하니, 페이지 이동 이벤트를 방지해야 합니다. 그래서 e.preventDefault()를 사용한것이지요.
이해가 잘 안되시면 e.preventDefault() 부분을 지우고 한번 해보세요. 무슨 내용인지 금방 알수 있습니다.

attr()메서드는 두가지 경우에 사용할수 있습니다. 먼저, 대상의 속성 값(value)을 알고 싶을때는 attr(Attribute) 처럼 사용합니다. 즉, 위의 예제에서 $(this).attr("href") 이 부분은 선택된 대상의 href 속성 값을 반환합니다.

두번째는 선택된 대상의 속성값을 변경할때 사용합니다. attr({Attribute:Value,Attribute1:Value1,....}); 이런식으로 속성을 설정할수 있지요.

위의 예제를 살펴보면, 처음에는 클릭된 대상의 href 속성의 값을 불러와서 큰 이미지의 src 의 값으로 대체하였습니다. 그러면 큰이미지가 바뀌겠지요?

alt값도 변경하였는데, 이부분은 여러분이 연구해 보시기 바랍니다.

질문이나 기타 피드백 언제나 환영해요~

Posted by 웹눈
웹서핑을 하다 보면 스크롤바를 따라다니는 슬라이드 메뉴를 자주 볼수 있습니다. 오늘은 슬라이드 메뉴를 jQuery로 만드는 방법을 알아보도록 하지요. jQuery가 처음이신 분들은 강좌1 부터 보시는걸 권장합니다.

예제를 보시려면 아래의 파일을 다운받아 보세요.
1. 슬라이드 메뉴의 Key Point 
  • 어떤 대상을 움직이려면 대상의 position 값은 absolute 또는, relative 값이 되어야 합니다.(css 에서 설정합니다.)
2. 마크업 보기
<body>
<div id="wrap">
(주저리 주저리..컨텐츠 내용)
</div>
<div id="slidemenu">
(슬라이드 메뉴 내용)
</div>
</body>

예제에서는 이런 구조로 마크업 되어 있으며, slidemenu의 css 속성값은 아래와 같습니다.

#slidemenu{background:#12cf3d;position:absolute;width:100px;top:50px;right:10px;}

즉, 현재 슬라이드 메뉴는 브라우저 상에서 상단에서 50px만큼, 우측에서 10px만큼 떨어져 있는 상태입니다.
이제 이 슬라이드 메뉴를 스크롤바에 맞추어 움직이는 jQuery 소스를 보도록 하지요.


<script type="text/javascript" src="jquery.js"></script> // jquery 라이브러리를 가지고 옵니다.(강좌1 참조)
<script type="text/javascript">
$(document).ready(function(){ 
var currentPosition = parseInt($("#slidemenu").css("top")); 
$(window).scroll(function() {
var position = $(window).scrollTop(); // 현재 스크롤바의 위치값을 반환합니다.
$("#slidemenu").stop().animate({"top":position+currentPosition+"px"},1000);
});
});
</script>

자 우선 코드를 분해하기 전에, 어떻게 해야 슬라이드 메뉴가 스크롤바에 맞추어 움직이는지 로직을 생각해 보도록 하지요. 우선, 슬라이드 메뉴가 움직인다는 것은 css의 top 값이 변경된다는 뜻입니다. 즉, 어떠한 이벤트(event) 가 발생하게 될때마다 슬라이드메뉴의 top 의 값이 변경되도록 해야 합니다.

그럼, 어떠한 이벤트가 발생되어야 할까요? 맞습니다. 브라우저상의 스크롤바의 위치값이 변경될때마다 슬라이드 메뉴의 위치값이 변경되어야 합니다.

즉, 위의 소스코드에서 볼때  $(window).scroll(fn) 이 부분이, "window 창에서 scroll 이벤트가 발생할때마다 콜백함수 fn 을 실행하여라." 라는 뜻이 됩니다.

그럼 스크롤 이벤트가 발생할때마다 실행되는 콜백함수 부분을 보지요.
var position = $(window).scrollTop(); // 현재 스크롤바의 위치값을 반환합니다.
$("#slidemenu").stop().animate({"top":position+currentPosition+"px"},1000);

var position = $(window).scrollTop(); 부분을 보도록 하겠습니다. 이 부분은 주석으로 달아놨듯이 현재 스크롤바의 위치값을 반환하여 변수 position 에 할당하는 것입니다.(변수의 개념을 잘 모르시면 댓글남겨 주세요)

그리고 다음으로 핵심적인 부분을 보도록 하지요. 

$("#slidemenu").stop().animate({"top":position+currentPosition+"px"},1000);

$("#slidemenu") 부분은 강좌1,2 에서 설명했듯이 선택자 영역입니다. ID 속성값이 slidemenu 인 대상이 선택되어진 상태이지요. 슬라이드 메뉴를 감싼 div 가 되겠지요?

그런다음에 stop()과 animate() 라는 메서드가 보입니다. 우선 stop()은 넘어가도록 하지요.

animate(매개변수,진행시간) 메서드에 대해 자세히 다루어 보겠습니다. animate() 메서드는 두개의 인자를 받습니다. 처음 인자는 속성값을 정하는 부분인데요, {"속성":"값"} 형식으로 들어가게 됩니다. 즉, 대상의 속성을  해당하는 값으로 변화시킨다는 것이지요.  

위의 예제에서는 top 속성값을 현재 스크롤바의 위치값으로 변경하였습니다. 그래서 스크롤바의 위치값이 변경될때마다 대상의 top 값이 현재 스크롤바의 위치값으로 변경되면서 대상이 움직이게 되는 것이지요.

animate() 두번째 인자에는 애니메이션이 얼마동안의 시간안에 시현이 완료될것인지 정할수 있는 microTime 값이 들어가게 됩니다. 즉 1000이라 함은 1초를 뜻하게 됩니다.

예제를 살펴보면, 1초동안 슬라이드 메뉴가 현재의 스크롤바 위치로 이동하게 되는것이지요. 1초라는 시간이 주여졌기 때문에 슬라이드 메뉴가 바로바로 이동하지 않고 약간은 스크롤바에 뒤쳐져 이동하는것을 알수 있습니다.

여기서 stop() 메서드는 여러분들이 직접 실험해 보세요. 제가 백마디 하는것보다 stop()메서드가 없을때와, 있을때의 차이점을 보시는것이 더욱 이해하기 좋습니다.

처음이라 자세히 설명하려고 하다보니 글이 길어지네요. 자세한 설명은 점차 줄여나가도록 하겠습니다.
질문사항이나 해주었으면 하는 예제가 있으시면 댓글 남겨주세요.
Posted by 웹눈
이번 강좌에서는 펼침목록 만들기를 해보겠습니다.
예제보기를 원하시면 위 htm 파일 링크를 클릭하세요.

jQuery 를 처음 접하시는 분은 강좌 1부분부터 보시는걸 권장합니다.

그럼 예제1 부분에서 h3 엘리먼트 영역을 클릭시 아래의 <p> 엘리먼트 영역이 사라지는 것을 보도록 하지요. 소스 코드는 아래와 같습니다.

<script type="text/javascript">
$(document).ready(function(){
// 예제1 코드
$("#first h3").toggle(function(e){ // 선택자에 toggle이라는 이벤트를 주었습니다.
e.preventDefault(); // 아직은 신경쓰지 않으셔도 되는 부분
$(this).next().slideUp();  //next()와 slideUp() 이라는 메서드가 보입니다.
},function(e){
e.preventDefault();
$(this).next().slideDown();
});
});
</script>

먼저 toggle(fn1,fn2) 이벤트에 대해서 살펴보도록 하겠습니다. 저번 강의시간에 click(fn) 이라는 이벤트에 대해서는 설명을 드렸습니다. toggle도 click 과 같은 이벤트인데, 인자로 두개의 Callback function 을 갖는것을 볼수 있습니다.

즉, toggle 이벤트는 한번 클릭이 될때마다 fn1 과 fn2을 번갈아 실행하게 되지요.

toggle 인자로 주어진 첫번째 콜백함수에서 $(this).next().slideUp(); 라는 코드가 보입니다.

$("#first h3") 로 선택한 대상을 한번 클릭하면 클릭된 대상 $(this)의 다음 대상 next() 을 슬라이드업 slideUp() 하라는 내용이지요. 여기서 다음 대상을 찾아보면 마크업 상에 <h3> 다음에는 <p> 엘리멘트가 있지요? 이것을 선택하게 됩니다. 즉 <p>엘리멘트가 슬라이드업(사라짐) 이 되는것이지요.

마찬가지로 대상을 한번 더 클릭하게 되면 toggle의 두번째 인자인 콜백함수 $(this).next().slideDown(); 의 내용이 실행됩니다.

두번째 예제는 여러분들이 한번 보시고 이해해 보세요. 첫번째 예제를 이해하시면 두번째도 충분히 이해하실수 있습니다.

언제나 질문이나 기타 피드백 환영합니다.
Posted by 웹눈
오늘부터 저와함께 하루에 한두개정도씩 jQuery를 가지고 놀아 보겠습니다.
처음부터 현란한 예제로 시작하는것보다 간단한 예제를 가지고 시작해서 응용하실수 있도록 하겠습니다.

처음에만 간략하게 jQuery에 대해 설명해 드리며, 다음 예제부터는 쓸대없는 주석은 달지 않도록 하겠습니다.

우선 jQuery는 일종의 자바스크립트 라이브러리로써, 현재 다른 라이브러리로써는 prototype이라든가 네이버의 '진도'가 있습니다.
라이브러리라 함은 쉽게 설명하면, 프로그래밍언어에서 자주 사용하는 함수나 메서드등을 재사용이 가능하도록 모아놓은 것을 말합니다.


그럼 이제부터 예제를 시작합니다.

1. jQuery를 사용하기
 - 위 파일을 다운받습니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>jQuery 연습1 애니메이션효과</title>
<script type="text/javascript" src="jquery.js"></script>

- 위의 코드중 빨간색 으로 되어 있는 것처럼 html 파일안에 불러들입니다. 이로써 jQuery를 사용할 준비는 모두 끝났습니다.
%jQuery 최신 버전은 http://jquery.com 에서 다운받으실수 있습니다.


2. DIV 태그를 클릭하면 숨기기

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>jQuery 연습1 애니메이션효과</title>
<script type="text/javascript" src="jquery.js"></script> // jQuery를 불러오기
<script type="text/javascript">
$(document).ready(function(){ // 페이지가 로딩이 완료되면(이미지제외)
$("#hello").click(function(){
$(this).hide() ;
});
});
</script>
<style type="text/css">
#hello{background:#ff0000;width:100px;position:absolute;}
</style>
</head>

<body>
<div id="hello">Hello World!</div>
</body>
</html>

$(document).ready(function() {
(이곳에 시연하고자 하는 jquery 코드가 들어감.)
});

위의 코드가 jQuery를 시작하는 기본 코드가 됩니다. 
Javascript 에서의 window.onload = function() { } ;
부분과 비슷합니다만, 다른점은 자바스크립트의 onload가 모든 이미지들의 로딩이 마쳐야 시연되는 반면에, jQuery는 이미지가 로딩되지 않아도 시연이 됩니다.

그럼 이제 시연하고자 하는 코드를 보도록 하겠습니다.

$("#hello").click(function(){
$(this).hide() ;
});

위의 코드에서 파란 색 부분을 선택자(Selector) 라고 합니다. 즉, 구현할 대상에 되는 녀석을 선택하는 것이죠. 사용 방법은 $() 의 괄호안에 대상이 되는 녀석을 선택하는것입니다. jQuery가 좋은것이 선택자 개념이 CSS와 거의 흡사하기 때문에 쉽게 사용할수 있습니다.

저는 <body></body> 안에 있는 <div id="hello"> 를 선택하고자 하였습니다 . 그래서 $() 안에 "#hello" 를 넣은것이죠.
#hello 는 CSS에서 id 속성(Attribute) 값이 hello 인 태그(Element)를 선택합니다. jQuery도 같지요?

이 선택자의 개념만 잘 익히고 있으면 jQuery를 90%정도 무리없이 사용할수 있다고 할수 있습니다. 정작 메소드들의 종류는 그렇게 많지가 않기 때문이지요.

위의 코드에서 오렌지색으로 되어 있는 부분이 메서드 입니다. 선택된 대상들에게 행동을 명시하는 부분이지요. 위의 코드를 사람이 사용하는 언어로 표현하면,
"#hello 야 너는 hide()를 하여라 " 정도가 되겠죠.

$("#hello").click(function(){ (A)  });  를 보면 선택된 대상이 클릭이 되면 (A) 부분의 내용이 시현됩니다.

여기서 click 은 이벤트의 한 종류로써, 자세한것은 다음에 예제를 진행해 나가면서 하나하나 설명하도록 하겠습니다.
.ready(function(){}); 도 이벤트의 한 종류입니다.

위의 코드에서는 (A) 부분에 $(this).hide() ;  들어가 있는것을 보실수 있습니다. $(this)는 중요한 개념으로 이벤트를 발생시킨 주최를 가리키는 것이죠. 즉, $("#hello") 가 됩니다. 위 소스를 넣고 브라우저로 확인하면, <div id="hello">안녕하세요?</div>를 클릭하면 "안녕하세요?" 를 감싼 빨간 박스가 사라지는것을 보실수 있습니다.

다음번 강좌부터는 예제 하나씩 준비해서 분석해보는 시간을 갖도록 해보겠습니다. 질문사항이나 기타 건의사항은 댓글 부탁드려요~!

Posted by 웹눈
# 기본 셀렉터
*             : 모든 엘리먼트와 일치
E             : 태그명이 E인 모든 엘리먼트와 일치
E F          : E의 자손이면서 태그명이 F인 모든 엘리먼트와 일치
E>F         : E의 바로 아래 자식이면서 태그명이 F인 모든 엘러먼트와 일치
E+F         : E의 형제 엘리먼트로 바로 다음에 나오는 엘리먼트 F와 일치
E~F        : E의 형제 엘리먼트로 다음에 나오는 모든 엘리먼트 F와 일치
E:has(F) : 태그명이 F인 자손을 하나 이상 가지는 태그명이 E인 모든 엘리먼트와 일치
E.C        : 클래스명 C를 가지는 모든 엘리먼트 E와 일치, E의 생각은 *.C와 동일함
E#I         : 아이디가 I인 엘리먼트 E와 일치. E의 생략은 *#I와 동일함
E[A]       : 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치
E[A=V]   : 값이 V인 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치
E[A^=V]  : 값이 V로 시작하는 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치
E[A$=V]  : 값이 V로 끝나는 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치
E[A*=V] : 값에 V를 포함하는 어트리뷰트 A를 가지는 모든 엘리먼트 E와 일치

# 위치기반 셀렉터
:first            : 페이지에서 처음으로 일치하는 엘리먼트. li a:first는 리스트 아이템의 첫번째 링크를 반환함
:last            : 페이지에서 마지막으로 일치하는 엘리먼트. li a:last는 리스트 아이템의 마지막 링크를 반환함
:first-child    : 첫번째 자식 엘리먼트. li:first-child는 각 리스트의 첫번째 아이템을 반환한다.
:last-child        : 마지막 자식 엘리먼트. li:last-child는 각 리스트의 마지막 아이템을 반환한다.
:only-child        : 형제가 없는 모든 엘리먼트 반환
:nth-child(n)    : n번째 자식 엘리먼트. li:nth-child(2)는 각 리스트의 두번째 리스트 아이템을 반환함
:nth-child(event|odd) : 짝수 또는 홀수 자식 엘리먼트. li:nth-child(event)은 각 목록의 짝수 번째 자식 엘리먼트 반환
:nth-child(Xn + Y) : 전달된 공식에 따른 n번째 자식 엘리먼트. Y는 0인경우 생략가능하다. li:nth-child(3n)은 3의 배수번째 아이템을 반환, li:nth-child(5n+1) 은 5의 배수 +1번째 아이템을 반환
:event / :odd    : 페이지 전체의 짝수/홀수 번째 엘리먼트. li:even은 모든 짝수번째 아이템을 반환한다.
:eq(n)            : n번째로 일치하는 엘리먼트
:gt(n)            : n번째 엘리먼트(포함안됨) 이후의 엘리먼트와 일치
:lt(n)            : n번째 엘리먼트(포함안됨) 이전의 엘리먼트와 일치

# 필터 셀럭터
:animated        : 현재 애니메이션이 적용되고 있는 엘리먼트를 선택
:button            : 모든 버튼을 선택함(input[type=submit], input[type=reset], input[type=button], button)
:checkbox        : 체크박스 엘리먼트만 선택(input[type=checkbox])
:checked        : 선택된 체크박스나 라디오 버튼만을 선택
:contains(foo)    : 텍스트 foo를 포함하고 있는 엘리먼트만 선택
:disabled        : 인터페이스에서 비활성화 상태인 모든 폼 엘리먼트를 선택한다.
:enabled        : 인터페이스에서 활성화 상태인 모든 폼 엘리먼트를 선택한다.
:file            : 모든 파일 엘리먼트를 선택함(input[type=file])
:header            : 헤더 엘리먼트만 선택한다. 예를 들어 <h1>부터 <h6>엘리먼트만 선택한다.
:hidden            : 감춰진 엘리먼트만 선택한다.
:image            : 폼 이미지를 선택한다.(input[type=image])
:input            : 폼 엘리먼트만 선택한다.(input, select, textarea, button)
:not(filter)    : 필터의 값을 반대로 변경한다.
:parent            : 빈 엘리먼트를 제외하고, 텍스트도 포함해서 자식 엘리먼트를 가지는 엘리먼트를 선택한다.
:password        : 패스워드 엘리먼트만 선택한다. (input[type=password])
:radio            : 라디오 버튼 엘리먼트만 선택한다.(input[type=radio])
:reset            : 리셋 버튼을 선택(input[type=reset], button[type=reset])
:selected        : 선택된 엘리먼트만 선택한다.
:submit            : 전송 버튼을 선택한다.(button[type=submit], input[type=button])
:text            : 텍스트 엘리먼트만 선택(input[type=text])
:visible        : 보이는 (visible)엘리먼트만 선택한다.
Posted by 웹눈