웹사이트 탭 기능(최신 글 등) - jquery
2024. 2. 27. 21:57ㆍ개발/웹 관련
반응형
꽤 오래전에 구입한 도서를 참고해서 만들고 사용한 코드인데, 책 제목은 생각이 안 나네요.
몇 해 전부터 jquery 같은 JS 플러그인 보단 순정(바닐라) javascript 가 인기를 끌고 있지만, 케케묵은 코드 공개해 봅니다.
실무에 여러 번 사용했던 코드지만 검증해 보고 사용해 보세요.
1. css style입니다.
<style>
#lt_tabs {margin:0; margin-top:50px; padding:0; list-style:none;}
#lt_tabs li{display:inline; padding:10px; border:1px solid #ccc;}
.lt_active {background-color:#336699;}
#lt_tabContent{padding:20px; border:1px solid #ccc;}
.lt_content { display:none; }
.lt_active_content {display:block; background-color:#eee;}
</style>
2. html 부분입니다.
<ul id="lt_tabs">
<li data-tab="lt_tab_01">lt_tab_01</li>
<li data-tab="lt_tab_02">lt_tab_02</li>
</ul>
<div id="lt_tabContent">
<div data-tab="lt_tab_01" class="lt_content">asdfas</div>
<div data-tab="lt_tab_02" class="lt_content">121212</div>
</div>
3. 자바스크립트 - jquery 부분입니다.
문서 상단에 jquery js를 불러와야 정상 작동됩니다.
<script>
/* 1.4~ 버전일경우 on 대신 delegate 사용하면 됨 element.delegate("li", "click", func~ ) */
jQuery.fn.tabs = function(control){
var element = $(this); //ul li
control = $(control); // div content
element.on("click", "li", function(){
var tabName = $(this).attr("data-tab");
element.trigger("change.tabs", tabName);
});
element.bind("change.tabs", function(e, tabName){
element.find("li").removeClass("lt_active");
element.find(">[data-tab='"+ tabName + "']").addClass("lt_active");
});
element.bind("change.tabs", function(e, tabName){
control.find(">[data-tab]").removeClass("lt_active_content");
control.find(">[data-tab='"+ tabName +"']").addClass("lt_active_content");
});
var firstName = element.find("li:first").attr("data-tab");
element.trigger("change.tabs", firstName);
control.find(">[data-tab='"+ firstName +"']").addClass("lt_active_content");
return this;
}
// 최신글 탭 롤링
jQuery.fn.tabs_rolling = function(control, rolling){
var element = $(this); //ul li
control = $(control); // div content
var m_delay = 3000;
var start = 0;
var len = element.find("li").length;
var m_timer;
function rolling_start(num){
if(num) {
start = num;
m_timer = setInterval(tab_rolling, m_delay);
} else {
m_timer = setInterval(tab_rolling, m_delay);
}
}
/*
element.on("mouseover", "li", function(){
var tabName = $(this).attr("data-tab");
element.trigger("change.tabs", tabName);
if(rolling == 'y') {
clearInterval(m_timer);
start += 1;
if(start > len - 1) { start = 0; } //tab 갯수 수정
var re_num = start;
console.log(re_num);
rolling_start(re_num);
}
});
*/
element.on({
mouseenter:function(){
var tabName = $(this).attr("data-tab");
element.trigger("change.tabs", tabName);
if(rolling == 'y') {
clearInterval(m_timer);
}
},
mouseleave:function(){
if(rolling == 'y') {
start = $(this).index() + 1;
if(start > len - 1) { start = 0; } //tab 시작번호 수정
var re_num = start;
rolling_start(re_num);
}
}
}, "li");
element.bind("change.tabs", function(e, tabName){
element.find("li").removeClass("lt_active");
element.find(">[data-tab='"+ tabName + "']").addClass("lt_active");
});
element.bind("change.tabs", function(e, tabName){
control.find(">[data-tab]").removeClass("lt_active_content");
control.find(">[data-tab='"+ tabName +"']").addClass("lt_active_content");
});
var firstName = element.find("li:first").attr("data-tab");
element.trigger("change.tabs", firstName);
control.find(">[data-tab='"+ firstName +"']").addClass("lt_active_content");
//console.log(len);
function tab_rolling() {
element.find("li").each(function(e){
if(start == e) {
var tabName = $(this).attr("data-tab");
$(this).trigger("change.tabs", tabName);
} else {
//alert('ss');
}
});
start += 1;
if(start > len - 1) { start = 0; }
}
if(rolling == 'y') {
rolling_start();
}
return this;
}
$("ul#lt_tabs").tabs("#lt_tabContent");
$("ul#lt_tabs2").tabs_rolling("#lt_tabContent2", "y");
</script>
tabs 함수는 탭 형태로 만들어 주고, tabs_rolling 함수는 탭 자동 롤링 기능입니다.
표기법(네이밍)은 프로그래밍 언어 다양하게 공부하다 보니 짬뽕으로 되어 있네요~;; 요즘은 그냥 소문자-소문자가 편하다는 생각을 하는데 습관적으로 언더바( _ ) 또는 처음, 중간 대문자 사용하고 있습니다.
예전에 작업하고 기록해 둔 코드기 때문에, 혹시 필요하면 조금 더 다듬어서 사용하시길 바랍니다.
감사합니다.
반응형
'개발 > 웹 관련' 카테고리의 다른 글
jquery를 javascript로 바꿔보자 - 클릭 토글 기능 (58) | 2024.03.11 |
---|---|
시놀로지(Synology) 나스 웹스테이션 계정 생성 후 서브도메인 연결 (0) | 2024.03.04 |
VSCODE 내장 터미널로 특정 단어를 포함한 파일 찾기 (6) | 2024.02.25 |
인공지능 챗봇(카카오톡 AskUp)을 이용한 대관 신청 프로그램 개발이야기 (2) | 2024.02.22 |
그누보드6 with 파이썬(python) 설치 후기 (2) | 2024.01.20 |