tab页过多,展现按钮可左右移动tab页

2023-11-05

1,结果如下图,tab太多,一行放不下,右侧展现左右按钮,鼠标移上tab页可左右移动 

2,代码

/**
 * 功能按钮过多时,可左右移动
 * @param {*} id 按钮区域id
 * @param {*} dom 按钮元素
 * @param {*} btnclass 按钮样式
 * @param {*} mp 每个按钮需要增加的宽度
 * @param {*} n 隐藏按钮增加的个数
 */
 function btnShowOrHide(id, dom, btnclass='', mp=0, n=0) {
	var $skyBtnGroup = $(id);
    // 先把所有应该展示的按钮展示出来
    $skyBtnGroup.find('.btnum').show();
	// 按钮过多,添加展开收起功能
	$skyBtnGroup.find(dom+':visible').addClass('btnum');
	// 隐藏的按钮移到最后面
	$skyBtnGroup.find(dom+':hidden').each(function (i, item) {
		$skyBtnGroup.append(item);
	});
	var $btnArr = $skyBtnGroup.find('.btnum');
	$btnArr.show();
	var skyWidth = $skyBtnGroup.width();
	var btnumber = $btnArr.length;
	var btnWidth = 0;

	$btnArr.each(function (i, item) {
		btnWidth += ($(item).width() + mp);
		if (btnWidth >= skyWidth) {
			btnumber = i - 1;
			return false;
		}
	})

	if ($btnArr.length > btnumber) {    //按钮大于n个
		// var showIconHtml = '<i class="fa fa-angle-double-down sh-btn" id="shBtn"></i>';
		var showIconHtml = '<i class="fa fa-angle-double-left sh-btn '+btnclass+' not-use" id="lBtn"></i><i class="fa fa-angle-double-right sh-btn '+btnclass+'" id="rBtn"></i>';
		if ($('#btnIconTd').length > 0) {  //如果已经有按钮,先删除
			$('#btnIconTd').remove();
		}

		// 追加左右按钮
    if(id == '.sky-btn-group') {
      $skyBtnGroup.after('<td id="btnIconTd" style="padding-right: 8px;">' + showIconHtml + '</td>');
    }else{
      $skyBtnGroup.after('<div id="btnIconTd" class="fl" style="padding-right: 8px;">' + showIconHtml + '</div>');
    }
		
		// 先隐藏掉多余的按钮
		var $moreBtn = $skyBtnGroup.find('.btnum:gt(' + Number(btnumber - n) + ')');
		$moreBtn.hide();
		var skyWidth = $skyBtnGroup.width();

		$('#rBtn').hover(function () {   //右按钮
			interval = setInterval(function () {
				var totalWidth = 0;
				$skyBtnGroup.find('.btnum:visible').each(function (i, item) {
					totalWidth = totalWidth + $(item).width() + mp
				})
				var lastBtn = $skyBtnGroup.find('.btnum:visible:last');
				var firstBtn = $skyBtnGroup.find('.btnum:visible:first');
				var lastNextBtn = lastBtn.next('.btnum');
				if (lastNextBtn.length > 0) {
					$('#rBtn').removeClass('not-use');
					$('#lBtn').removeClass('not-use');
					lastNextBtn.show();
					var lastNextBtnWidth = lastNextBtn.width() + mp;
					lastNextBtn.hide();
					var realWidth = totalWidth - firstBtn.width() - mp + lastNextBtnWidth;
					if (realWidth <= skyWidth) {
						if (totalWidth + lastNextBtnWidth > skyWidth) {
							firstBtn.hide();
						}
						lastNextBtn.show();
					} else {
						firstBtn.hide();
					}

				} else {
					$('#rBtn').addClass('not-use');
					clearInterval(interval)
				}
			}, 500)
		}, function () {
			clearInterval(interval)
		})
		$('#lBtn').hover(function () {  //左按钮

			interval = setInterval(function () {
				var numleft = $skyBtnGroup.find('.btnum:visible').length;
				var totalWidth = 0;
				$skyBtnGroup.find('.btnum:visible').each(function (i, item) {
					totalWidth = totalWidth + $(item).width() + mp
				})
				var lastBtn = $skyBtnGroup.find('.btnum:visible:last');
				var firstBtn = $skyBtnGroup.find('.btnum:visible:first');
				var firstPrevBtn = firstBtn.prev('.btnum');
				if (firstPrevBtn.length > 0) {
					firstPrevBtn.show();
					var firstPrevBtnWidth = firstPrevBtn.width() + mp;
					firstPrevBtn.hide();
					var realWidth = totalWidth - lastBtn.width() - mp + firstPrevBtnWidth;
					if (realWidth <= skyWidth) {
						$('#lBtn').removeClass('not-use');
						$('#rBtn').removeClass('not-use');
						if (totalWidth + firstPrevBtnWidth > skyWidth) {
							lastBtn.hide();
						}
						firstPrevBtn.show();
					} else {
						lastBtn.hide();
					}

				} else {
					$('#lBtn').addClass('not-use');
					clearInterval(interval)
				}
			}, 500);//启动计时器,调用overs函数,

		}, function () {
			clearInterval(interval)
		})
	} else {
		$('#btnIconTd').remove();
		$skyBtnGroup.find('button.btnum').show();
	}
}

