⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 effects.lib.js

📁 asp的bbs程序
💻 JS
字号:
/*
  By Hangring
  #2007.12.27#
  ---
  use list:
  > global.lib.js
  > node.lib.js
  > events.lib.js
  > css.lib.js
  > color.lib.js
  > popup.lib.js
  ---
  特效
*/

$Defined('Effects');
var Effects = {};

// 渐变
Effects.Trans = 
function (container /* :HTMLElement */, list /* :Array */, time_min /* :Number */, time_max /* :Number */) {
    if (! oNode.IsNode(container)) return;
    if (typeof list != 'object' || !list.length) return;

    var _container = document.createElement('div');
    container.appendChild(_container);
    with (_container.style) {
        position = 'relative';
        left = 0;
        top = 0;
        width = '100%';
        height = '100%';
    }

    for (var i = 0; i < list.length; i++) {
        var c = document.createElement('div');
        _container.appendChild(c);
        with (c.style) {
            position = 'absolute';
            left = 0;
            top = 0;
            width = '100%';
            height = '100%';
            textAlign = 'center';
            opacity = 0;
            filter = 'alpha(opacity=0)';
        }
        c.innerHTML = list[i];
        list[i] = c;
    }

    var interval;
    var current = 0;
    var previous = 0;
    time_min = time_min || 100;
    time_max = time_max || 1000;
    function run () {
        if (CSS.GetAlpha(list[previous]) >= 100) {
            CSS.SetAlpha(list[previous], 0);
        }

        var cur = list[current];
        var alpha = CSS.GetAlpha(cur) + 10;
        CSS.SetAlpha(cur, alpha);

        var pause = false;
        if (alpha >= 100) {
            pause = true;
            previous = current;
            current = (current + 1) % list.length;
        }

        interval = setTimeout(run, pause ? time_max : time_min);
    };
    run();
};

// 颜色渐变
Effects.TransColor = 
function (container /* :HTMLElement */, colors /* :Array */, time /* :Number */) {
    if (! oNode.IsNode(container)) return;

    var len = colors.length;
    for (var i = 0; i < len; i++) {
        colors[i] = Color.GetNumFromColor(colors[i]);
    }

    var interval;
    var current = 0;
    var cur_color = colors[0];
    var step = 100;
    //container.style.color = Color.GetColorFromNum(cur_color);
    function run () {
        if (cur_color + step > colors[(current + 1) % len]) {
            current = (current + 1) % len;
            cur_color = colors[current];
        }
        else {
            cur_color += step;
        }
        container.style.color = Color.GetColorFromNum(cur_color);

        interval = setTimeout(run, time);
    };
    run();
}

// 滚动
Effects.Roll = function () {
};

// 切换
Effects.Switch = 
function (
    list /* [['node1_button':String|HTMLElement , 'node2_content':String|HTMLElement]:Array, ['node3_button':String|HTMLElement, 'node4_content':String|HTMLElement]:Array, ...]:Array */,
    butFocusCss /* 聚焦样式:String */,
    butBlurCss /* 失焦样式:String */) {
    ///
    for (var i = 0, len = list.length; i < len; i++) {
        if (!oNode.IsNode(list[i][0])) list[i][0] = $(list[i][0]);
        if (!oNode.IsNode(list[i][1])) list[i][1] = $(list[i][1]);
    }

    var cur = 0;
    function _click (e, th) {
        th = th || this;

        if (cur == th.index) return;
        var cur_but = list[cur][0];
        CSS.RemoveClass(cur_but, butFocusCss);
        CSS.AddClass(cur_but, butBlurCss);
        list[cur][1].style.display = 'none';

        cur_but = list[th.index][0];
        CSS.RemoveClass(cur_but, butBlurCss);
        CSS.AddClass(cur_but, butFocusCss);
        list[th.index][1].style.display = '';

        cur = th.index;
        Events.CancelAll(e);
    }

    for (var i = 0, len = list.length; i < len; i++) {
        var _cur = list[i];
        var cur_but = _cur[0];
        cur_but.index = i;
        Events.AttachEvent(cur_but, 'click', _click);
        _cur[1].style.display = i == 0 ? '' : 'none';
    }
    list[0][1].style.display = '';
};

