zoukankan      html  css  js  c++  java
  • jquery另外一种类似tab切换效果

         简要:最近做项目一些效果不能用淘宝kissy框架 所以代码得自己写啊 网上当然有很多组件 但是用他们的代码很多(有的是我不需要的代码) 且还要看API 还不如自己动手写个简单一个,是这么一种简单的效果,比如菜单项 有上周 本周 下周 等等项  那么对应的项 有相应的内容,上周项 的 内容为111 本周项的内容为222 下周项内容为333等等,当我点击上一页或者下一页时候 切换当前的项及项对应的内容,如果项的索引等于0的时候 那么上一页按钮灰掉 变得不可点击 同理 下一页索引等于最大项时候 也灰掉 不可点击等。

    简单的HTML也贴上:(只是为了做个demo 容易说明而已)。

    <div class="container">
            <div class="menuItem">
                <span class="prev">上一页</span>
                <div class="wrapList">
                    <ul class="list">
                        <li class="menu">上周</li>
                        <li class="menu">本周</li>
                        <li class="menu">下周</li>
                    </ul>
                </div>
                <span class="next">下一页</span>
            </div>
            <div class="allContent">
                <div class="inner">
                    <div class="content">11111</div>
                    <div class="content">22222</div>
                    <div class="content">33333</div>
                </div>
            </div>
        </div>

    CSS代码如下:

     <style>
         *{margin:0;padding:0;}
         ul,li{list-style:none;}
         .container{100%;overflow:hidden;}
         .menuItem {300px;height:22px;line-height:22px;}
         .prev, .next{float:left;60px;cursor:pointer;overflow:hidden;}
         .wrapList {float:left;60px;height:22px;line-height:22px;overflow:hidden;}
         .list li{float:left;60px;height:22px;line-height:22px;text-align:center;overflow:hidden;}
         .allContent{300px;height:300px;overflow:hidden;}
         .content{float:left;300px;height:300px;overflow:hidden;}
         .disable {cursor:default;color:gray;}
      </style>

    JS代码如下:

    /**
     * 另外一种类似tab切换效果
     */
    
     function TabPage() {
        
        this.config = {
            type               :     'click',      // 默认为点击 上一页按钮 及 下一页按钮
            menuItemCls        :     '.menu',      // 要移动的菜单项
            menuWrapCls        :     '.wrapList',  // 菜单项外部容器
            panelCls           :     '.content',   // 要滚动的内容
            panelWarpCls       :     '.allContent',// 面板外部容器
            prevCls            :     '.prev',      // 上一页按钮
            nextCls            :     '.next',      // 下一页按钮
            disabledCls        :     'disable',    //  当上一页达到最前面的一页 或者 下一页达到最后一页时候 让其不可点击 按钮变灰
            switchTo           :     0,            //  默认切换到第几项 默认为第一项
            callback           :     null          //  切换完后添加回调函数
        };
    
        this.cache = {
            index   :  0        // 保存当前的索引 
        };
     }
     TabPage.prototype = {
        init: function(options) {
            this.config = $.extend(this.config,options || {});
            var self = this,
                _config = self.config,
                _cache = self.cache;
            // 初始化容器的宽度 使其左右动画移动操作
            var menuParent = $(_config.menuItemCls).parent(),
                menuWidth = $(_config.menuWrapCls).width(),
                len = $(_config.menuItemCls).length,
                contentParent = $(_config.panelCls).parent(),
                contentWidth = $(_config.panelWarpCls).width();
            $(menuParent).css("width",menuWidth * len);
            $(contentParent).css('width',contentWidth * len);
            
            // 保存页面加载时候 切换到第几项索引 然后当上一页点击 或者 下一页点击 计算出当前的索引
            _cache.index = _config.switchTo;
            
            // 页面初始化时候 先判断_cache.index= 0,或者 _cache.index 等于最大的时候 如果是的话 那么让其对应的按钮变灰不可点击
            if(_cache.index == 0) {
                !$(_config.prevCls).hasClass(_config.disabledCls) && $(_config.prevCls).addClass(_config.disabledCls);
                return;
            }else {
                $(menuParent).animate({"marginLeft":-menuWidth*_cache.index});
                $(contentParent).animate({"marginLeft":-contentWidth*_cache.index});
            }
            
            if(_cache.index == len) {
                !$(_config.nextCls).hasClass(_config.disabledCls) && $(_config.nextCls).addClass(_config.disabledCls);
                return;
            }
            // prev点击
            $(_config.prevCls).unbind(_config.type);
            $(_config.prevCls).bind(_config.type,function(){
    
                //判断当前的索引是否是第一项 如果是的话 上一页按钮是不可点击的状态
                if(_cache.index == 0) {
                    !$(_config.prevCls).hasClass(_config.disabledCls) && $(_config.prevCls).addClass(_config.disabledCls);
                    return;
                 }else {
                    _cache.index--;
                    // 动画animate 移动操作
                    $(menuParent).animate({"marginLeft":-menuWidth*_cache.index});
                    $(contentParent).animate({"marginLeft":-contentWidth*_cache.index});
                    $(_config.nextCls).hasClass(_config.disabledCls) && $(_config.nextCls).removeClass(_config.disabledCls);
                    
                    //回调函数
                    
                    _config.callback && $.isFunction(_config.callback) && _config.callback(_cache.index);
    
                    // 如果已经是第一项的话 那么上一页按钮灰掉 不可点击状态
                    if(_cache.index == 0){
                        !$(_config.prevCls).hasClass(_config.disabledCls) && $(_config.prevCls).addClass(_config.disabledCls);
                        return;
                    }
                    
                }
            });
    
            // click点击
            $(_config.nextCls).unbind('click');
            $(_config.nextCls).bind('click',function(){
    
                //判断当前的索引是否是最后一项 如果是的话 下一页按钮是不可点击的状态
                if(_cache.index == len-1) {
                    !$(_config.nextCls).hasClass(_config.disabledCls) && $(_config.nextCls).addClass(_config.disabledCls);
                    return;
                 }else {
                    _cache.index++;
                    // 动画animate 移动操作
                    $(menuParent).animate({"marginLeft":-menuWidth*_cache.index});
                    $(contentParent).animate({"marginLeft":-contentWidth*_cache.index});
                    $(_config.prevCls).hasClass(_config.disabledCls) && $(_config.prevCls).removeClass(_config.disabledCls);
    
                    //回调函数
                    _config.callback && $.isFunction(_config.callback) && _config.callback(_cache.index);
    
                    // 同理 如果已经是最后的话 那么下一页按钮灰掉 不可点击状态
                    if(_cache.index == len - 1){
                        !$(_config.nextCls).hasClass(_config.disabledCls) && $(_config.nextCls).addClass(_config.disabledCls);
                        return;
                    }
                 }
            });
        }
     };

    调用方式如下:

    <script>
        new TabPage().init({
    		switchTo : 1,
    		callback: function(index){
    			console.log(index);
    		}
    	});
    </script>
    
  • 相关阅读:
    UML中类图的符号解释
    Vim简明教程【CoolShell】
    C++ 指针—02 指针与引用的对照
    一个通用onReady函数的实现
    内存泄漏以及常见的解决方法
    个人博客之路
    WPF 设置WebBrowser控件不弹脚本错误提示框
    Solr使用入门指南
    用C语言写解释器(一)——我们的目标
    数据库索引的作用和长处缺点
  • 原文地址:https://www.cnblogs.com/tugenhua0707/p/3373194.html
Copyright © 2011-2022 走看看