본문 바로가기

개인 스터디/정리

Do it 웹사이트 따라 만들기 - 페이지 이동 효과 만들기

# 4-1. 동적인 웹 사이트를 위한 자바스크립트

자바스크립트와 제이쿼리

  • 자바스크립트는 웹 페이지와의 상호작용을 가능하게 하는 프로그래밍 언어이다.
  • 서버를 구현하고 읽고 쓰게 하거나(Node.js) 크롤링(JSDom)도 가능하다.
  • jQuery는 자바스크립트를 이용한 라이브러리 중 하나로, 자바스크립트를 매우 간결하고 쉽게 사용할 수 있게 도와준다.

# 4-2. 콘텐츠 영역의 이동 형태 살펴보기

  1. class = menu# 영역을 클릭하면 그 메뉴를 기준으로 다른 메뉴들이 왼쪽 혹은 오른쪽으로 슬라이드 하도록 만든다. 이를 위해 현재 영역은 this, 왼쪽으로 이동된 영역은 prev, 오른쪽 영역은 next로 클래스 스타일을 지정한다. this의 left값은 0, prev는-100%, next는 100%로 설정한다.
  2. .this 클래스의 텍스트와 이미지를 숨김처리한다.
  3. 그러나 CSS는 클래스보다 아이디의 상속이 우선이므로 #container #menu 가 스타일로 적용된다. 클래스 우선순위를 높이기 위해 .this, .next, .prev를 !important로 지정한다.

이렇게 보인다.

이런식으로 슬라이드가 이동하는 것을 확인했으니 class는 다시 지워주기.

 


# 4-3. 제이쿼리로 슬라이드 효과 만들기

먼저 제이쿼리의 순서를 정리한다.

  1. 메뉴를 클릭한다. -> click()
  2. 클릭한 메뉴에 .on을 추가하여 활성화를 만든다. -> addClass()
  3. 클릭하면 메뉴에 해당되는 id를 찾는다. -> attr()
  4. 해당 영역에 .this 클래스를 추가한다. -> addClass()
  5. 이전 영역은 .this 클래스를 지우고 .prev 클래스를 추가한다. -> removeClass(), prevAll()
  6. 이후 영역은 .this 클래스를 지우고 .next 클래스를 추가한다. -> nextAll()js 파일에 click 메서드를 사용하여 클릭 이벤트를 만든다.

 

1. js 파일에 click 메서드를 활용하여 클릭이벤트를 만든다.

