티스토리 뷰
+ 목표 :
---------------------------------------------
| ▶ {제목} |
---------------------------------------------
| {내용} |
---------------------------------------------
의 박스 컨텐트에서 내용줄은 처음에 숨겨져 있고
제목줄을 클릭하면 내용줄이 튀어나오는 토글 기능 구현.
을 하는데, 나같은 객체지향에 애로사항 많은 이들을 위해
함수를 클래스로 전환시켜 나가는 과정도 보여주기.
+ 구현 :
1. 기존에 하던대로 함수 제작
function wjToggle(curEl)
{
var cinEl = $(curEl).up('div', 1);
var contEl = $(cinEl).down('.content');
if ($(curEl).innerHTML.toLowerCase() == "▶")
{
contEl.show();
curEl.update('▼');
} else {
contEl.hide();
curEl.update('▶');
}
return false;
}
2. onClick 이벤트에 바로 적용해서 작동 확인
<div class="widjet"><div class="bar">
<div class="semo" onclick="wjToggle(this)">▶</div>
<div class="handle">{제목ddddddddddddddddddddddddddddddddddddddddddd}</div>
<div class="controls"><a href="javascript:void(0)" class="ctlEdit">+</a> <a href="javascript:void(0)" class="ctlDel">-</a></div>
</div>
<div class="content" style="display:none;">
내용
</div>
</div>
3. 이것을 여러 <div class="widjet"> 에 적용
$$('div.widjet').each(); 를 생각해 볼수 있다.
$$('div.semo').each(function(el) {
this.observe(''click', wjToggle); // 요기에서 2.와 다른점은 wjToggle 함수에 인자가 element 가 아닌 observe로 인해 event 가 간다는거다.
});
function wjToggle(event)
{
var curEl = Event.element(event); // event를 통한 element 구하기
var cinEl = $(curEl).up('div', 1);
var contEl = $(cinEl).down('.content');
if ($(curEl).innerHTML.toLowerCase() == "▶")
{
contEl.show();
curEl.update('▼');
} else {
contEl.hide();
curEl.update('▶');
}
return false;
}
이에, 한걸음 더 나아가 구현을 편하게 해주는 invoke 를 사용하여 내 머리가 스마트함을 보여주자.
$$('div.semo').invoke('observe', 'click', wjToggle);
4. 마우스를 올렸을때 손커서로 바꿔지도록 기능을 추가해본다.
$$('div.semo').invoke('setStyle', { cursor:'pointer' }).invoke('observe', 'click', wjToggle);
5. 이렇게 기능을 늘여나가려다보니 같은곳에 쓰이는 함수를 꾸러미로 묶고싶어졌다. 함수의 꾸러미를 만들수 있는것은 바로 Class !
그래서 wjToggle 함수를 클래스로 변형해보자.
var widjet = Class.create({
toggle: function() {
var cinEl = $(this).up('div', 1); // each() 의 인자에 해당되므로 this 사용가능.
var contEl = $(cinEl).down('.content');
if ($(this).innerHTML.toLowerCase() == "▶")
{
contEl.show();
$(this).update('▼');
} else {
contEl.hide();
$(this).update('▶');
}
return false;
}
});
var wj = new widjet();
$$('div.semo').invoke('setStyle', { cursor:'pointer' }).invoke('observe', 'click', wj.toggle);
6. 결과 전체 소스
<html> <head> <style type="text/css"> <!-- .widjet { width: 450px; border: 1px solid gray; margin: 0 0 5px 0; } .bar { height:22px; background-color:lightblue; } .semo { float:left; width: 15px; } .handle { float:left; margin-left:5px; width: 380px; height:22px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } .controls { float:right; width: 30px; } .content { clear:both; background-color:lightyellow; } --> </style> <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript" src="scriptaculous.js"></script> <script language="javascript" type="text/javascript"> //<![CDATA var widjet = Class.create({ toggle: function() { var cinEl = $(this).up('div', 1); var contEl = $(cinEl).down('.content'); if ($(this).innerHTML.toLowerCase() == "▶") { contEl.show(); $(this).update('▼'); } else { contEl.hide(); $(this).update('▶'); } return false; } }); document.observe('dom:loaded', function() { var wj = new widjet(); $$('div.semo').invoke('setStyle', { cursor:'pointer' }).invoke('observe', 'click', wj.toggle); }); //]]> </script> </head> <body> <div class="widjet"> <div class="bar"> <div class="semo">▶</div> <div class="handle">{제목ddddddddddddddddddddddddddddddddddddddddddd}</div> <div class="controls"><a href="javascript:void(0)" class="ctlEdit">+</a> <a href="javascript:void(0)" class="ctlDel">-</a></div> </div> <div class="content" style="display:none;"> 내용 </div> </div> </body></html>
'웹프로그래밍 > js' 카테고리의 다른 글
scriptaculous 웹문서 (0) | 2009.03.25 |
---|---|
Prototype.js 확장 컨트롤 LivePipe UI (0) | 2009.03.25 |
Web 에서 Flash 이용한 Clipboard Copy (0) | 2009.03.24 |
script.aculo.us 의 Sortable 사용 (1) | 2009.03.11 |
Prototype responseJSON 사용 (0) | 2009.03.11 |
- Total
- Today
- Yesterday
- Make Use Of
- How to geek
- 인터넷 통계정보 검색시스템
- 트위터 공유 정보모음
- 웹표준KR
- 치우의 컴맹탈출구
- Dev. Cheat Sheets
- w3schools
- Dev. 조각들
- ASP Ajax Library
- CSS Tricks
- WebResourcesDepot
- jQuery Selectors Tester
- DeveloperSnippets
- Smashing Magazine
- Nettuts+
- devListing
- 웹 리소스 사이트(한)
- Mobile tuts+
- Dream In Code
- Developer Tutorials
- CSS3 Previews
- 자북
- 안드로이드 사이드
- Code Visually
- Code School
- SQLer.com
- 무료 파워포인트 템플릿
- iconPot
- Free PowerPoint Templates
- Design Bombs
- Web Designer Wall
- 1st Webdesigner
- Vandelay Design
- 무료 벡터 이미지 사이트들
- Tripwire Magazine
- Web TrendSet
- WebMonkey
- 윤춘근 프리젠테이션 디자이너 블로그
- cz.cc 무료 DNS
- [웹하드] MediaFire
- [웹하드] DivShare
- 한컴 인터넷 오피스
- IE
- 안드로이드
- Chrome
- API
- nginx
- Mac
- iphone
- Docker
- Linux
- ASP
- PHP
- nodejs
- 워드프레스
- sencha touch
- JQuery
- Android
- CSS
- classic asp
- javascript
- Prototype
- JSON
- Wordpress
- 한글
- centos
- laravel
- iis
- git
- IOS
- Debug
- mssql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |