JGUI源码:Tab组件实现(9)
程序界面效果如下
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)的更多相关文章
- JGUI源码:组件及函数封装方法(7)
以Accordion为例1.在base.js定义一个对象,这样可以和JQuery对象区分开,用户使用组件时比较清晰一点,也可以在这里引用多个库. var JGUI = J = { version : ...
- JGUI源码:从头开始,建一个自己的UI框架(1)
开篇 1.JGUI是为了逼迫自己研究底层点的前端技术而做的框架,之前对web底层实现一直没有深入研究,有了技术瓶颈,痛定思痛从头研究, 2.虽然现在vue技术比较火,但还在发展阶段,暂时先使用JQue ...
- JGUI源码:鼠标中键滚动再次优化(5)
//电脑端中键滚动事件 var mousewheel = getBrowserInfo() == "Firefox" ? "DOMMouseScroll" : ...
- JGUI源码:Accordion鼠标中键滚动和手机端滑动实现(2)
本文是抽屉组件在PC端滚动鼠标中键.手机端滑动时,滚动数据列表实现方法,没有使用iscroll等第三方插件,支持火狐,谷歌,IE8+等浏览器. 演示在:www.jgui.com Github地址:ht ...
- tomcat8 源码分析 | 组件及启动过程
tomcat 8 源码分析 ,本文主要讲解tomcat拥有哪些组件,容器,又是如何启动的 推荐访问我的个人网站,排版更好看呦: https://chenmingyu.top/tomcat-source ...
- Restrramework源码(包含组件)分析
1.总体流程分析 rest_framework/view.py 请求通过url分发,触发as_view方法,该方法在ViewSetMixin类下 点进去查看as_view源码说明,可以看到它在正常情况 ...
- 修改elementUI源码新增组件/修改组件
前言 经常我们会遇到elementUI组件库期间有5%达不到我们想要的需求,第一我们重新写组件,第二我们改源码 安装element https://github.com/ElemeFE/element ...
- Vue源码之组件化/生命周期(个人向)
大致流程 具体流程 组件化 (createComponent) 构造⼦类构造函数 const baseCtor = context.$options._base // plain options ob ...
- React源码之组件的实现与首次渲染
react: v15.0.0 本文讲 组件如何编译 以及 ReactDOM.render 的渲染过程. babel 的编译 babel 将 React JSX 编译成 JavaScript. 在 ba ...
随机推荐
- Kubernetes入门-集群安装
Kubernetes是谷歌开源的容器集群编排平台,是一个完备的分布式系统支撑平台,为容器化应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,具有强大的故障发现和自我修复机制.服务滚动升级 ...
- Docker: Jenkins里的pipeline编写基本技巧
Jenkins里,先新建一个pipeline项目 Pipeline Syntax 在Sample Step里选择需要的插件,如果不存在,就去系统管理,插件管理里,进行安装. 如果源码管理工具用的是gi ...
- 既然CPU一次只能执行一个线程,那多线程存在的意义是什么?
今天看到了一篇文章,终于解除了一直的疑惑. 原文链接:https://www.cnblogs.com/qingbafengliuxia/p/10171638.html CPU的时间是按 ...
- JavaScript中编码函数escape,encodeURI,encodeURIComponent
第一:escape():对字符串进行编码,escape()不编码的字符:@*/+ 第二:encodeURI() 函数可把字符串作为 URI 进行编码.不会进行转义的:;/?:@&=+$,# 第 ...
- 【spring源码分析】IOC容器初始化(二)
前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...
- 2 OpenWrt路由器系统开发与网页设计
https://www.zhongkerd.com/news/content-729.html 摘 要: 目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户 ...
- P1090 合并果子 题解
那么,我们开始吧, 堆 堆是一个完全二叉树,而且是每层都有规律的二叉树 规律大概是: 小根堆:最上层数的大小最小,往下每层结点都比父亲结点大,比两个儿子结点小 大根堆:最上层数的大小最大,往下每层结点 ...
- CodeSmith 一、连接Mysql
下载了codesmith 8,连接Mysql却提示“找不到请求的 .Net Framework Data Provider". 1,下载MySql.Data.dll:https://dev. ...
- 浅谈 Angular 项目实战
为什么使用 Angular 我不是 Angular 的布道者,但如今痴迷 Angular,使用 Angular 做项目让我有一种兴奋感.目前的三大主流前端框架都研究过,博客中也有三者的相关教程,最早接 ...
- Vue (三) --- Vue 组件开发
------------------------------------------------------------------好心情,会让你峰回路转. 5. 组件化开发 5.1 组件[compo ...