基于jquery的提示框插件

分享一個(gè)自己整理后的提示框插件囚痴,大家在做網(wǎng)站的時(shí)候,會(huì)用到基于jquery的提示框的需求族展,以前都是遇到一個(gè)做一個(gè)森缠,太沒(méi)有效率,周末自己整合了一下仪缸,分享一下插件贵涵,基本能解決絕大部分需求。

 $.fn.tips= function (options) {

        var toolTips = function (options,element,parentDom) {
            this.startOptions=options;
            this.startDefaults={
                boxClass:null,
                direction:'left',
                content:null,
                delayTime:100,
                event:null,
                template:'<div class="tips">' +
                    '<div class="tips_arrow_left"></div>' +
                    '<div class="tips_arrow_right"></div>' +
                    '<div class="tips_arrow_top"></div>' +
                    '<div class="tips_arrow_bottom"></div>' +
                    '<div class="tips_content"></div>' +
                '</div>'
            };

            this.init("toolTips",element,parentDom);
        };

        toolTips.prototype.init=function(type,element,parentDom){
            var self=this;
            this.parentDom=parentDom;
            this.element=element;
          /*  console.log(parentDom);
            console.log(element);*/
            this.extendSetting();
            this.parentDom.append($(self.options.template));
            this.tips=this.parentDom.find(".tips");
            this.setContent();
            this.changeStyle();


            if(this.options.event!=null){
                if(this.options.event==="click"){
                    this.element.on("click."+type, $.proxy(this.toggle,this));
                }else{
                    var enterIn=this.options.event==="hover"?"mouseenter":"focusin";
                    var enterOut=this.options.event==="hover"?"mouseleave":"focusout";
                    this.element.on(enterIn, $.proxy(self.enter,this));
                    this.element.on(enterOut, $.proxy(self.leave,this));
                }
            }
        };
        toolTips.prototype.extendSetting= function () {
            this.options= $.extend({},this.startDefaults,this.startOptions);
        };
        toolTips.prototype.getPosition= function () {

            var parentWidth=this.parentDom.width();
            var parentHeight=this.parentDom.height();

            var bodyWidth=$(document).width();
            var bodyHeight=$(document).height();

            var parentPositionLeft=this.parentDom.offset().left;
            var parentPositionTop=this.parentDom.offset().top;

            var elementWidth=this.tips.width();
            var elementHeight=this.tips.height();
            console.log(elementHeight);
            var culatePostion= function (direction,parentWidth,parentHeight,elementWidth,elementHeight) {
               /* console.log(parentWidth);

                console.log(elementHeight);*/
                var position={
                    left:0,
                    top:0
                };
                switch (direction){
                    case "left":
                        position.left=-elementWidth;
                        position.top=0;
                        break;
                    case "right":
                        position.left=parentWidth;
                        position.top=0;
                        break;
                    case "top":
                        position.left=parentWidth/2-elementWidth/2;
                        position.top=-elementHeight;
                        console.log(elementHeight);
                        break;
                    case "bottom":
                        position.left=parentWidth/2-elementWidth/2;
                        position.top=parentHeight;
                        break;
                }
                return position;
            };

            if(this.options.direction==="right"&&(parentWidth+parentPositionLeft>bodyWidth)){
                this.options.direction="left";
            }else if(this.options.direction==="left" && (parentPositionLeft<elementWidth)){
                console.log(parentPositionLeft);
                console.log(this.tips.width());
                this.options.direction="right";
            }else  if(this.options.direction==="top" && (parentPositionTop<elementHeight)){
                this.options.direction="bottom";
            }else if(this.options.direction==="bottom" && (parentPositionTop+elementHeight+parentHeight>bodyHeight)){
                this.options.direction="top";
            }
            return culatePostion(this.options.direction,parentWidth,parentHeight,elementWidth,elementHeight);
        };
        toolTips.prototype.changeStyle= function () {
            var self=this;
            var positionObject=this.getPosition();
            this.tips.css({
                position:"absolute",
                left:positionObject.left,
                top:positionObject.top
            });
            var directions=["left","right","top","bottom"];
            var arrowDirection={
                "left":"right",
                "right":"left",
                "bottom":"top",
                "top":"bottom"
            };
            if(directions!==null && self.options.direction!==null){
                for(var i=0;i<directions.length;i++){
                    $(".tips_arrow_"+directions[i]).css({
                        display:"none"
                    });
                }
                $(".tips_arrow_"+arrowDirection[self.options.direction]).css({
                    display:"block"
                })
            }
        };
        toolTips.prototype.enter= function () {

            var self=this;
            clearTimeout(this.timeIn);
            if(this.options.delayTime){
                self.timeIn=setTimeout(function () {
                    self.show();
                },self.delay);
            }
        };
        toolTips.prototype.leave=function(){
            var self=this;
            clearTimeout(this.timeOut);
            if(this.options.delayTime){
                self.timeOut= setTimeout(function () {
                    console.log("comein");
                    self.hide();
                },self.options.delay)
            }
        };
        toolTips.prototype.show= function () {
            this.tips.show();
        };
        toolTips.prototype.hide= function () {
            this.tips.hide();
        };
        toolTips.prototype.toggle= function () {
            this.tips.css("display")==="none"?this.enter():this.leave();
        };
        toolTips.prototype.setContent= function () {
            var self=this;
            var tipsContent=this.options.content?this.options.content:this.element.data("content");
            this.tips.find(".tips_content").html(tipsContent);
        };
        return this.each(function () {
            var self=$(this);
            //console.log(self.data("content"));
            var tip=new toolTips(options,self,self);
        })

    };

