zhuguifei
2026-03-10 2c1fd10c6fbabb8e9f0e9f07fe66fb36c008e883
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
 *Author:sohighthesky
 *From:http://blog.csdn.net/sohighthesky  
 *Date:2009-11-9
 */
/*
 *box 指定要显示消息框或者其id
 *options:参见代码中setOptions中的注释
 */
var sheyMsg=function(box,options) {
    this.box=this.g(box);
    this.setOptions(options);
    this.init();
}
sheyMsg.prototype={
    ae:function(e,call) {
        if(window.addEventListener)window.addEventListener(e,call,false);
        else window.attachEvent("on"+e,call);
    },
    g:function(id) {return typeof(id)=="string"?document.getElementById(id):id; },
    isFixed:!window.ActiveXObject || (navigator.userAgent.indexOf("MSIE 6")==-1 &&  document.compatMode=="CSS1Compat"),
    setOptions:function(options) {
        this.options={//默认配置
                showDelay:10,//显示延时
                autoHide:30,//自动隐藏时间,设置为0时,不自动隐藏
                onShow:function(){},//显示后调用
                onHide:function(){}//隐藏后调用
        };
        for(var o in options) {
            this.options[o]=options[o];
        }
    },
    hide:function() {//隐藏
        var _top=this.box.clientHeight;
        var o=this;
        if(/ing$/.test(o.status))return;
        o.status="hiding";
        clearTimeout(o.tt);
        o.t=setInterval(function() {
            if(o.isFixed)
                o.box.style.bottom=(-o.box.clientHeight+(--_top))+'px';
            else
                o.box.style.top=o.de.scrollTop+o.de.clientHeight-5-(--_top) +"px";
            if(_top==-5) {
                clearInterval(o.t);
                o.status="hide";
                o.box.style.display="none";
                o.options.onHide();
            }
        },5);
    },
    show:function() {//显示
        var _top=0;
        var o=this;
        if(/ing$/.test(o.status))return;
        o.status="showing";
        clearTimeout(o.tt);
        o.box.style.display="block";
        o.t=setInterval(function() {
            if(o.isFixed)
                o.box.style.bottom=(-o.box.clientHeight+(++_top))+"px";
            else
                o.box.style.top=(o.de.scrollTop+o.de.clientHeight-5-(++_top)) +"px";
            if(_top==o.box.clientHeight) {
                clearInterval(o.t);
                o.status="show";
                o.options.onShow();
                var h=o.options.autoHide-0;
                if(h) o.tt=setTimeout(function() {o.hide();},h*1000);
            }
        },1);
    },
    fixIE6:function() {//IE6 滚动定位
        this.box.style.left=this.de.scrollLeft+this.de.clientWidth-this.box.clientWidth-2+"px";
        if(this.status=="show") {            
            this.box.style.top=this.de.scrollTop+this.de.clientHeight-this.box.clientHeight-5+"px";
        } else if(this.status=="hide") {
            this.box.style.top=this.de.scrollTop+this.de.clientHeight+5+"px";
        }
    },
    init:function() {
        with(this.box.style) {
            display="block";//显示之后才能取出宽度和高度
            if(this.isFixed) {
                position="fixed";
                right="2px";
                bottom=(-this.box.clientHeight-5)+"px";
            } else {
                position="absolute";
            }
        }
        this.status="hide";
        var o=this;
        if(!this.isFixed) {
            o.de=document.compatMode=="CSS1Compat"?document.documentElement:document.body;
            var timer;
            this.ae("resize",function() { clearTimeout(timer);timer=setTimeout(function(){o.fixIE6.call(o)},30);});
            this.ae("scroll",function() { clearTimeout(timer);timer=setTimeout(function(){o.fixIE6.call(o)},30);});
            this.fixIE6();//加载时指定位置
        }
        o.box.style.display="none";
        o.tt=setTimeout(function() {o.show();},o.options.showDelay*1000);
    }
}