程序界面效果如下

Tab组件由多个TabItem组成,超出部分隐藏,可以通过左右按钮滑动显示出来

1、封装

// 初始化内容
$(function () {
J.JTab($(".jgui-tab")).init();
});
//Tab封装
(function($) {
J.JTab = function($p_selector) {
//初始化
init = function(p_options, p_datas, p_param) {
return $p_selector.each(function() {
$this=$(this);
$this.find(".jgui-tab-pre").unbind('click').click(function(event) {
var cur_left = $this.find(".jgui-tabcontent").scrollLeft(); //当前滚过的距离
$this.find(".jgui-tabcontent")
.stop()
.animate({ scrollLeft: -200 + cur_left }, 200);
});
$this.find(".jgui-tab-next").unbind('click').click(function(event) {
var cur_left = $this.find(".jgui-tabcontent").scrollLeft(); //当前滚过的距离
$this.find(".jgui-tabcontent")
.stop()
.animate({ scrollLeft: 200 + cur_left }, 200);
});
$this.find(".jgui-tabitem").unbind('click').click(function(event) {
$(this)
.siblings(".jgui-tabitem")
.removeClass("selected");
$(this).addClass("selected", 300);
});
$this.find(".jgui-tabitem .jgui-tab-close").unbind('click').click(function(event) {
$(this)
.closest(".jgui-tabitem")
.remove();
});
});
};
return {
init: init
};
};
})(J.$);

2、添加和显示方法,暂时实现功能,以后封装

//NavItem点击事件
var events = $("#menuaccordion").data("events");
events.onNavItemClick = function(p_obj, p_type) {
if (!$("#leftpanel").is(".unfold") && p_type == "navitem") {
//折叠状态展开
$("#leftpanel").width(300);
$("#centerpanel").css("left", "300px");
$("#mainlogo").html("JGUI DEMO");
J.Accordion($(p_obj).closest(".jgui-accordion")).unfold();
$("#leftpanel").toggleClass("unfold");
$("#folderbtn").toggleClass("icon-menu-unfold", "icon-menu-fold");
return false;
} else if (p_type == "navitemchildleaf") {
//点击了子项叶节点
$tabcontent=$("#pagetab .jgui-tabcontent");
var text = $(p_obj)
.find("a")
.html();
var $findTab = undefined;
$tabcontent
.find("span")
.each(function() {
var $this = $(this);
if ($this.html() == text) {
$findTab = $this;
return;
}
});
if ($findTab == undefined) {
var appentHtml =
'<a class="jgui-tabitem "><i class="anticon icon-codepen jgui-tab-item-icon"></i><span>' +
text +
'</span><i class=" anticon icon-close jgui-tab-close "></i></a>';
$("#pagetab .jgui-tabcontent").append(appentHtml);
J.JTab($("#pagetab")).init();
$findTab=$("#pagetab .jgui-tabcontent .jgui-tabitem:last-child");
}
var left=$tabcontent.scrollLeft();
var objleft=$findTab.offset().left-$tabcontent.offset().left-50;//50是左右按钮的宽度
      var objright=$findTab.offset().left-$tabcontent.offset().left-50+left+$findTab.width();//50是左右按钮的宽度
      var objwidth=$findTab.width();
console.log(left+','+objleft+','+$tabcontent.width());
if(objleft<0)//左边非可见区域
{
$tabcontent
.stop()
.animate({ scrollLeft: left+objleft-objwidth }, 200);
}else if(objright>$tabcontent.width())//右边非可见区域
{
$tabcontent
.stop()
.animate({ scrollLeft: left+(objright-$tabcontent.width())+objwidth }, 200);
}
$findTab.trigger("click");
}
return true;
};

代码一直完善中,详细代码请看
www.jgui.com

