tooltip提示控件

这些天忙于公司项目的改版就很少来这里发表文章了,今天趁着周末休息给大家分享一个jQuery提示控件。可用于显示加载提示、错误提示、操作提示等。

先上张预览图:

提示条样式可以自己定义,支持关闭回调和锁屏,自适应居中,采用fixed定位(暂未考虑兼容IE6)。

 

下面是源码:(注:引入该JS时放在body内,不然没效果,原因不明。)

/**
 * tooltip提示
 * @author Newton---承諾ン祗愛
 * @date 2012年04月19日晚
 * @update 2012年04月23日重构,保证一个实例的关闭函数只能触发自身的关闭事件,加入动画缓动支持。
 * @param object{}
 * @type string tip: '', 提示内容,支持传入html。
 * @type number time: 3, 自动关闭时间,以秒计时。
 * @type boolean lock: false, 锁屏。
 * @type string easing: 'linear' 动画缓动效果,需要缓动插件支持。
 * @type string maskColor: '#000', 锁屏颜色。
 * @type number maskOpacity: .3, 锁屏透明度。
 * @type number fxSpeed: 300, 动画速度,不建议设置过大,以毫秒计时。
 * @type number index: 999999,  z-index值。
 * @type function afterClose: $.noop 关闭后回调。
 */
(function ($){
    //首次初始化
    var fistInit = true;

    //提示条外层包裹
    var tooltipWrap = $([
        '<div style="position: fixed; top:-100%; left: 50%; margin: 0; padding: 0; pointer-events: none; background: transparent;">',
        '   <div style="position: relative; top:0; right: 50%; margin: 0; padding: 0; pointer-events: visiblePainted;"></div>',
        '</div>'
    ].join('')).appendTo(document.body);

    //锁屏
    var lockMask = $('<div style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; display: none;"></div>').appendTo(document.body);

    //内容包裹
    var tootipInner = tooltipWrap.children();

    //计时器id
    var timer = null;

    //实例堆栈
    var instanceStack = null;

    //默认参数
    var defaults = {
        tip: '',
        time: 3,
        fxSpeed: 300,
        index: 999999,
        lock: false,
        easing: 'linear',
        maskOpacity: .2,
        maskBackground: '#000',
        afterClose: $.noop
    };

    //接口
    var tooltip = function (config){
        //模仿静态方法,不需要用new初始化
        if (!(this instanceof tooltip)) {
            return new tooltip(config);
        }
        this.config = $.extend({}, defaults, config);
        this.config.time = this.config.time * 1000;
        this._initialize();
        return this;
    };

    //原型方法
    tooltip.prototype = {
        //初始化函数
        _initialize: function (){
            clearTimeout(timer);
            if (instanceStack !== null && instanceStack !== this) instanceStack.config.afterClose();
            instanceStack = this;
            tooltipWrap.css('z-index', this.config.index);
            lockMask.css({
                zIndex: this.config.index - 1,
                opacity: this.config.maskOpacity,
                background: this.config.maskBackground
            });
            this._toggleMask();
            tootipInner.html(this.config.tip);
            //平滑首次动画效果
            if (fistInit) {
                tooltipWrap.css('top', -tooltipWrap.height());
                fistInit = false;
            }
            this._slideDown();
        },
        //锁屏
        _locked: function (){
            lockMask.fadeIn(this.config.fxSpeed);
        },
        //关闭锁屏
        _unlocked: function (){
            lockMask.fadeOut(this.config.fxSpeed);
        },
        //显示隐藏锁屏
        _toggleMask: function (){
            if (this.config.lock) {
                this._locked();
            } else {
                this._unlocked();
            }
        },
        //提示条滑下
        _slideDown: function (){
            var t = this;
            tooltipWrap.stop(true, false).animate({
                top: 0
            }, this.config.fxSpeed, this.config.easing, function (){
                t._autoClose();
            });
        },
        //提示条收起
        _slideUp: function (){
            //保证只有当前实例才能执行关闭操作
            if (instanceStack !== this) return;
            var t = this;
            this._unlocked();
            tooltipWrap.animate({
                top: -tooltipWrap.height()
            }, this.config.fxSpeed, this.config.easing, function (){
                instanceStack = null;
                t.config.afterClose();
            });
        },
        //自动关闭
        _autoClose: function (){
            var t = this;
            timer = setTimeout(function (){
                t._slideUp();
            }, this.config.time);
        },
        //关闭接口
        close: function (){
            this._slideUp();
        }
    };

    //公开接口
    window.tooltip = tooltip;
})(jQuery);

调用方法(依赖jQuery,每个参数的意义注释里都有,不多解释了):

tooltip({
    tip: '消息',
    lock: true,
    time: 6,
    afterClose: function(){
        alert('我关闭了!');
    }
});
posted @ 2012-09-13 16:06  piuba  阅读(238)  评论(0编辑  收藏  举报