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 ...
随机推荐
- redis -list
列表的元素类型为string 按照插入顺序排序 增加: 例如: 从列表的 左侧 加入数据 a b c lpush 键 a b c 显示:1“c"2"b"3"c& ...
- DIY手机锂电池万能充
今天翻出来一个诺基亚的旧手机,试了一下,无法开机,应该了电池亏电了.可惜手头没有充电器,无法给手机充电. 活人岂能让尿憋死?回想了一下以前用过的手机万能充的样式(这里暴露年龄了) 根据家中现成的材料, ...
- yum 安装 python-pip 失败解决方法
这个包在EPEL源里,要添加EPEL源才可以.然后按博客里说的方法添加,执行以下命令: sudo rpm -ivh epel-release* 第一种方式:由于epel在禁用列表里需要另外加参数yum ...
- linux 安装中文字体
工具/原料 centos6.5_x64 方法/步骤 centos6.5下使用下面命令进行安装 yum install -y fontconfig mkfontscale 使用fc-list ...
- ngxin 配置ssl
1.上aliyun.com 申请免费ssl证书, 登录aliyun后搜索 “ca证书” , 申请使用“文件验证”,把文件传到服务器指定目录上,验证即可. 2.然后下载证书, 解压后传到服务器上, 在n ...
- 五 Struts 配置文件
一.struts.xml详解1.package:包 属性:name=命名 namespace=在action访问路径前面加的前缀 extends=继承另外的包 action:name=action的访 ...
- 利用unittest+ddt进行接口测试(一):简单demo
一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向.逆向等多种组合.所以在测试一个接口时通常会编写多条case,而这些case除了传参不同外,其实并没什么区别. 这个时候就可以利用ddt ...
- Python--day11(函数的参数)
今日主要内容 1. 函数的参数 2. 函数的嵌套调用 1. 形参与实参 1. 参数介绍: 函数为什么要有参数:因为内部的函数体需要外部的数据 怎样定义函数的参数:在定义函数阶段,函数名在后面( ...
- 制作自己cocoapods库
https://www.cnblogs.com/czc-wjm/p/5958103.html 今天来讲一下cocoapods制作,网上教程很多,就不再讲理论,直接操作: 1.创建仓库: 2.将仓库克隆 ...
- 转:eclipse 设置Java快捷键补全
1.打开Eclipse,点击" Window - Preferences"; 2. 在目录树上选择"Java——Editor——Content Assist", ...