webui-popover:一个好用的jQuery弹出框(popover)插件

像popover(弹出框)这样的插件用处很广,基本所有的社交网站都有。Bootstrap自带的popover.js就实现了这个功能。但是在使用了几天之后就发现Bootstrap的popover做的不够好,使用效果跟当前的主流网站还有点差距。

于是今天就介绍一个更优秀的popover:webui-popover,它兼容bootstrap但并不依赖于bootstrap。

项目地址:https://github.com/sandywalker/webui-popover 

demo示例:http://sandywalker.github.io/webui-popover/demo/# 

9F15145F-85D4-4F4E-95AA-D6B49FCEC64A.png

和Bootstrap的popover相比,它有一个显著的优点:支持异步加载

特点

  • 快,轻量

  • 支持更多的位置

  • 自适应位置

  • 弹出框可以带关闭按钮

  • 同一个页面可以有多个弹出框

  • 不同风格

  • 支持URL和iframe

  • 支持异步模式

  • 多个动画

  • 支持背景高亮

使用

本地加载

<link rel="stylesheet" href="jquery.webui-popover.css">
...
<script src="jquery.js"></script>
<script src="jquery.webui-popover.js"></script>

或者CDN

<link rel="stylesheet" href="https://cdn.jsdelivr.net/jquery.webui-popover/1.2.1/jquery.webui-popover.min.css">
...
<script src="https://cdn.jsdelivr.net/jquery/1.11.3/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.webui-popover/1.2.1/jquery.webui-popover.min.js"></script>

如下使用此插件

$('a').webuiPopover(options);

一些例子

最简单的Popover。

$('a').webuiPopover({title:'Title',content:'Content'});

通过dom元素的data-* 属性创建Popover。

<a href="#" data-title="Title" data-content="Contents..." data-placement="right">show pop</a>
$('a').webuiPopover();

Popover的内容可以通过为它的下一个元素设置 'webui-popover-content' class来指定。

<a href="#" >shop pop</a>
<div class="webui-popover-content">
    <p>popover content</p>
</div>
$('a').webuiPopover();

或者使用jQuery选择器(推荐id选择器)来设置Popover的内容。

<a href="#" >shop pop</a>
<div id="myContent">
    <p>popover content</p>
</div>
$('a').webuiPopover({url:'#myContent'});

指定Popover弹出的位置。

$('a').webuiPopover({title:'Title',content:'Content',placement:'bottom'});

由mouse hover触发的Popover。

$('a').webuiPopover({content:'Content',trigger:'hover'});

创建一个Sticky Popover(Popover创建之后总是显示)

$('a').webuiPopover({content:'Content',trigger:'sticky'});

动态的创建Popover (by new option:'selector').

<a href="#" id="addPop" class="btn btn-default"> add Pop </a>
<div class="pops">
</div>
 $('#addPop').on('click',function(e){
            $('<a href="#" class="show-pop data-placement="auto-bottom"  data-title="Dynamic Title" data-content="Dynamic content"> Dynamic created Pop </a>').appendTo('.pops');
        });

样式反相的Popover。

$('a').webuiPopover({content:'Content',style:'inverse'});

宽高固定的Popover

$('a').webuiPopover({content:'Content',width:300,height:200});

带关闭按钮的Popover

$('a').webuiPopover({title:'Title',content:'Content',closeable:true});

Popover动画

$('a').webuiPopover({title:'Title',content:'Content',animation:'pop'});

iframe类型的Popover

$('a').webuiPopover({type:'iframe',url:'http://getbootstrap.com'});

异步模式

$('a').webuiPopover({
                        type:'async',
                        url:'https://api.github.com/',
                        content:function(data){
                            var html = '<ul>';
                            for(var key in data){html+='<li>'+data\[key\]+'</li>';}
                            html+='</ul>';
                            return html;
                        }
                    });

直接指定URL的异步模式

$('a').webuiPopover({
    type:'async',
    url:'http://some.website/htmldata'});

手动触发Popover

 //Initailize
 $('a').webuiPopover({trigger:'manual'});
...
 //Show it
 $('a').webuiPopover('show');
 //Hide it
 $('a').webuiPopover('hide');

销毁Popover

$('a').webuiPopover('destroy');

默认选项

{
    placement:'auto',//values: auto,top,right,bottom,left,top-right,top-left,bottom-right,bottom-left,auto-top,auto-right,auto-bottom,auto-left,horizontal,vertical
    container: document.body,// The container in which the popover will be added (i.e. The parent scrolling area). May be a jquery object, a selector string or a HTML element. See https://jsfiddle.net/1x21rj9e/1/
    width:'auto',//can be set with  number
    height:'auto',//can be set with  number
    trigger:'click',//values:  click,hover,manual(handle events by your self),sticky(always show after popover is created);
    selector:false,// jQuery selector, if a selector is provided, popover objects will be delegated to the specified. 
    style:'',//values:'',inverse
    animation:null, //pop with animation,values: pop,fade (only take effect in the browser which support css3 transition)
    delay: {//show and hide delay time of the popover, works only when trigger is 'hover',the value can be number or object
        show: null,
        hide: 300
    },
    async: {
        type:'GET', // ajax request method type, default is GET
        before: function(that, xhr) {},//executed before ajax request
        success: function(that, data) {}//executed after successful ajax request
        error: function(that, xhr, data) {} //executed after error ajax request
    },
    cache:true,//if cache is set to false,popover will destroy and recreate
    multi:false,//allow other popovers in page at same time
    arrow:true,//show arrow or not
    title:'',//the popover title, if title is set to empty string,title bar will auto hide
    content:'',//content of the popover,content can be function
    closeable:false,//display close button or not
  direction:'', // direction of the popover content default is ltr ,values:'rtl';
    padding:true,//content padding
    type:'html',//content type, values:'html','iframe','async'
    url:'',//if type equals 'html', value should be jQuery selecor.  if type equels 'async' the plugin will load content by url.
    backdrop:false,//if backdrop is set to true, popover will use backdrop on open
    dismissible:true, // if popover can be dismissed by  outside click or escape key
    autoHide:false, // automatic hide the popover by a specified timeout, the value must be false,or a number(1000 = 1s).
    offsetTop:0,  // offset the top of the popover
    offsetLeft:0,  // offset the left of the popover
    onShow: function($element) {}, // callback after show
    onHide: function($element) {}, // callback after hide
}

全局方法

某些情况下你可能需要一些全局的方法来操纵plugin,比如'show/hide' popover。WebuiPopovers对象就是为此而引入的。

下面是一个调用示例:

//Show Popover by click other element.
$('a').on('click',function(e){
    e.stopPropagation(); // Stop event propagation is needed, otherwise may trigger the document body click event handled by plugin.
    WebuiPopovers.show('#el');
});
// Show Popover with options
WebuiPopovers.show('#el',{title:' hello popover',width:300});
//Hide Popover by jQuery selector
WebuiPopovers.hide('#el');
//Hide All Popovers
WebuiPopovers.hideAll();
//Update the Popover content 
WebuiPopovers.updateContent('.btn-showpop','some html or text');

Full Methods

    WebuiPopovers.show(selector,options); // Show popover by jQuery selector,the  options parameter is optional
    WebuiPopovers.hide(selector); // Hide  popover by jQuery selector
    WebuiPopovers.hideAll(); // Hide all popovers
    WebuiPopovers.create(selector,options);// Create and init the popover by jQuery selector.
    WebuiPopovers.isCreated(selector); // Check if the popover is already create and bind to the selector.
    WebuiPopovers.updateContent(selector,newContent) //Update the Popover content after the popover is created.