$(document).ready(function(){
	$("#container").addClass("start");
	$("nav li").click(function(){
		alert("click event")
	});

  1. 각 메뉴를 클릭할 떄 .on 클래스가 적용되어야 사용자가 클릭한 메뉴가 어떤 것인지 확인할 수 있다. 현재 클릭한메뉴에만 .on 클래스가 적용되도록하고 아닌 클래스는 removeClass 메서드로 삭제한다.
		$("nav li").removeClass("on");    
		$(this).addClass("on");
  1. 현재 내가 클릭한 메뉴가 $(this)가 되고 이것을 클릭하면 해당하는 section 영역을 알아야 한다. 이를 위해 <nav> <li> 태그에 data-rol 속성을 추가해 각 id를 찾을 수 있게 한다.
  2. 클릭된 <li> 태그의 data-rol 속성값을 가져오도록 attr 메서드를 사용한다. 
  3. 가져온 data-rol의 속성값을 선택자로 사용할 수 있도록 변수(var id)로 만든다.
  4. 변수로 만든 id를 사용하여 현재, 이전, 이후 클래스를 section 태그에 동적으로 적용한다. 즉, .this 클래스가 적용될 경우 다른 클래스는 모두 지워지고 .this 클래스를 기준으로 앞과 뒤로 해당 클래스가 적용되어야 한다.
  5. 이제 동적인 화면으로 만들기 위해 section id="container" 영역의 max-width 값이 클릭할 때 변경되도록 만든다.메뉴를 클릭할 때마다 #container의 width가 100%로 변경되도록 css 메서드를 사용하여 작성한다.
  6. 화면 이동 효과가 잘 보이도록 transition 속성값을 5s로 지정한다.
$(document).ready(function(){
	$("#container").addClass("start");
	$("nav li").click(function(){
		$("#container").css("max-width", "100%")
		var id=$(this).attr("data-rol");    
		$("nav li").removeClass("on");    
		$(this).addClass("on");    
		$(".content").removeClass("prev this next");     
		//클릭 시 가지고 있던 클래스를 모두 지운다    
		$("#" + id).addClass("this").prevAll().addClass("prev");    
		//클릭한 메뉴와 매칭 되는 id에 this 클래스를 지정하고 그 앞의 모든 <section> 태그는 .prev클래스를 지정한다    
		$("#" + id).nextAll().addClass("next");    
		//클릭한 메뉴와 매칭 되는 id의 뒤에 오는 <section> 태그는 .next 클래스를 지정한다     
	});

 


# 4-4. 페이지 구성 후 콘텐츠 영역 표시하기

  1. 각 section 안에 다시 section을 작성하여 content_wrap 클래스를 지정한다. 이는 또 다른 하나의 콘텐츠 영역이 된다.
  2. <h2> 태그의 스타일을 CSS로 지정한다.
  3. 이전에 css opacity를 0으로 지정했는데, .this로 선택된 후에는 보이도록 .this 클래스 css에 opacity 속성을 추가한다.
  4. <h2> 태그와 마찬가지로 .this를 추가해 전후 스타일을 지정한다.

이렇게 보이도록 css 설정

  1. 로고를 클릭하면 메인 페이지로 이동하도록 js 파일을 작성한다. .logo_box라는 로고의 클래스를 선택자로 지정한 후 클릭 이벤트를 만든다.
  2. click시 prev/next/this 클래스를 삭제하고 container의 max-width를 1200px로 변경한다.
  3. 메뉴 역시 초기화 상태가 되도록 li class="on"을 동적으로 지워준다.
  4. css파일에 .logo_box에 마우스 커서가 나타나도록 cursor 속성값을 pointer로 지정한다.
$(document).ready(function(){
	//로고 클릭 시
	$(".logo_box").click(function(){
		$("nav li").removeClass("on");
		$(".content").removeClass("prev this next");
		$("#container").css("max-width", "1200px");
	});
});

 


# 4-5. transition 속성으로 애니메이션 효과 만들기

  1. css파일에 transition 속성을 지정한다. 시작위치를 -100%로 지정하여 위에서 아래로 내려오도록 한다.
  2. 순차적으로 나타나게 하기 위해 transition-delay 속성을 이용해 시작 시간을 지연시킨다.
  3. #container에 .start 클래스를 지정하고 지정된 클래스에 상속하여 페이지에 로딩 시 top의 값을 0으로 지정한다. <section> 태그의 모든 영역이 처음에는 콘텐츠 영역에 나타나지 않게 상단에 있다가 페이지가 로딩되면 콘텐츠 영역의 첫 시작점에 오도록 위치를 지정해준다.
  4. 페이지가 로딩되면 지정된 클래스(start 클래스)를 추가할 수 있도록 js파일을 열어 스크립트를 작성한다.
  5. css 스타일이 <body> 태그가 모두 생성된 후 적용되게 만들기 위해 css 스타일은 <head> 태그 안이 아닌 </body> 태그 위로 옮긴다.

내려오는중

  1. <section> 태그 영역이 페이지로 변할 때 캐릭터 이미지가 보이지 않도록 opacity를 0으로 지정했다. 여기에 추가로 transition 속성값을 all.6x로 지정하고 transition-delay 값을 .3s로 지정한다.
  2. .this뿐만 아니라 .prev와 .next도 함께 지정하여 애니메이션을 동일하게 맞추어준다.
  3. 캐릭터 이미지가 있는 before 가상요소에 transform 속성 중 translate의 속성값을 300으로 지정하여 위치가 왼쪽으로 이동할 수 있도록 한다. 텍스트가 있는 after요소에는 translate를 -300으로 지정해 오른쪽으로 이동하게 한다.
  4. 메뉴 클릭 후 나타나는 <h2> 태그도 transition과 transition-delay를 통해 새롭게 나타나도록 만든다.

사라지는 중