[픽콤자작SCRIPT]자동스크롤퀵메뉴 : StaticMenu

사용처 : 장태산자연휴양림
<!--
// 원본 소스 : steelheart
// 사이트 : http://steelheart.pe.kr/
/* 기존의 소스에서 객체화 재 작성 함
 * 기존의 소스는 1개만 생성 가능한것을 여러개 가능하도록함
 * var quick1 = new StaticMenu("quick1", document.all["Layer1"], document.all["ANIMATE"], 910, 281, null, null, 50, 10);
 * quick1.InitializeStaticMenu();
 * var [인스턴스명] = new StaticMenu("[인스턴스명]", [대상레이어 Object], [고정유무 checkbox Object], ... 이하 필요에 따라);
 *
 *
 * InstanceName         : 선언된 instance의 이름 : timer 지정시 대상 object 선별에 사용
 * STATICMENU           : 보여지는 Layer : 실제 이 Layer를 컨트롤
 * ANIMATE              : 스크롤 작동 유무의 checkbox : 미사용시 hidden 으로 만들어져 있어야 함
 * stmnLEFT             : Layer 의 left 시작위치
 * stmnGAP1             : Layer 의 top 시작위치
 * stmnGAP2             : 스크롤 되어 보여질 때 웹브라우저의 top과의 여백 : 0은 top 0px의 위치
 * stmnBASE             : Layer가 처음 보여지기 시작하는 top 위치
 * stmnActivateSpeed    : 스크롤 직후 Layer가 엑션에 들어가는 delay time
 * stmnScrollSpeed      : Layer가 스크롤 되는 속도
 *
 */

function StaticMenu(TimerName, STATICMENU, ANIMATE, stmnLEFT, stmnGAP1, stmnGAP2, stmnBASE, stmnActivateSpeed, stmnScrollSpeed){
    this.TimerName = TimerName;
    this.STATICMENU = STATICMENU;
    this.ANIMATE = ANIMATE;
    if(stmnLEFT == null) // 스크롤메뉴의 좌측 위치
        this.stmnLEFT = 10;
    else
        this.stmnLEFT = stmnLEFT;
    if(stmnGAP1 == null) // 페이지 헤더부분의 여백
        this.stmnGAP1 = 1000;
    else
        this.stmnGAP1 = stmnGAP1; // 페이지 헤더부분의 여백
    if(stmnGAP2 == null) // 스크롤시 브라우저 상단과 약간 띄움. 필요없으면 0으로 세팅
        this.stmnGAP2 = 0;
    else
        this.stmnGAP2 = stmnGAP2;
    if(stmnBASE == null) // 스크롤메뉴 초기 시작위치 (아무렇게나 해도 상관은 없지만 stmnGAP1과 약간 차이를 주는게 보기 좋음)
        this.stmnBASE = 10;
    else
        this.stmnBASE = stmnBASE;
    if(stmnActivateSpeed == null) // 움직임을 감지하는 속도 (숫자가 클수록 늦게 알아차림)
        this.stmnActivateSpeed = 50;
    else
        this.stmnActivateSpeed = stmnActivateSpeed;
    if(stmnScrollSpeed == null) // 스크롤되는 속도 (클수록 늦게 움직임)
        this.stmnScrollSpeed = 10;
    else
        this.stmnScrollSpeed = stmnScrollSpeed;
    this.stmnTimer = null;

    this.ToggleAnimate = function (){
        if(!this.ANIMATE.checked){
            this.RefreshStaticMenu();
            this.SaveCookie("ANIMATE", "true", 300);
        }else{
            clearTimeout(this.stmnTimer);
            this.STATICMENU.style.top = this.stmnGAP1;
            this.SaveCookie("ANIMATE", "false", 300);
        }
    }
   
    this.InitializeStaticMenu = function (){
        this.STATICMENU.style.left = this.stmnLEFT;
        if(this.ReadCookie("ANIMATE") == "false"){
            this.ANIMATE.checked = true;
            this.STATICMENU.style.top = document.body.scrollTop + this.stmnGAP1;
        }else{
            this.ANIMATE.checked = false;
            this.STATICMENU.style.top = document.body.scrollTop + this.stmnBASE;
            this.RefreshStaticMenu();
        }
    }
    this.RefreshStaticMenu = function (){
        var stmnStartPoint, stmnEndPoint, stmnRefreshTimer;

        stmnStartPoint = parseInt(this.STATICMENU.style.top, 10);
        stmnEndPoint = document.body.scrollTop + this.stmnGAP2;
        if(stmnEndPoint < this.stmnGAP1) stmnEndPoint = this.stmnGAP1;

        stmnRefreshTimer = this.stmnActivateSpeed;

        if( stmnStartPoint != stmnEndPoint ){
            stmnScrollAmount = Math.ceil( Math.abs( stmnEndPoint - stmnStartPoint ) / 15 );
            this.STATICMENU.style.top = parseInt(this.STATICMENU.style.top, 10) + ( ( stmnEndPoint < stmnStartPoint ) ? -stmnScrollAmount : stmnScrollAmount );
            stmnRefreshTimer = this.stmnScrollSpeed;
        }
        this.stmnTimer = setTimeout (this.TimerName+".RefreshStaticMenu();", stmnRefreshTimer);
    }
    this.ReadCookie = function (name){
        var label = name + "=", labelLen = label.length, cLen = document.cookie.length;
        for(i=0;i < cLen;i++){
            var j = i + labelLen;
            if(document.cookie.substring(i, j) == label){
                var cEnd = document.cookie.indexOf(";", j);
                if(cEnd == -1) cEnd = document.cookie.length;
                    return unescape(document.cookie.substring(j, cEnd));
            }
        }
        return "";
    }
    this.SaveCookie = function (name, value, expire){
        var eDate = new Date();
        eDate.setDate(eDate.getDate() + expire);
        document.cookie = name + "=" + value + "; expires=" +  eDate.toGMTString()+ "; path=/";
    }
}
//-->

Press ESC to close