可轮播滚动的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核心是数据出发,数据一般是我们前台从后台获取 ...
随机推荐
- 深入浅出Hyper-V网络虚拟化技术
年后综合症刚刚消失殆尽,转眼就要迎接各种新的工作任务了:之前写过一篇有关hyper-v网络虚拟化内容的博文,主要是从操作系统层面入手,概要性的总结了一下,基本也都是参考了大部分官方内容再加以个人修饰: ...
- Android 设置对话框全屏
1.在styles.xml中添加一个style: <style name="Dialog_Fullscreen"> <item name="androi ...
- Android的PopWindow动画实现
转载博客:http://www.open-open.com/lib/view/open1423626956186.html 1.实现步骤 1.主布局activity_main.xml <Rela ...
- Android实现播放视频
转载:http://www.bdqn.cn/news/201311/12100.shtml 使用VideoView播放视频 VideoView,用于播放一段视频媒体,它继承了SurfaceView,位 ...
- windows下实现Git在局域网使用
1.首先在主机A上创建一个文件夹用于存放你要公开的版本库.然后进入这个文件夹,右键->Git create repository here,弹出的窗口中勾选Make it Bare!之后将这个文 ...
- r.js结合gulp等于webpack(angular为例)
本人大学时玩dojo,开始了AMD模块化的不归路,工作后一直使用requirejs,感觉非常好.但是,近来随着react的火热,webpack成为了天下无敌的模块化工具,能做模块化,合并压缩,监视等, ...
- ONE
我是漆黑夜空中 闪烁凄凄的一颗星 遥隔千里的双眸一遇 看到了,你那藏在泪光里的话 你一个人 把泪擦干 把话捏在手心 陪着我,承受着黑夜的孤独 说明:来自落网的一个期刊<ONE>. 听这个期 ...
- C语言 第五章 循环结构
一.for 请在屏幕上输出1000个*号 printf("*************************...."); #include "stdio.h" ...
- jQuery-1.9.1源码分析系列(七) 钩子(hooks)机制及浏览器兼容
处理浏览器兼容问题实际上不是jQuery的精髓,毕竟让技术员想方设法取弥补浏览器的过错从而使得代码乱七八糟不是个好事.一些特殊情况的处理,完全实在浪费浏览器的性能:突兀的兼容解决使得的代码看起来既不美 ...
- Mono.Cecil 初探(一):实现AOP
序言 本篇文章介绍基于Mono.Cecil实现静态AOP的两种方式:无交互AOP和交互式AOP. 概念介绍 Mono.Cecil:一个可加载并浏览现有程序集并进行动态修改并保存的.NET框架. AOP ...