Skip to content

CHICPRO

  • Life Log
  • Cycling Log
  • Photo Log
    • Portrait
    • Landscape
    • Flower
    • Etc
  • Coding Log
  • Information

[jQuery] 탭전환시 딜레이 적용하기

2013-10-07 by 편리

jQuery 플러그인 형식으로 만들어본 첫 작품이라고 해야할까? ㅎㅎ 탭전환시에 딜레이를 적용하는 것이다. 잠깐 머리를 식힌다는 생각으로 만들기 시작했는데 하다보니 덩치가 커져서 마우스오버 뿐만 아니라 키보드로 이동시에도 사용할 수 있도록 했다. 대신 키보드로 이동시는 딜레이가 적용되지 않는다. 또 딜레이가 적용되기 때문에 어떤 탭을 보다가 빠르게 마우스를 이동하게 되면 탭과 컨텐츠 내용이 일치하는 않는 경우가 있는데 보이는 컨텐츠에 해당하는 탭으로 전환되도록 했다. 아래는 코드이다.

(function($) {
    $.fn.hoverTab = function(timeout, selector, hoverclass, content, contentclass) {
        var cfg = {
            timeout: 150,
            selector: "h3",
            hoverclass: "sir_lt_hon",
            content: "div",
            contentclass: "sir_lt_on"
        };

        if(typeof timeout == "number") {
            cfg = $.extend(cfg, { timeout: timeout });
        } else if(typeof timeout == "object") {
            cfg = $.extend(cfg, timeout);
        }

        if(typeof selector == "object") {
            cfg = $.extend(cfg, selector);
        }

        var $el = this.find(cfg.selector);
        var $content = this.find(cfg.content);
        var idx, delay;

        $el.on("mouseover", function() {
            idx = $el.index($(this));
            $(this).data("over", true);
            $el.removeClass(cfg.hoverclass);
            $(this).addClass(cfg.hoverclass);
            delay = setTimeout( function() { showcontent(idx) }, cfg.timeout );
        });

        $el.on("focusin", function() {
            idx = $el.index($(this));
            $(this).data("over", true);
            $el.removeClass(cfg.hoverclass);
            $(this).addClass(cfg.hoverclass);
            delay = setTimeout( function() { showcontent(idx) }, 0 );
        });

        $el.on("mouseout focusout", function() {
            $(this).data("over", false);
            $el.removeClass(cfg.hoverClass);
            $content.each(function(index) {
                if($(this).hasClass(cfg.contentclass)) {
                    $el.eq(index).addClass(cfg.hoverclass);
                    return false;
                }
            });
            clearTimeout(delay);
        });

        var showcontent = function(idx)
        {
            if($el.eq(idx).data("over") == true) {
                $content.removeClass(cfg.contentclass);
                $content.eq(idx).addClass(cfg.contentclass);
            }
        }

        return;
    };
}(jQuery));

위 코드에서 cfg에 포함된 각각의 설정값의 역할은 다음과 같다.

timeout: 150, // 딜레이 1/1000초 단위로 입력
selector: "h3", // 탭 엘리먼트 셀렉터
hoverclass: "sir_lt_hon", // mouseover 시 selector에 추가될 class
content: "div", // 컨텐츠 엘리먼트 셀렉터
contentclass: "sir_lt_on" // 보여질 컨텐츠 엘리먼트에 추가될 class

기본사용법은 아래와 같다.

$("#sir_sol_g4").hoverTab();
$("#sir_sol_g4").hoverTab(200);
$("#sir_sol_g4").hoverTab( { timeout: 200, selector: "h3",  hoverclass: "sir_lt_hon", content: "div", contentclass: "sir_lt_on" } );
$("#sir_sol_g4").hoverTab(200, { selector: "h3",  hoverclass: "sir_lt_hon", content: "div", contentclass: "sir_lt_on" } );

처음 만들어보는 것이라 시간이 제법 걸렸는데 jQuery 플러그인 방식에 익숙해지면 여러 가지를 만들어 볼 수 있을 것 같다.

Post navigation

Previous Post:

이번 주는 컨디션이 엉망이다

Next Post:

Apache 2.4.6 + PHP-FPM 설치

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • php 배열 연산에서 + 와 array_merge 의 차이
  • pcntl_fork 를 이용한 다중 프로세스 실행
  • 아이폰 단축어를 이용하여 주중 공휴일엔 알람 울리지 않게 하기
  • 구글 캘린더 전체일정 재동기화
  • OpenLiteSpeed 웹서버에 HTTP 인증 적용
  • OpenLiteSpeed 웹어드민 도메인 연결
  • WireGuard를 이용한 VPN 환경 구축
  • Ubuntu 22.04 서버에 OpenLiteSpeed 웹서버 세팅
  • 맥 vim 세팅
  • 우분투 시스템 터미널쉘 zsh 로 변경

Recent Comments

  • 편리 on 업무관리용 그누보드 게시판 스킨
  • 임종섭 on 업무관리용 그누보드 게시판 스킨
  • 캐논 5D 펌웨어 | Dslr 펌웨어 업그레이드 방법 82 개의 베스트 답변 on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • Top 5 캐논 5D 펌웨어 Top 89 Best Answers on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • 편리 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 임팀장 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 편리 on Notepad++ NppFTP 플러그인 수동 설치
  • paul-j on Notepad++ NppFTP 플러그인 수동 설치
  • YS on Windows 10 iCloud 사진 저장 폴더 변경
  • 편리 on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2025 CHICPRO | Built using WordPress and SuperbThemes