用法如下:

$(".articleBox").tips({
    direction:'right',
    content:"1231",//如果指定就用指定的,如果不用就通過(guò)在父元素上設(shè)置data-content來(lái)傳遞數(shù)據(jù)
    delayTime:100,
    event:"hover",
});

需要設(shè)置的有下面幾項(xiàng)內(nèi)容宾茂,<code>direction</code><code>content</code><code>delayTime</code><code>event</code>瓷马,首先是<code>direction</code>確定提示框出現(xiàn)于相對(duì)于父元素的位置。<code>content</code>提示框內(nèi)出現(xiàn)的內(nèi)容跨晴,<code>delayTime</code>確定一下出現(xiàn)的延遲時(shí)間欧聘,<code>event</code>確定是通過(guò)<code>hover事件<code>還是通過(guò)<code>click事件<code>觸發(fā)。<p>
還有一點(diǎn)是對(duì)于提示框的樣式可以自己定制端盆,這里面就有一個(gè)預(yù)備定制的模板怀骤,可以看一下,

template:'<div class="tips">' +
                    '<div class="tips_arrow_left"></div>' +
                    '<div class="tips_arrow_right"></div>' +
                    '<div class="tips_arrow_top"></div>' +
                    '<div class="tips_arrow_right"></div>' +
                    '<div class="tips_content"></div>' +
                '</div>'

預(yù)備的模板里面包括一個(gè)內(nèi)容主體<code><div class="tips_content"></div><code>焕妙,還有四個(gè)箭頭的位置蒋伦,可以自動(dòng)根據(jù)<code>direction</code>來(lái)顯示哪個(gè)方向的小箭頭顯示,比如<code>direction</code>為左焚鹊,小箭頭就會(huì)出現(xiàn)在框體的右邊痕届。
當(dāng)然這些樣式需要使用者自己來(lái)填寫(xiě)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寺旺,一起剝皮案震驚了整個(gè)濱河市爷抓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阻塑,老刑警劉巖蓝撇,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異陈莽,居然都是意外死亡渤昌,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門走搁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)独柑,“玉大人,你說(shuō)我怎么就攤上這事私植〖烧ぃ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵曲稼,是天一觀的道長(zhǎng)索绪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)贫悄,這世上最難降的妖魔是什么瑞驱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮窄坦,結(jié)果婚禮上唤反,老公的妹妹穿的比我還像新娘凳寺。我一直安慰自己,他們只是感情好彤侍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布肠缨。 她就那樣靜靜地躺著,像睡著了一般拥刻。 火紅的嫁衣襯著肌膚如雪怜瞒。 梳的紋絲不亂的頭發(fā)上父泳,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天般哼,我揣著相機(jī)與錄音,去河邊找鬼惠窄。 笑死蒸眠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杆融。 我是一名探鬼主播楞卡,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼脾歇!你這毒婦竟也來(lái)了蒋腮?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤藕各,失蹤者是張志新(化名)和其女友劉穎池摧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體激况,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡作彤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乌逐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竭讳。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖浙踢,靈堂內(nèi)的尸體忽然破棺而出绢慢,到底是詐尸還是另有隱情,我是刑警寧澤洛波,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布胰舆,位于F島的核電站,受9級(jí)特大地震影響奋岁,放射性物質(zhì)發(fā)生泄漏思瘟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一闻伶、第九天 我趴在偏房一處隱蔽的房頂上張望滨攻。 院中可真熱鬧,春花似錦、人聲如沸光绕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)诞帐。三九已至欣尼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間停蕉,已是汗流浹背愕鼓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慧起,地道東北人菇晃。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蚓挤,于是被迫代替她去往敵國(guó)和親磺送。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容