最近要写一个弹出提示层的组件

最近要写一个弹出提示层的组件,在网上找到了几个不错的参考下:

http://www.jq22.com/yanshi3931
http://www.jq22.com/demo/tip20150819/
http://www.jq22.com/jquery-info3931
http://www.jq22.com/yanshi340
http://www.jq22.com/search?seo=提示

 js示例:

(function($){
    function justTools(elem,options){
        this.elem=elem;
        this.set=options;
    }
    justTools.prototype={
        addAnimation: function() {
            switch (this.set.animation) {
            case 'none':
                break;
            case 'fadeIn':
                this.obj.addClass('animated fadeIn');
                break;
            case 'flipIn':
                switch (this.set.gravity) {
                case 'top':
                    this.obj.addClass('animated flipInTop');
                    break;
                case 'bottom':
                    this.obj.addClass('animated flipInBottom');
                    break;
                case 'left':
                    this.obj.addClass('animated flipInLeft');
                    break;
                case 'right':
                    this.obj.addClass('animated flipInRight');
                    break;
                }
                break;
            case 'moveInLeft':
                this.obj.addClass('animated moveLeft');
                break;
            case 'moveInTop':
                this.obj.addClass('animated moveTop');
                break;
            case 'moveInBottom':
                this.obj.addClass('animated moveBottom');
                break;
            case 'moveInRight':
                this.obj.addClass('animated moveRight');
                break;
            }
        },
        close: function() {
            this.obj.remove();
        },
        setPosition: function() {
            var setPos = {};
            var pos = {
                x: this.elem.offset().left,
                y: this.elem.offset().top
            };
            var wh = {
                w: this.elem.outerWidth(),
                h: this.elem.outerHeight()
            };
            var rightTmp = (pos.x + wh.w / 2) + this.obj.outerWidth() / 2;
            var leftTmp = (pos.x + wh.w / 2) - this.obj.outerWidth() / 2;
            switch (this.set.gravity) {
            case 'top':
                if (rightTmp > $(window).width()) {
                    setPos = {
                        x: pos.x + wh.w - this.obj.outerWidth(),
                        y: pos.y - this.obj.outerHeight() - this.set.distance
                    };
                    this.obj.find(".just-" + this.set.gravity).css("left", this.obj.outerWidth() - wh.w / 2 + "px")
                } else if (leftTmp < 0) {
                    setPos = {
                        x: pos.x,
                        y: pos.y - this.obj.outerHeight() - this.set.distance
                    };
                    this.obj.find(".just-" + this.set.gravity).css("left", wh.w / 2 + "px")
                } else {
                    setPos = {
                        x: pos.x - (this.obj.outerWidth() - wh.w) / 2,
                        y: pos.y - this.obj.outerHeight() - this.set.distance
                    };
                }
                break;
            case 'bottom':
                if (rightTmp > $(window).width()) {
                    setPos = {
                        x: pos.x + wh.w - this.obj.outerWidth(),
                        y: pos.y + wh.h + this.set.distance
                    };
                    this.obj.find(".just-" + this.set.gravity).css("left", this.obj.outerWidth() - wh.w / 2 + "px")
                } else if (leftTmp < 0) {
                    setPos = {
                        x: pos.x,
                        y: pos.y + wh.h + this.set.distance
                    };
                    this.obj.find(".just-" + this.set.gravity).css("left", wh.w / 2 + "px")
                } else {
                    setPos = {
                        x: pos.x - (this.obj.outerWidth() - wh.w) / 2,
                        y: pos.y + wh.h + this.set.distance
                    };
                }
                break;
            case 'left':
                setPos = {
                    x: pos.x - this.obj.outerWidth() - this.set.distance,
                    y: pos.y - (this.obj.outerHeight() - wh.h) / 2
                };
                break;
            case 'right':
                setPos = {
                    x: pos.x + wh.w + this.set.distance,
                    y: pos.y - (this.obj.outerHeight() - wh.h) / 2
                };
                break;
            }
            this.obj.css({
                "left": setPos.x + "px",
                "top": setPos.y + "px"
            });
        },
        setEvent:function(){
            var self=this;
            if(self.set.events=="click"||self.set.events=="onclick"){
                self.obj.on("click",function(e){
                    e.stopPropagation();
                })
                $(document).click(function(){
                    self.obj.remove();
                });
            }
            if(self.set.events=="mouseover"||self.set.events=="onmouseover"||self.set.events=="mouseenter"){
                this.elem.on("mouseout, mouseleave",function(){
                self.close();
            });
            console.log(1)}
        },
        setConfirmEvents:function(){
            var self=this;
            var yes=this.obj.find(".just-yes");
            var no=this.obj.find(".just-no");
            yes.click(function(){
                if(self.set.onYes(self)==true){
                    self.close();
                };
            })
            no.click(function(){
                self.close();
                self.set.onNo(self);
            })
        },
        addConfirm:function(){
            this.obj.append("<div class='just-confirm'><button type='button' class='just-yes'>"+this.set.yes+"</button><button type='button' class='just-no'>"+this.set.no+"</button></div>");
            this.setConfirmEvents();
        },
        setContent:function(){
            this.obj=$("<div id="+this.set.id+" class='just-tooltip "+this.set.theme+"'"+"style='width:"+this.set.width+"'><div class='just-con'>"+this.set.contents+"</div>"+"<span class='just-"+this.set.gravity+"'></span></div>");
            $("body").append(this.obj);
            this.setEvent();
            this.addAnimation();
            if(this.set.confirm==true){
                this.addConfirm();
            }
        },
        init:function(){
            var e=arguments.callee.caller.caller.caller.caller.caller.arguments[0]||$.event.fix(event||window.event)
this.set.events=e.type;var justToolObj=$(".just-tooltip");if(justToolObj){justToolObj.remove();}
e.stopPropagation();this.setContent();this.setPosition();var self=this;$(window).resize(function(){self.setPosition();})}}
$.fn.justToolsTip=function(options){var defaults={height:"auto",width:"auto",contents:'',gravity:'top',theme:'',distance:10,animation:'none',confirm:false,yes:'确定',no:'取消',onYes:function(){},onNo:function(){}}
this.each(function(){options=$.extend(defaults,options);options.id=new Date().getTime();var tooltip=new justTools($(this),options);tooltip.init();});}})(jQuery);

 

posted @ 2018-10-23 08:45  帅到要去报警  阅读(344)  评论(0编辑  收藏  举报