首页 / 知识
Html实现添加、删除、右键菜单
2023-04-11 16:03:00

如何实现一个右键菜单效果,这在初级前端学习中是一个常见的实例,divcss小编实现代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title></title> <link href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <!--jquery 1.11.3--> <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.js"></script> <style> .tabs{ width:800px; margin:150px auto; } .tab-header { position: relative; height: 40px; line-height: 40px; background: #fafafa; border-bottom: solid 2px #39AEF5; overflow: hidden; }
.tab-left, .tab-right { position: absolute; top: 0; width: 40px; height: 40px; text-align: center; color: #888; background-color: #ffffff; cursor: pointer; z-index: 1000; }
.tab-left { left: 0; border-right: solid 1px #eee; }
.tab-right { right: 0; border-left: solid 1px #eee; }
.tabs-wrap { position: relative; overflow: hidden; margin: 0 40px; } .tabs-wrap ul{ list-style-type: none; height: 40px; margin: 0; padding: 0; font-size: 14px; width: 5000px; } .tabs-wrap ul li { float: left; display: inline-block; } .tabs-wrap ul li a { display: block; border-right: solid 1px #eee; padding: 0 15px; color: #888; }
.tabs-wrap ul li.active a{ background-color: #39AEF5; color: #fff; } .tabs-wrap ul li a:hover{ text-decoration: none; } </style> </head> <body> <div class="tabs" id="tabs"> <!--标签页导航条--> <div class="tab-header"> <!--左边按钮--> <a class="tab-left"> <i class="fa fa-backward"></i> </a> <!--右边按钮--> <a class="tab-right"> <i class="fa fa-forward"></i> </a> <div class="tabs-wrap"> <!--标签页内容--> <ul class="tabs-content"> <li class="active" data-id="0"><a href="#">首页</a></li> </ul> </div> </div> <!--标签页内容--> <div class="tab-panel" id="tab-panel"> <div class="panel-content" data-id="0"> <iframe class="myiframe" name="iframe0" scrolling="auto" width="100%" height="100%" src="view/home.html" frameborder="0"></iframe> </div> </div> </div>
<ul class="dropdown-menu Rightmenu"> <li class="tabUpdate"><a>刷新</a></li> <li class="divider"></li> <li class="tabCloseAll"><a>关闭全部选项卡</a></li> <li class="divider"></li> <li class="tabCloseOther"><a>关闭其他选项卡</a></li> <li class="divider"></li> <li class="tabnextClose"><a>关闭右边其他选项卡</a></li> <li class="divider"></li> <li class="tabprevClose"><a>关闭左边其他选项卡</a></li> </ul> <a class="btn btn-primary btn-lg" data-id="1" style="margin-left: 100px">添加TABS1</a> <a class="btn btn-primary btn-lg" data-id="2" style="">添加TABS2</a> <a class="btn btn-primary btn-lg" data-id="3" style="">添加TABS3</a> <a class="btn btn-primary btn-lg" data-id="4" style="">添加TABS4</a> <a class="btn btn-primary btn-lg" data-id="5" style="">添加TABS5</a> <a class="btn btn-primary btn-lg" data-id="6" style="">添加TABS6</a> <a class="btn btn-primary btn-lg" data-id="7" style="">添加TABS7</a> <a class="btn btn-primary btn-lg" data-id="8" style="">添加TABS8</a> <a class="btn btn-primary btn-lg" data-id="9" style="">添加TABS9</a> <script > //获取全部的tab标签的宽度 function getContentWidth(c){ var w = 0; c.children().each(function(){ w += $(this).outerWidth(true); }); return w; } // 判断tab是否已存在 function tabRepeat(id) { var li = $(".tabs-content li"); var isRepeat = false; $.each( li , function (i,n) { if($(n).attr("data-id") == id){ isRepeat = true; return false; } }); return isRepeat; } //添加tab方法 function addTab(id, title, content) {
var ul = $(".tabs-content"); var panels = $(".tab-panel"); var tab;
// 如果tab标题已存在,就打开当前标签页并返回 if (tabRepeat(id)) { tab = $(".tabs-content li[data-id=" + id + "]"); scrollSelected(tab); } else { //创建tab tab = $( '<li data-id = "' + id + '">' + '<a href="javascript:void(0)">' + title + ' <i class="fa fa-times-circle tab-close"></i></a>' + '</li>' ); //创建tab面板 var tabPanel = $( '<div class="panel-content" data-id="'+ id +'">' + content + '</div>' ); //将tab和tab面板添加到页面 tab.appendTo(ul); tabPanel.appendTo(panels);
//如果标签过多,就滚动标签容器使标签显示 var tabsWidth = getContentWidth(ul); tabsWidth > $(".tabs-wrap").width() && ul.animate({ "margin-left" : $(".tabs-wrap").width() - tabsWidth }); } //选中tab selectTab(tab); } //选中标签页 function selectTab(self){ //所有的tab取消选中 $(".tabs-content li").removeClass("active"); //隐藏所有的面板 $(".panel-content ").hide(); //选中时显示选中的标签页 self.addClass("active"); var id = self.attr("data-id"); $(".panel-content[data-id="+ id + "]").show(); return false; } //选中时移动Tab function scrollSelected(self){ var w= parseInt(self.css("width")); var ul = $(".tabs-content"); var ulLeft = parseInt( ul.css("margin-left")); var wapW = $(".tabs-wrap").width(); var tabsWidth = getContentWidth(ul); var prveall = self.prevAll(); var nextall = self.nextAll(); var prveallwidth = 0; var nextallwidth = 0; var newleft; $.each(prveall,function(i , n){ prveallwidth += parseInt($(n).css("width")) }); $.each(nextall,function(i , n){ nextallwidth += parseInt($(n).css("width")) }); if(prveallwidth + w < wapW){ newleft = 0 }else if( nextallwidth < wapW ){ newleft = wapW - tabsWidth }else{ newleft = -prveallwidth + wapW/2 } if( prveallwidth < -ulLeft || prveallwidth > wapW - w ){ ul.animate({ "margin-left": newleft }) } } //删除标签页 function closeTab(self){ var li = self.parents("li"); var id = li.attr("data-id"); var nextLI = li.next(); var prevLI = li.prev(); var w = li.width(); var ul = $(".tabs-content"); var tabConLeft = parseInt(ul.css("margin-left")); //删除标签和面板 li.remove(); $(".panel-content[data-id="+ id + "]").remove();
//删除标签页时显示其他标签页 if(li.hasClass("active") && nextLI.size() == 0 ){ prevLI.addClass("active"); $(".panel-content[data-id="+ prevLI.attr("data-id") + "]").show(); }else if(li.hasClass("active") && nextLI.size() != 0){ nextLI.addClass("active"); $(".panel-content[data-id="+ nextLI.attr("data-id") + "]").show(); return false }
//需要时滚动标签 tabConLeft < 0 && ul.animate({ "margin-left": tabConLeft + w > 0 ? 0 : tabConLeft + w }); } //绑定点击事件 function bindEvents(self) { self.unbind().bind("click", function (e) { var left = 200; var ul = $(".tabs-content"); var ulLeft = parseInt(ul.css("margin-left")); var tabsWidth = getContentWidth(ul); if ($(e.target).hasClass("tab-left") || $(e.target).parent().hasClass("tab-left")) { ulLeft < 0 && scrollBy(left); } else if ($(e.target).hasClass("tab-right") || $(e.target).parent().hasClass("tab-right")) { ulLeft > $(".tabs-wrap").width() - tabsWidth && scrollBy(-left) } else if($(e.target).hasClass("tab-close")){ closeTab($(e.target)) }else{ var li = $(e.target).closest('li'); if(li.length){ selectTab(li); } return false } }).on('contextmenu','li',function(e){ e.preventDefault(); selectTab($(this)); $(".Rightmenu").css({ display: 'block', left: e.pageX, top: e.pageY }); }); tabRightmenuEven(); } //设置标签滚动 function scrollBy(left){ var ul = $(".tabs-content"); var ulLeft = parseInt(ul.css("margin-left")); var tabsWidth = getContentWidth(ul); var newLeft = ulLeft + left; if(newLeft > 0 ){ newLeft = 0 }else if(newLeft < $(".tabs-wrap").width() - tabsWidth){ newLeft = $(".tabs-wrap").width() - tabsWidth } ul.animate({ "margin-left": newLeft }) } //绑定右键菜单事件 function tabRightmenuEven() { //离开选项卡时,隐藏右键菜单 $(".Rightmenu").on('mouseleave',function(){ $(this).hide(); return false; }); $(".sidebar, .main, .top-navbar").mouseover(function(){ $(".Rightmenu").hide(); }); //刷新 $('.tabUpdate').click(function () { var tabs = $(".tabs-content li"); tabs.each(function (i, n) { if ($(n).hasClass("active")) { var id = $(n).attr("data-id"); //用js调用强制刷新 $(".panel-content[data-id = '"+ id +"'] iframe").attr('src', $(".panel-content[data-id = '"+ id +"'] iframe").attr('src')); } }); $(".Rightmenu").hide(); return false; }); //关闭全部 $(".tabCloseAll").click(function () { var tabs = $(".tabs-content li"); $.each( tabs, function( i , n){ var id = $(n).attr("data-id"); if(id != 0){ $(n).remove(); $(".panel-content[data-id = '"+ id +"']").remove(); }else{ $(n).addClass("active"); $(".panel-content[data-id = '"+ id +"']").show(); } }); $(".Rightmenu").hide(); return false; }); //关闭其他页面 $(".tabCloseOther").click(function () { var tabs = $(".tabs-content li"); tabs.parent().css("margin-left", "0px"); tabs.each(function (i, n) { if (i != 0 && !$(n).hasClass("active")) { var id = $(n).attr("data-id"); $(n).remove(); $(".panel-content[data-id = '"+ id +"']").remove(); } }); $(".Rightmenu").hide(); return false; }); //关闭当前tab之前的所有页面 $(".tabprevClose").click(function () { var tab = $(".tabs-content li.active"); var prevalltab = tab.prevAll(); var ulLeft = parseInt(tab.parent().css("margin-left")); prevalltab.each(function (i, n) { if (i != prevalltab.length-1) { var id = $(n).attr("data-id"); $(n).remove(); $(".panel-content[data-id = '"+ id +"']").remove(); } }); ulLeft < 0 && tab.parent().animate({ "margin-left" : 0 }); $(".Rightmenu").hide(); return false; }); //关闭当前tab之后的所有页面 $(".tabnextClose").click(function () { var tab = $(".tabs-content li.active"); var nextalltab = tab.nextAll(); var ulLeft = parseInt(tab.parent().css("margin-left")); var wapW = $(".tabs-wrap").width(); nextalltab.each(function (i, n) { var id = $(n).attr("data-id"); $(n).remove(); $(".panel-content[data-id = '" + id + "']").remove(); }); var tabs = $(".tabs-content li"); var tabsW = 0; tabs.each(function(z,x){ tabsW += parseInt($(x).css("width")); }); if(ulLeft < 0 ){ tab.parent().animate({ "margin-left" : tabsW < wapW ? 0 : wapW - tabsW }); } $(".Rightmenu").hide(); return false; }); }
</script> <script> $(function(){ $(".btn").click(function(){ var id = $(this).attr("data-id"); var title = $(this).text(); var content = '<iframe class="myiframe" scrolling="auto" width="100%" height="100%" src="view/home.html" frameborder="0"></iframe>'; addTab(id,title,content); bindEvents($(".tab-header")); return false }); }) </script>
</body> </html>
|
最新内容
相关内容
python如何读取列表中元素的位置?
python如何读取列表中元素的位置?,位置,数据,异常,培训,字符串,元素,索引,方法,示例,结果,python读取列表中元素位置的方法:1、使用index()方python终端输出乱码怎么解决?
python终端输出乱码怎么解决?,代码,系统,一致,培训,地方,工作,终端,文件,乱码,声明,在命令行终端上工作时,经常会碰到一个头疼的问题就是中文文本处理用c还是用python
文本处理用c还是用python,位置,培训,包装,对比,字符串,函数,文本,语言,字符,效率,文本处理python与c的对比:如下c++语言:C++语言实现C++中没有python支持r语言吗?
python支持r语言吗?,代码,名称,培训,官网,第一,语言,对象,字符串,方法,后缀,python中可以支持r语言。python提供了一个模块rpy2,可以较好地完python3如何引入模块?
python3如何引入模块?,系统,位置,培训,标准,模块,方法,成员,路径,下面,别名,使用Python进行编程时,有些功能没必须自己实现,可以借助Python现有python使用matplotlib绘图怎么在线
python使用matplotlib绘图怎么在线上标注?,地方,培训,坐标轴,图像,范围,画图,示例,注释,文字描述,以上,python画图常用标注包含,坐标轴的值和python如何replace(替换)多个字符?
python如何replace(替换)多个字符?,培训,字符,字符串,方法,正则,括号,数组,函数,定义,以上,python中使用replace替换多个字符的方法:1、使用repython3中怎么编写类?
python3中怎么编写类?,培训,方式,步骤,关键字,以上,过程,方法,更多,内容,python中创建类的方法:方式一:利用class关键字classChinese(object):python可以编写win程序吗?
python可以编写win程序吗?,培训,程序,文件,内容,文件夹,模块,命令,实际,下面,根据,python可以编写win程序。win程序的格式是exe,下面我们就来python如何导入txt数据库?
python如何导入txt数据库?,数据,时间,代码,培训,数据库,函数,读数,数据表,以上,方法,python将TXT数据导入数据库的方法代码如下:#!/usr/bin/pypython怎么使用文件夹下的脚本?
python怎么使用文件夹下的脚本?,工作,培训,文件夹,脚本,文件,所在,方法,示例,路径,以上,python中使用文件夹下脚本的方法:将当前的工作目录(即python的三角函数在哪?
python的三角函数在哪?,标准,培训,函数,反函数,方法,下面,以上,更多,内容,python中的三角函数在python的标准库math中,math已经包含在你的标