JGUI源码:Tab组件实现(9)的更多相关文章

  1. JGUI源码:组件及函数封装方法(7)

    以Accordion为例1.在base.js定义一个对象,这样可以和JQuery对象区分开,用户使用组件时比较清晰一点,也可以在这里引用多个库. var JGUI = J = { version : ...

  2. JGUI源码:从头开始,建一个自己的UI框架(1)

    开篇 1.JGUI是为了逼迫自己研究底层点的前端技术而做的框架,之前对web底层实现一直没有深入研究,有了技术瓶颈,痛定思痛从头研究, 2.虽然现在vue技术比较火,但还在发展阶段,暂时先使用JQue ...

  3. JGUI源码:鼠标中键滚动再次优化(5)

    //电脑端中键滚动事件 var mousewheel = getBrowserInfo() == "Firefox" ? "DOMMouseScroll" : ...

  4. JGUI源码:Accordion鼠标中键滚动和手机端滑动实现(2)

    本文是抽屉组件在PC端滚动鼠标中键.手机端滑动时,滚动数据列表实现方法,没有使用iscroll等第三方插件,支持火狐,谷歌,IE8+等浏览器. 演示在:www.jgui.com Github地址:ht ...

  5. tomcat8 源码分析 | 组件及启动过程

    tomcat 8 源码分析 ,本文主要讲解tomcat拥有哪些组件,容器,又是如何启动的 推荐访问我的个人网站,排版更好看呦: https://chenmingyu.top/tomcat-source ...

  6. Restrramework源码(包含组件)分析

    1.总体流程分析 rest_framework/view.py 请求通过url分发,触发as_view方法,该方法在ViewSetMixin类下 点进去查看as_view源码说明,可以看到它在正常情况 ...

  7. 修改elementUI源码新增组件/修改组件

    前言 经常我们会遇到elementUI组件库期间有5%达不到我们想要的需求,第一我们重新写组件,第二我们改源码 安装element https://github.com/ElemeFE/element ...

  8. Vue源码之组件化/生命周期(个人向)

    大致流程 具体流程 组件化 (createComponent) 构造⼦类构造函数 const baseCtor = context.$options._base // plain options ob ...

  9. React源码之组件的实现与首次渲染

    react: v15.0.0 本文讲 组件如何编译 以及 ReactDOM.render 的渲染过程. babel 的编译 babel 将 React JSX 编译成 JavaScript. 在 ba ...

随机推荐

  1. libevent 实现的socket 通信 server以及解决找不到动态库的方法

    注: client 个人觉得没必要用 libvent来实现就没写 注:由于 涉及到回调函数的使用 如有疑惑的可以先去了解回调函数的实现机理 先来说一下 libevent主要是干啥的 : 内部封装了 s ...

  2. CQOI2019(十二省联考)游记

    CQOI2019(十二省联考)游记 Day -? 自从联赛爆炸,\(THUWC\)爆炸,\(WC\)爆炸(就没有不爆炸的)之后我已经无所畏惧... 听说是考\(4.5 h\)吗? Day -1 \(Z ...

  3. SQL COUNT() 函数

    COUNT() 函数返回匹配指定条件的行数. SQL COUNT() 语法 SQL COUNT(column_name) 语法 COUNT(column_name) 函数返回指定列的值的数目(NULL ...

  4. 微信授权登录mock(在没有真实微信账号的情况下测试大量微信账户授权登录的情况)

    场景介绍 对于构建在微信公众号的系统,帐号体系往往使用微信授权登录(如各类微信商城应用系统). 这样操作不仅可以实现静默注册,对用户几乎是无感的,同时也达到了区分用户,获取用户基本信息(头像,昵称等) ...

  5. 一些矩阵范数的subgradients

    目录 引 正交不变范数 定理1 定理2 例子:谱范数 例子:核范数 算子范数 定理3 定理4 例子 \(\ell_2\) <Subgradients> Subderivate-wiki S ...

  6. Java Core - ‘==’和‘equals’的区别

    不管是‘==’还是‘equals’,他们的比较都需要区分类型来讨论的: ‘==’ 当比较的数据类型是基本类型时,比较值是否相同 当比较的数据类型是引用类型时,不仅比较值相同还比较其所在内存地址是否相同 ...

  7. springboot项目中配置swagger-ui

    Git官方地址:https://github.com/SpringForAll/spring-boot-starter-swagger Demo:https://github.com/dyc87112 ...

  8. 熟悉常用的HDFS操作

    编程实现以下指定功能,并利用Hadoop提供的Shell命令完成相同任务: 在本地Linux文件系统的“/home/hadoop/”目录下创建一个文件txt,里面可以随意输入一些单词. 在本地查看文件 ...

  9. 【pytorch】pytorch-LSTM

    pytorch-LSTM() torch.nn包下实现了LSTM函数,实现LSTM层.多个LSTMcell组合起来是LSTM. LSTM自动实现了前向传播,不需要自己对序列进行迭代. LSTM的用到的 ...

  10. springboot全局捕获异常

    捕获 捕获原理,使用AOP技术,采用异常通知. 1.捕获返回json格式 2.捕获返回页面 步骤: 1.@ControllerAdvice(pasePackage="") 注释异常 ...