// 移动
Effects.Move = 
function (
    bar   /* control object:HTMLElement */,
    panel /* object to move:HTMLElement */,
    arg /* 
        {
            topmost:boolean,   // :Boolean, is topmost or not
            modal:boolean,     // :Boolean, display move modal or not
            move:boolean,      // :Boolean, show move cursor or not
            top:number,        // :Number, top limit
            right:number,      // :Number, right width limit
            bottom:number,     // :Number, bottom height limit
            left:number,       // :Number, left limit
            width:number,      // :Number, move width limit
            height:number,     // :Number, move height limit
            downFunc:function, // :Function, down to execute
            moveFunc:function, // :Function, move to execute
            upFunc:function    // :Function, up   to execute
            relateBody:boolean // :Boolean, move in body or not
        } : Object
        */
    ) {//return;
    ///
    var is_down = false;
    var p = [];
    var X = 0, Y = 0;
    var x = 0, y = 0;
    var z_index = 10000;
    var topmost = false, modal = false, move,
        top, right, bottom, left, width, height,
        down_func, move_func, up_func, relateBody;

    if (arg) {
        topmost = arg.topmost;
        modal   = arg.modal;
        move    = arg.move == undefined ? true : arg.move;
        top     = arg.top;
        right   = arg.right;
        bottom  = arg.bottom;
        left    = arg.left;
        width   = arg.width;
        height  = arg.height;
        down_func = typeof arg.downFunc == 'function' ? arg.downFunc : null;
        move_func = typeof arg.moveFunc == 'function' ? arg.moveFunc : null;
        up_func   = typeof arg.upFunc   == 'function' ? arg.upFunc   : null;
        relateBody = typeof arg.relateBody == 'undefined' ? true : arg.relateBody;
    }
    
    bar.ondrag = function () {return false};
    bar.onselectstart = function () {return false};

    var back = null;
    function mouse_down (e) {
        //panel.focus();
        is_down = true;
        p[0] = e.clientX, p[1] = e.clientY;
        x = e.clientX + (relateBody ? Global.GetScrollLeft() : 0);
        y = e.clientY + (relateBody ? Global.GetScrollTop() : 0);
        X = parseInt(panel.style.left);
        Y = parseInt(panel.style.top);
        down_func && down_func(e);

        // add back
        if (!panel.$D) {
            if (!back) back = CSS.AddBack(panel);
            CSS.SetAlpha(back, 0);
            back.Show();
        }

        //CSS.SelectOff();
        Events.CancelAll(e);
    }
    function mouse_move (e) {
        if (is_down) {
            var xy = getXY(e);

            if (modal) {
                var modal_panel = panel.modal_panel;
                if (! modal_panel) {
                    modal_panel = panel.modal_panel = oNode.CreateNode('div');
                    oNode.AddNode(modal_panel, panel.parentNode);
                    with (modal_panel.style) {
                        position = 'absolute';
                        move ? (cursor = 'move') : '';
                        zIndex = panel.style.zIndex;
                        width = panel.offsetWidth + 'px';
                        height = panel.offsetHeight + 'px';
                        border = '1px dotted #000';
                    }
                    //modal_panel.tabIndex = '-1';
                    //modal_panel.focus();
                    //panel.blur();
                }
                if (topmost && ! panel.zIndex) {
                    panel.zIndex = panel.style.zIndex;
                    modal_panel.style.zIndex = z_index;
                }
                modal_panel.style.left = xy[0];
                modal_panel.style.top  = xy[1];
            }
            else {
                if (topmost && ! panel.zIndex) {
                    panel.zIndex = panel.style.zIndex;
                    panel.style.zIndex = z_index;
                }
                panel.style.left = xy[0];
                panel.style.top  = xy[1];
            }
            move_func && move_func(e);
        }
        return false;
    }
    function mouse_up (e) {
        p[2] = e.clientX, p[3] = e.clientY;
        if (is_down) {
            is_down= false;
            if (modal && panel.modal_panel) {
                if (topmost) {
                    panel.zIndex = 0;
                }
                panel.style.left = panel.modal_panel.style.left;
                panel.style.top  = panel.modal_panel.style.top;
                oNode.RemoveNode(panel.modal_panel, panel.parentNode);
                panel.modal_panel = null;
            }
            else {
                if (topmost) {
                    panel.style.zIndex = panel.zIndex;
                    panel.zIndex = 0;
                }
                var xy = getXY(e);
                panel.style.left = xy[0];
                panel.style.top  = xy[1];
            }
            //panel.focus();
            PopUp.ResetXY(panel);
            back && back.Hide();
            up_func && up_func(e, p);
        }
        else {
            //CSS.SelectOn();
        }
    }
    function getXY (e) {
        var x_t = X + e.clientX - x;
        var y_t = Y + e.clientY - y;
        var w_t = panel.offsetWidth - Global.GetClientWidth();
        var h_t = panel.offsetHeight - Global.GetClientHeight();
        var _w_t = panel.offsetWidth - Global.GetClientWidth()/2;
        var _h_t = panel.offsetHeight - Global.GetClientHeight()/2;

        if (_w_t > 0) {
            left = - (panel.offsetWidth - Global.GetClientWidth() / 2);
            right = Global.GetClientWidth() / 2;
        }
        else {
            left = 0;
            right = -w_t;
        }
        if (_h_t > 0) {
            top = - (panel.offsetHeight - Global.GetClientHeight() / 2);
            bottom = Global.GetClientHeight() / 2;
        }
        else {
            top = 0;
            bottom = -h_t;
        }

        if (x_t < left) x_t = left;
        else if (x_t > right) x_t = right;
        if (y_t < top) y_t = top;
        else if (y_t > bottom) y_t = bottom;

        x_t = x_t + (relateBody ? Global.GetScrollLeft() : 0) + 'px';
        y_t = y_t + (relateBody ? Global.GetScrollTop() : 0) + 'px';
        
        return [x_t, y_t];
    }
    Events.AttachEvent(bar, 'mousedown', mouse_down);
    Events.AttachEvent(document, 'mousemove', mouse_move);
    Events.AttachEvent(bar, 'mouseup', mouse_up);

    // 移除事件
    panel.RemoveEvent = function () {
        Events.RemoveEvent(bar, 'mousedown', mouse_down);
        Events.RemoveEvent(document, 'mousemove', mouse_move);
        Events.RemoveEvent(bar, 'mouseup', mouse_up);
    }

    // 设置position
    if (panel.style.position != 'absolute') {
        var _l = Global.GetOffsetLeft(panel);
        var _t = Global.GetOffsetTop(panel);
        panel.style.position = 'absolute';
        panel.style.zIndex = 1;
        panel.style.left = _l + 'px';
        panel.style.top = _t + 'px';
    }
    if (move && bar) bar.style.cursor = 'move';
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -