可轮播滚动的Tab选项卡
前段时间有试着搭建个后台主题ui框架,有用到可支持滚动的Tab选项卡,模仿着H+后台主题ui框架中的代码造轮子改造了下,可惜代码在公司,不能把代码外发出来(感觉这样被限制了很多,对于这样的公司没办法,只能吐槽下这样的制度),这样在公司造的轮子只能在家再敲一遍了。
本次主题讲的是实现一个可轮播滚动的Tab选项卡列表,自己封装成了一个小轮子,有什么不对的地方,希望各位大师多多指出,给予一个进步的空间。
首先把HTML代码贴出来
<div class="content-tabs">
<button class="roll-nav roll-left J_tabLeft"><i class="fa fa-backward"><<</i></button>
<nav class="page-tabs J_menuTabs">
<div class="page-tabs-content">
</div>
</nav>
<button class="roll-nav roll-right J_tabRight"><i class="fa fa-forward">>></i></button>
</div>
CSS部分:
*{padding:;margin:;}
.content-tabs {
position: relative;
height: 42px;
background: #fafafa;
line-height: 40px
}
.page-tabs a {
display: block;
float: left;
border-right: solid 1px #eee;
padding: 0 15px;
color: #fff;
background: #EC0D35;
text-decoration: none;
}
nav.page-tabs {
margin-left: 40px;
width: 100000px;
height: 40px;
overflow: hidden
}
nav.page-tabs .page-tabs-content {
float: left
}
.content-tabs button {
background: #fff;
border:;
height: 40px;
width: 40px;
outline:;
cursor: pointer;
}
.content-tabs .roll-nav,.page-tabs-list {
position: absolute;
width: 40px;
height: 40px;
text-align: center;
color: #999;
z-index:;
top: 0
}
.content-tabs .roll-left {
left:;
border-right: solid 1px #eee
}
.content-tabs .roll-right {
right:;
border-left: solid 1px #eee
}
.page-tabs a.active {
background: #2f4050;
color: #a7b1c2
}
在此循环出30个选项卡展示其效果:
for(var i=0; i<30; i++){
$('.page-tabs-content').append("<a href='javascript:;' class='J_menuTab'>Tab"+(i+1)+"</a>");
}
$('.page-tabs-content').children().first().addClass('active');
页面效果如下:
自己造的轮子代码如下:
;(function($){
var TabElement = function(option){
this.option = option;
}
TabElement.prototype = {
'f': function(l){
var k = 0;
$(l).each(function() {
k += $(this).outerWidth(true);
});
return k;
},
'prevTab': function(){
var that = this;
var o = Math.abs(parseInt($(that.option.tab_list).css("margin-left")));
var l = that.f($(that.option.content_tab).children().not(that.option.nav_tab));
var k = $(that.option.content_tab).outerWidth(true) - l;
var p = 0;
if ($(that.option.tab_list).width() < k) {
return false
} else {
var m = $(that.option.tab_list).children().first();
var n = 0;
while ((n + $(m).outerWidth(true)) <= o) {
n += $(m).outerWidth(true);
m = $(m).next()
}
n = 0;
if (that.f($(m).prevAll()) > k) {
while ((n + $(m).outerWidth(true)) < (k) && m.length > 0) {
n += $(m).outerWidth(true);
m = $(m).prev()
}
p = that.f($(m).prevAll())
}
}
$(that.option.tab_list).animate({
marginLeft: 0 - p + "px"
}, "fast")
},
'nextTab': function(){
var that = this;
var o = Math.abs(parseInt($(that.option.tab_list).css("margin-left")));
var l = that.f($(that.option.content_tab).children().not(that.option.nav_tab));
var k = $(that.option.content_tab).outerWidth(true) - l;
var p = 0;
if ($(that.option.tab_list).width() < k) {
return false
} else {
var m = $(that.option.tab_list).children().first();
var n = 0;
while ((n + $(m).outerWidth(true)) <= o) {
n += $(m).outerWidth(true);
m = $(m).next()
}
n = 0;
while ((n + $(m).outerWidth(true)) < (k) && m.length > 0) {
n += $(m).outerWidth(true);
m = $(m).next()
}
p = that.f($(m).prevAll());
if (p > 0) {
$(that.option.tab_list).animate({
marginLeft: 0 - p + "px"
}, "fast")
}
}
},
'goTab': function(n){
var that = this;
var o = that.f($(n).prevAll()), q = that.f($(n).nextAll());
var l = that.f($(that.option.content_tab).children().not(that.option.nav_tab));
var k = $(that.option.content_tab).outerWidth(true) - l;
var p = 0;
if ($(that.option.tab_list).outerWidth() < k) {
p = 0
} else {
if (q <= (k - $(n).outerWidth(true) - $(n).next().outerWidth(true))) {
if ((k - $(n).next().outerWidth(true)) > q) {
p = o;
var m = n;
while ((p - $(m).outerWidth()) > ($(that.option.tab_list).outerWidth() - k)) {
p -= $(m).prev().outerWidth();
m = $(m).prev()
}
}
} else {
if (o > (k - $(n).outerWidth(true) - $(n).prev().outerWidth(true))) {
p = o - $(n).prev().outerWidth(true)
}
}
}
$(that.option.tab_list).animate({
marginLeft: 0 - p + "px"
}, "fast")
}
};
$.fn.menuTab = function(option){
var opt = $.extend({},option);
return new TabElement(opt);
}
})(jQuery)
最后初始化插件及绑定事件就可以了
var TabMenu = $('.content-tabs').menuTab({
'content_tab':'.content-tabs',
'nav_tab':'.page-tabs',
'tab_list':'.page-tabs-content'
});
$('.J_tabRight').on('click',function(){
TabMenu.nextTab();
})
$('.J_tabLeft').on('click',function(){
TabMenu.prevTab();
})
$('.J_menuTab').on('click',function(){
$('.J_menuTab.active').removeClass('active');
$(this).addClass('active');
TabMenu.goTab($(this));
})
这样,就实现了一个可轮播滚动的Tab选项卡列表了。
可轮播滚动的Tab选项卡的更多相关文章
- JQuery图片轮播滚动效果(网页效果--每日一更)
今天,带来的是一个图片的轮播滚动效果! 先来看一下效果展示:亲,请点击这里 原理很简单,设置一个定时器,使图片列表在每隔一段时间后滚动一次.而循环效果,就是在每一滚动的时候,将第一张图片放到最后一张的 ...
- 使用JS实现图片轮播滚动跑马灯效果
我的第一篇文章.哈哈.有点小鸡冻. 之前在百度搜索"图片轮播"."图片滚动",结果都是那种可以左右切换的.也是我们最常见的那种.可能是搜索 关键字的问题吧. ...
- H5+CSS3做图片轮播滚动效果
HTML代码部分: <div id="wrap"> <ul id="list"> <li>10</li> < ...
- 焦点轮播图(tab轮播)
主要有两部分:1.列表导航(小图片) 2.展示区(大图片) 页面布局: HTML部分: <div class="s_conC"> ...
- jquery tab选项卡、轮播图、无缝滚动
最近做一个页写了一个星期,觉得自己对jquery还是很不熟悉 自己查了一下资料写了几个封装好的tab选项卡.轮播图.无缝滚动 $(function(){ //tab选项卡 jQuery.tab=fun ...
- 简要分析javascript的选项卡和轮播图
选项卡 思路 1.按钮和展示的页面要对应:分别遍历,记住当前按钮的索引,让其成为展示页面的索引 2.只出现所对应的页面:所有的页面隐藏,只展示想要的页面 只展示js代码 for(var i=0;i&l ...
- JavaScript—原生轮播和无缝滚动
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 慕课网6-2 作业:js实现轮播特效
小伙伴们,掌握了JavaScript的语法.流程控制语句.内置对象以及DOM和BOM的知识,运用所学知识完成如下图所示的交互效果——轮播图.效果图如下: 具体交互效果图参考gif动态效果图,gif效果 ...
- vue轮播组件及去掉路由#
最近公司要我去实现vue知识的系统讲解,总结一番,大致需要7节课,今天大致说一下我们使用vue需要学会的基本技能.vue是一个渐进性视图渲染框架,使用vue核心是数据出发,数据一般是我们前台从后台获取 ...
随机推荐
- php面向对象基础
1.类 由众多对象抽象出来的 它包含了对象通用的特性 2.对象 一切皆对象 它是由实例化出来的 例: 求两个圆之间阴影的面积 <!DOCTYPE html PUBLIC "-//W3C ...
- Neutron 物理部署方案 - 每天5分钟玩转 OpenStack(68)
前面我们讨论了 Neutron 的架构,本节讨论 Neutron 的物理部署方案:不同节点部署不同的 Neutron 服务组件. 方案1:控制节点 + 计算节点 在这个部署方案中,OpenStack ...
- 【读书笔记】XHTML与HTML5 的差异
最近在困惑html5和XHTML两者之间的具体区别,查看了百度.google和新浪等,他们首页的源码第一句都是 1 <!Doctype html> 这是HTML5的doctype声明,说明 ...
- T-Sql(八)字段索引和数据加密
t-sql的基本用法讲到第八章也差不多了,最后就讲下字段索引和数据加密,这两个内容对编程人员可能用的地方不是太多,还是那句老话“防患于未然”. 下面我就简单的说下字段索引和数据加密的内容,只是简单概述 ...
- ar命令详解
ar 命令 用途 维护链接编辑器使用的索引库. 语法 ar [ -c ] [ -l ] [ -g | -o ] [ -s ] [ -v ] [ -C ] [ -T ] [ -z ] { ...
- SharePoint 2013功能(SPFeature)与GUID对照表
自从上次遇到了一些无法开启SharePoint功能的事件之后(详见<SharePoint 2013 托管导航无法被开启的解决办法>一文),对于在SharePoint中所提示的GUID就格外 ...
- PHP实现实现数字补零格式化
在接支付SDK的时候,第三方回调处理时需要IP,并且IP的需求是:去掉点号,补零到每地址段3位, 如:192168000001 先看看我的实现: <?php $IP = explode ( '. ...
- react入门(2)
接着上一次的讲,如果没有看过上一篇文章的小伙伴可以先看一下http://www.cnblogs.com/sakurayeah/p/5807821.html React事件 可以先看一下官网讲解的内容h ...
- 实现iOS图片等资源文件的热更新化(三):动态的资源文件夹
简介 此文,将尝试动态从某个不确定的文件夹中加载资源文件.文章,会继续完善自定义的 imageNamed 函数,并为下一篇文章铺垫. 这么做的意义 正如我们经常所说的那样,大多数情景知道做事的意义往往 ...
- CSS垂直居中和水平居中
前言 CSS居中一直是一个比较敏感的话题,为了以后开发的方便,楼主觉得确实需要总结一下了,总的来说,居中问题分为垂直居中和水平居中,实际上水平居中是很简单的,但垂直居中的方式和方法就千奇百怪了. 内联 ...