• [原]jQuery Tab插件,用于在Tab中显示iframe,附源码和详细说明


    最近有个需求,需要在Tab中放置iFrame,于是做了一个jQuery的Tab插件。

    欢迎提bug或是建议,在有空的情况下我尽量完善。

    作者: think8848(公司主页: http://www.cleversoft.com, QQ: 166156888, Blog: http://think8848.cnblogs.com)  转载请保留此信息


    CleverTabs是一款jQuery插件,所需jQuery版本:1.6.1,jQuery UI样式版本:1.8.13;其功能为创建jQuery UI风格的Tab用于显示iframe。

    本示例中符加了jQuery.contextMenu插件,我修改了其样式,使用了jQuery UI的皮肤,源版下载地址

    效果如下图:

    初级应用示例:

    HTML代码:

    <div id="tabs"><ul></ul></div>
    

    Javascript代码:

                <script type="text/javascript">
                    $(function () {
                        tabs = $('#tabs').cleverTabs();
                        tabs.add({
                            url: 'http://think8848.cnblogs.com',
                            label: 'think8848'
                        });
                    });
                </script>
    
    CleverTabs详细说明:
    CleverTabs为所有Tab的容器            
                var tabs;
                <script type="text/javascript">
                    $(function () {
                        tabs = $('#tabs').cleverTabs({
                            //是否安装右键菜单(默认: true)
                            setupContextMenu: true,
                            //右键菜单定义, 右键菜单功能由jquery.contextMenu插件提供
                            //详见: http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/
                            //本插件中对原contextMenu插件中的样式做了修改,使用了jQuery UI皮肤
                            contextMenu: {
                                element: $('#contextMenuElementId'),
                                handler: function (action, el, pos) { /*do something...*/ }
                            },
                            //开启Tab后是否锁定(不允许关闭,默认: false)
                            lock: false,
                            //开启Tab后是否禁用(不允许激活和操作iframe内容,默认: false)
                            disable: false,
                            //当tabs中只有一个Tab时,是否锁定该Tab(默认: true)
                            lockOnlyOne: true,
                            //显示iframe的容器(默认创建在tabs元素中)
                            panelContainer: $('#panelContainerElementId')/*,
                            其中
                            tabHeaderTemplate: '', //(Tab用于控制的头模板)
                            tabPanelTemplate: '', //(Tab用于显示的Panel模板)
                            uidGenerator: function() {} //(Tab唯一id生成器) 
                            功能现在不启用,等有时间完善后再启用*/
                        });
    
                        tabs.add({
                            url: 'http://think8848.cnblogs.com',
                            label: 'think8848'
                        });
                    });
                </script>
    
    CleverTabs.add方法:添加一个新的Tab并使之成为激活状态,如果将要添加的url已经存在,则会激活该Tab            
                <script type="text/javascript">
                    var tabs = ('#tabs').cleverTabs();
                    tabs.add({
                        //必须是在tabs内唯一的id
                        id: 'uniqueId',
                        //将要在iframe的src属性设置的值
                        url: 'iframe.src',
                        //显示在Tab头上的文字
                        label: 'tab header',
                        //关闭本Tab时需要刷新的Tab的url(默认: null)
                        closeREfresh: 'tab url',
                        //关闭本Tab时需要激活的Tab的url(默认: null)
                        closeActivate: 'tab url',
                        //关闭本Tab时需要执行的回调函数
                        callback: function () { /*do something*/ }
                    });
                </script>
    
    CleverTabs.getCurrentTab方法:
    获取当前处于激活状态的Tab            
                <script type="text/javascript">
                    var tabs = ('#tabs').cleverTabs();
                    var tab = tabs.getCurrentTab();
                </script>
    
    CleverTabs.getTabByUrl方法:
    获取指定url的Tab实例            

                <script type="text/javascript">
                    var tabs = ('#tabs').cleverTabs();
                    var tab = tabs.getTabByUrl('http://think8848.cnblogs.com');
                </script>
    

    CleverTabs.clear方法:
    关闭tabs内所有未锁定的Tab            

                <script type="text/javascript">
                    var tabs = ('#tabs').cleverTabs();
                    var tab = tabs.clear();
                </script>
    
    CleverTab.deactivate方法:
    使Tab页面处于未激活状态,但不建议在代码中使用
    CleverTab.prevTab方法:
    获取该Tab之前的Tab            
                <script type="text/javascript">
                    var tabs = ('#tabs').cleverTabs();
                    var tab = tabs.getTabByUrl('http://think8848.cnblogs.com');
                    var prevTab = tab.prevTab();
                </script>
    

    CleverTab.nextTab方法:
    获取该Tab之后的Tab

                <script type="text/javascript">
                    var tabs = ('#tabs').cleverTabs();
                    var tab = tabs.getTabByUrl('http://think8848.cnblogs.com');
                    var prevTab = tab.nextTab();
                </script>
    
    CleverTab.kill方法:
    从tabs中移移该Tab            
                <script type="text/javascript">
                    var tabs = ('#tabs').cleverTabs();
                    var tab = tabs.getTabByUrl('http://think8848.cnblogs.com');
                    tab.kill();
                </script>
    
    CleverTab.refresh方法:
    刷新该Tab的iframe中的内容            
                <script type="text/javascript">
                    var tabs = ('#tabs').cleverTabs();
                    var tab = tabs.getTabByUrl('http://think8848.cnblogs.com');
                    tab.refresh();
                </script>
    
    CleverTab.setDisable方法:
    设置该Tab的disabled属性,设置disabled为true后,自动设置该Tab的locked属性为true            
                <script type="text/javascript">
                    var tabs = ('#tabs').cleverTabs();
                    var tab = tabs.getTabByUrl('http://think8848.cnblogs.com');
                    //参数true为禁用,false或不提供值为启用
                    tab.setDisable(true);
                </script>
    

    CleverTab.setLock方法:
    设置该Tab的locked属性,设置locked为true后,该Tab的不允许关闭            

                <script type="text/javascript">
                    var tabs = ('#tabs').cleverTabs();
                    var tab = tabs.getTabByUrl('http://think8848.cnblogs.com');
                    //参数true为锁定,false或不提供值为解锁
                    tab.setLock(true);
                </script>

    源代下载

    ------------------------------2011.06.27 更新---------------------------------

    "改变不了别人,就改变自已吧"

    在现在的页面中,多数情况下都可能由几部分组成,比如:Banner,Navigator,Content等,而为了工作区域变的更大,很多时候诸如Banner,Navigator或者其他的Panel都会收起来(Collapse),这个时候问题来了,当初我给tabs定义了 80%; height: 90%; 现在tabs的width和height发生了变化,可是内部的Tab页面还没有收到这个变化,它还是按照之前的size显示呢,更要命的是resize事件居然只有window和body才有,div居然不支持此事件!真不知道他们是怎么想的...在之前的cleverTabs中,我绑定了window.resize事件,但是问题在于我上面举的例子中,window的size实际上没有发生变化,甚至body也没有,但是tabs的大小发生变化了,在这种情况下,如果您使用了默认的tabPenelContainer,那一定得处理tabs的resize事件,可是tabs就是一个div嘛,哪来的resize?昨晚在睡前突然想到个办法,既然能"改变不了别人,就改变自已",那么就能"自已处理不了的事,就交给别人去处理吧"。把resize“外包”出去算了。于是对原来的代码做了修改,在CleverTabs构造函数中,为CleverTabs的prototype添加了resizePanelContainer函数,tabs自已不知道发生了resize事件,但总归有人知道发生了,谁知道谁调用,所谓的能者多劳?

    CleverTabs.resizePanelContainer方法:

    当使用CleverTabs默认的PanelContainer时,重新设置PanelContainer的size。

     <script type="text/javascript">
            var tabs;
            $(function () {
    
                tabs = $('#tabs').cleverTabs();
                $(window).bind('resize', function () {
                    //当发生window.resize事件时,重新默认的tabs的PanelContainer的大小
                    tabs.resizePanelContainer();
                });
    
        </script>
    

    源码下载

  • 相关阅读:
    Linux sed命令实例详解
    hadoop2.0 和1.0的区别
    linux如何修改主机名
    hadoop主节点(NameNode)备份策略以及恢复方法
    Hadoop 添加删除数据节点(datanode)
    Hadoop常见错误及处理方法
    【转】ImageView.ScaleType属性
    MonoBehaviour.print和Debug.Log是同样的作用
    unity自带寻路Navmesh入门教程
    前向渲染路径细节 Forward Rendering Path Details
  • 原文地址:https://www.cnblogs.com/think8848/p/2090254.html
Copyright © 2020-2023  润新知