3,在需要的地方调用方法即可

 // tab页过多时,增加左右按钮
 btnShowOrHide('#tab_inner', 'li', 'tab-more');

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tab页过多,展现按钮可左右移动tab页 的相关文章

随机推荐

  • 【vulntarget】系列:vulntarget-g 练习WP

    本文仅为学习 vulntarget 在本地环境测试验证 无其它目的 请勿进行未经授权的测试 一 靶场信息 下载地址 百度云链接 链接 https pan baidu com s 1R 9udIuoPavsTI18 lPP3Q pwd ics
  • endl和"\n"的区别

    在C 中 打印字符串时 cout不会自动移到下一行 而想要换行 有两种方式 一种是控制符endl 一种是换行符 n 下面来介绍下两种方式 endl是一个C 符号 表示重起一行 在输出流中插入endl将导致屏幕光标移到下一行开头 C 中还提供
  • 使用带Arduino IDE & WIZ820io的ATmega1284P

    使用带Arduino IDE WIZ820io的ATmega1284P 2013 07 04 Filed under IO模块 and tagged with arduino Arduino IDE atmega1284p RAM问题 W5
  • 解决git push 错误error: src refspec master does not match any. error: failed to push some refs to

    解决git push 错误error src refspec master does not match any error failed to push some refs to 在和远程仓库关联后 我们通过 push 命令将本地仓库的文
  • 装机:MSDT & HEDT 的区别

    MSDT Main Stream Desktop 主流桌面平台 HEDT High End Desktop 高端桌面平台 HEDT平台在很多方面的性能都要比MSDT平台强很多 相对于MSDT平台 HEDT平台通常拥有更多的核心数量 更多的内
  • C#查询ACCESS数据库字段和时间字段

    查询表的所有字段 string Format SELECT FROM 0 TableName 查询表中的一个字段 在ACCESS中将字段用CStr 转换成字符串来判断 string Format SELECT FROM 0 WHERE CS
  • 多协议服务器,多协议远程连接服务器

    多协议远程连接服务器 内容精选 换一换 远程连接Linux云服务器报错 Access denied帐号或密码输入错误 SSH服务端配置了禁止root用户登录的策略 帐号或密码输入错误 检查输入的用户名或密码 Linux云服务器默认用户名ro
  • unity——小球酷跑游戏制作

    课堂课程记录 小球滚动 所有变量与物体名的命名原则都是见名知意 一 创建一个unity项目 二 Create所需3Dobject 1 Player 2 walls 三 添加属性 1 添加在Player上 a 添加Rigidbody组件 b
  • 折半查找

    什么是折半查找 折半查找其实通过字面上的意思就是大致就可以理解为每次查找的时候 选取中间下标的值进行查找 如果找不到 就判断这个要查找的数大于还是小于这个这个中间下标的值 如果大于 就把这个中间值的下标 1给到左边的下标 中间下标 就等于
  • 子域访问计数

    class Solution 利用hash表 对子域名计数 注意对字符串的划分 def subdomainVisits self cpdomains count for domain in cpdomains visits int doma
  • 第十三届蓝桥杯大赛真题PythonB组详解 内含周末献血日记

    前言 今天上午去献血啦 在成都市血液中心 待遇很好 体检通过后先发了一些食物 防止一会饿或者来之前空腹的童鞋 可以看出吃的还是比较不错的 正常的早饭也不会吃那么多 但是泡面的油包不能放 水是甜的加了糖之类的 面包不太好吃 就是纯面包 吃不了
  • 在vue中使用antV-G2展示柱状图

    介绍 G2 是一套基于图形语法理论的可视化底层引擎 以数据驱动 提供图形语法与交互语法 具有高度的易用性和扩展性 使用 G2 你可以无需关注图表各种繁琐的实现细节 一条语句即可使用 Canvas 或 SVG 构建出各种各样的可交互的统计图表
  • overleaf一些技巧(更新中)

    文章目录 前言 格式 技巧 感悟 前言 这种半懂不懂 学不明白的感觉真是太让人着迷了T T 一下来自我在使用overleaf过程中的资料总结 贴出了原地址 找个模板改一改比手撸一篇要快 内容部分来源 LaTeX基本命令使用教程 清晰实例 O
  • javascript之Math

    在javascript中Math是js的内置的对象 其中有很多属性和方法用来操作跟数学相关 属性Math PI Math方法有 Math random 随机数 Math ceil 向上取整 Math floor 向下取整 Math abs
  • 三种排序方法:冒泡排序,选择排序,sort()函数排序

    三种排序方法 冒泡排序 选择排序 sort函数排序 引言 为什么要写呢 因为我怕我忘了 一个寒假过去冒泡排序都不会手写了 其中的冒泡排序和选择排序为C语言实现 而sort函数排序则借助C 实现 并且还可以用sort函数对结构体进行排序 冒泡
  • 一文详细介绍什么是数据标注?

    机器学习和深度学习算法都依赖于数据 为构建可靠的人工智能模型 需要为算法提供结构良好且标注良好的数据 为了让机器学习算法学习如何完成特定任务 我们必须标注它们用于训练的数据 换句话说 标注数据很简单 但并不总是那么容易 幸运的是 我们将通过
  • 第一届世界区块链大会·三点钟峰会(W.B.C)在澳门开幕 万人峰会大咖云集明星嘉年华

    2018年4月23日晚 以 技术重构世界 为主题的第一届世界区块链大会 三点钟峰会 W B C 在中国澳门威尼斯人大酒店隆重开幕 为期三天 大会由世界区块链联合协会首倡 世界区块链大会组委会 三点钟 深创学院主办 深圳大学区块链研究院 银河
  • 解决org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.spring

    从svn上取下来的之前一直在开发的项目 因为项目我是中途接手的 所以同步下来 配置好tomcat 运行的时候报错 Cannot find class com lhzxt dhub MyExceptionHandler for bean wi
  • JavaScript基础(Dom操作)

    目录 一 BOM模型 1 1 BOM可实现功能 二 Window对象的常用属性 2 1 Window对象的常用方法 2 1 1 open 和close 方法 三 History对象 四 Location对象 五 Document对象的常用方
  • tab页过多,展现按钮可左右移动tab页

    1 结果如下图 tab太多 一行放不下 右侧展现左右按钮 鼠标移上tab页可左右移动 2 代码 功能按钮过多时 可左右移动 param id 按钮区域id param dom 按钮元素 param btnclass 按钮样式 param m