`
hrtc
  • 浏览: 55182 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

js+css实现的简易弹出式菜单(第二版模仿ibm开发中心的菜单)

阅读更多

下面是html代码,包括了css和js及测试的html标签,在ie6和ff3下测试通过,附详细注释以及源文件下载

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <style type="text/css">
	body {
		font-size: 14px;
	}

	.hrtc_popupmenu,.hrtc_popupmenu ul {
		margin: 0;
		padding: 0;
		list-style: none;/*取消列表样式*/
	}
	
	/*顶层链接样式*/
	.hrtc_popupmenu a{
		display: block;/*使a链接可以撑满父标签,这样空白处也会响应事件*/
		/*word-break:break-all; 文本过长自动换行*/
		text-decoration: none;
		color: #293D6B;
		background: #C3D3E0;
		text-align:center;
		width: 120px;/*顶层链接宽度*/
		font-weight: bold;
	}

	/*下层链接样式*/
	.hrtc_popupmenu ul li a{
		display: block;/*使a链接可以撑满父标签,这样空白处也会响应事件*/
		/*border:1px solid black;*/
		/*word-break:break-all; 文本过长自动换行*/
		text-decoration: none;
		text-align:left;
		width: 190px;/*下层链接宽度*/
		padding-left: 10px;
	}

	.hrtc_popupmenu a:hover{
		background-color: #98B1C4;
	}

	.hrtc_popupmenu li {
		float:left;/*设为浮动使得第一层菜单可以水平展开*/
		margin: 0;
		padding: 0;
		line-height: 20px;/*为了计算方便不设置padding属性,因此设置了该属性来控制间距*/
		position: relative;
		z-index: 1;
	}

	.hrtc_popupmenu li ul {
		display:none;/*隐藏子菜单*/
		position: absolute;/*设为绝对位置,不会影响父元素布局*/
		z-index: 100;/*最大允许zindex*/
		border:1px solid #98B1C4;
	}

	.hrtc_popupmenu li ul li {
		clear: left;/*下级菜单换行*/
	}
	
	.hrtc_popupmenu li ul li ul{
		top:0px;/*弹出式菜单偏移量*/
	}

  </style>
  <SCRIPT LANGUAGE="JavaScript">
  <!--
	/* 该例子只是为了演示,直接创建了对象*/
	var hrtc_popupmenu = {
		/**
			返回父节点下和某个路径匹配的元素集合
			@pNode 父节点
			@path 例如li>a 和 xpath类似
		*/
		selectNodes:function(pNode,path){
			var nodesRes = [pNode];
			var strs = path.toUpperCase().split(">");

			for(var i = 0;i < strs.length;i++){
				var nodesResT = [];
				for(j = 0;j < nodesRes.length;j++){
					nodesResT = nodesResT.concat(this.searchNodes(nodesRes[j],strs[i]));
				}
				nodesRes = nodesResT;
				if(nodesRes.length == 0){
					break;
				}
			}
			return nodesRes;
		}
		,
		/**
			搜索父节点下和某个标签匹配的元素集合
			@pNode 父节点
			@tagName 标签名
		*/
		searchNodes:function(pNode,tagName){
			var nodesRes = [];
			var nodes = pNode.childNodes;
			for(var i = 0;i < nodes.length;i++){
				if(nodes[i].nodeType == "1"){
					if(tagName == "*" || nodes[i].tagName == tagName){
						nodesRes.push(nodes[i]);
					}
				}
			}
			return nodesRes;
		}
		,
		/**
			返回父节点下第一个和某个路径匹配的元素
			@pNode 父节点
			@path 例如li>a 和 xpath类似
		*/
		selectNode:function(pNode,path){
			var strs = path.toUpperCase().split(">");
			var node = pNode;
			for(var i = 0;i < strs.length;i++){
				node = this.searchNode(node,strs[i]);
				if(!node){
					break;
				}
			}
			return node;

		}
		,
		/**
			搜索父节点下和第一个某个标签匹配的元素
			@pNode 父节点
			@tagName 标签名
		*/
		searchNode:function(pNode,tagName){
			var nodes = pNode.childNodes;
			for(var i = 0;i < nodes.length;i++){
				if(nodes[i].nodeType == "1"){
					if(nodes[i].tagName == tagName){
						return nodes[i];
					}
				}
			}

		}
		,
		doOnMouseOver:function(eleUL){
			eleUL.style.display = "block";
		}
		,
		doOnMouseOut:function(eleUL){
			eleUL.style.display = "none";
		}
		,
		/**
			绑定事件,为了兼容ie和ff
			@obj 要绑定事件的元素名
			@event 事件名
			@handler 处理事件
		*/
		bindEvent:function(obj,event,handler){
			if(document.all){
				obj.attachEvent("on"+event,handler);
			}else{
				obj.addEventListener(event,handler,false);
			}
		}
		,
		/**
			遍历菜单树
			@pNode 结点
			@left 样式,左边偏移位置
		*/
		traver:function(pNode,left){
			//绑定事件和属性
			if(pNode.nodeType == "1" && pNode.tagName == "UL"){
				var nodesUL = this.selectNodes(pNode,"li>ul");
				for(var i = 0;i < nodesUL.length;i++){
					var objLi = nodesUL[i].parentNode;
					//子节点设为absolute后,必须设置父节点为relative,这样子节点会相对于父节点计算坐标,计算方便,直接设置为+(向右展开)/-(向左展开)width
					//objLi.style.position = "relative";
					//这里用到了闭包,因为绑定的必须要是一个函数,并且需要把参数传进去
					this.bindEvent(objLi,"mouseover",function(obj,objUL){return function(){obj.doOnMouseOver(objUL);}}(this,nodesUL[i]));
					this.bindEvent(objLi,"mouseout",function(obj,objUL){return function(){obj.doOnMouseOut(objUL);}}(this,nodesUL[i]));

					var objA = this.selectNode(objLi,"a");
					
					nodesUL[i].style.left = left+"px";

					if(left > 0){
						objA.innerHTML = objA.innerHTML+" >";
					}else{
						objA.innerHTML = "< " + objA.innerHTML;
					}

									
				}
			}
			
			//遍历下层并设置宽度
			var nodes = pNode.childNodes;
			for(var i = 0;i < nodes.length;i++){
				if(nodes[i].nodeType == "1"){
					if(nodes[i].tagName == "UL" || nodes[i].tagName == "LI"){
						//每层菜单的首先出现的li的zIndex必须比后面的大否则会覆盖子层
						if(nodes[i].tagName == "LI"){
							nodes[i].style.zIndex = 100 - i ;
						}
						this.traver(nodes[i],left);
					}
				}
			}
		}
		,
		/**
		*@id 对象名
		*@offset 宽度
		*/
		bindMenu:function(id,offset){
			var menu;
			if(typeof id == "string"){
				menu = document.getElementById(id);
			} else {
				menu = id;
			}
			
			if(!menu || menu.nodeName != "UL"){
				alert("只能绑定UL元素");
				return;
			}

			//遍历第一次水平菜单
			var nodesUL = this.selectNodes(menu,"li>ul");
			for(var i = 0;i < nodesUL.length;i++){
				var objLi = nodesUL[i].parentNode;
				//这里无需设置relative因为是向下弹出菜单,下级菜单样式并非absolute
				//objLi.style.position = "relative";
				this.bindEvent(objLi,"mouseover",function(obj,objUL){return function(){obj.doOnMouseOver(objUL);}}(this,nodesUL[i]));
				this.bindEvent(objLi,"mouseout",function(obj,objUL){return function(){obj.doOnMouseOut(objUL);}}(this,nodesUL[i]));
			}
			
			var nodes = this.selectNodes(menu,"li");
			if (nodes.length > 0){
				//除了最优边的菜单都往右侧弹出,最右边的菜单往左侧弹出
				for(var i = 0;i < nodes.length - 1;i++){
					this.traver(nodes[i],offset);
				}
				
				this.traver(nodes[nodes.length - 1],-offset);
			}

		}
	
	}
	window.onload = function(){
		hrtc_popupmenu.bindMenu("hrtc_popupmenu",190);
	}
	
  //-->
  </SCRIPT>
 </HEAD>

 <BODY>
 <div style="float:left;">
  <ul id="hrtc_popupmenu" class="hrtc_popupmenu">
	<li><a href="#">菜单11</a></li>
	<li><a href="#">菜单12</a>
		<ul>
			<li><a href="#">菜单121</a></li>
			<li>
				<a href="#">菜单122</a>
				<ul>
					<li><a href="#">菜单1221</a></li>
					<li>
						<a href="#">菜单1222</a>
						<ul>
							<li><a href="#">菜单1221</a></li>
							<li><a href="#">菜单1222</a></li>
							<li><a href="#">菜单1223</a></li>
						</ul>
					</li>
					<li><a href="#">菜单1223</a></li>
				</ul>
			</li>
			<li><a href="#">菜单123</a></li>
		</ul>
	</li>
	<li><a href="#">菜单13</a>
		<ul>
			<li><a href="#">菜单12111111111111111</a></li>
			<li>
				<a href="#">菜单122</a>
				<ul>
					<li><a href="#">菜单1221</a></li>
					<li>
						<a href="#">菜单1222</a>
						<ul>
							<li><a href="#">菜单1221</a></li>
							<li><a href="#">菜单1222</a></li>
							<li><a href="#">菜单1223</a></li>
						</ul>
					</li>
					<li><a href="#">菜单1223</a></li>
				</ul>
			</li>
			<li><a href="#">菜单123</a>
				<ul>
					<li><a href="#">菜单121</a>
						<ul>
							<li><a href="#">菜单121</a></li>
							<li>
								<a href="#">菜单122</a>
								<ul>
									<li><a href="#">菜单1221</a></li>
									<li>
										<a href="#">菜单1222</a>
										<ul>
											<li><a href="#">菜单1221</a></li>
											<li><a href="#">菜单1222</a></li>
											<li><a href="#">菜单1223</a></li>
										</ul>
									</li>
									<li><a href="#">菜单1223</a></li>
								</ul>
							</li>
							<li><a href="#">菜单123</a></li>
						</ul>
					</li>
					<li>
						<a href="#">菜单122</a>
						<ul>
							<li><a href="#">菜单1221</a></li>
							<li>
								<a href="#">菜单1222</a>
								<ul>
									<li><a href="#">菜单1221</a></li>
									<li><a href="#">菜单1222</a></li>
									<li><a href="#">菜单1223</a></li>
								</ul>
							</li>
							<li><a href="#">菜单1223</a></li>
						</ul>
					</li>
					<li><a href="#">菜单123</a></li>
				</ul>
			</li>
		</ul>
	</li>
	<li><a href="#">菜单13</a>
		<ul>
			<li><a href="#">菜单121</a></li>
			<li>
				<a href="#">菜单122</a>
				<ul>
					<li><a href="#">菜单1221</a></li>
					<li>
						<a href="#">菜单1222</a>
						<ul>
							<li><a href="#">菜单1221</a></li>
							<li><a href="#">菜单1222</a></li>
							<li><a href="#">菜单1223</a></li>
						</ul>
					</li>
					<li><a href="#">菜单1223</a></li>
				</ul>
			</li>
			<li><a href="#">菜单123</a>
				<ul>
					<li><a href="#">菜单121</a>
						<ul>
							<li><a href="#">菜单121</a></li>
							<li>
								<a href="#">菜单122</a>
								<ul>
									<li><a href="#">菜单1221</a></li>
									<li>
										<a href="#">菜单1222</a>
										<ul>
											<li><a href="#">菜单1221</a></li>
											<li><a href="#">菜单1222</a></li>
											<li><a href="#">菜单1223</a></li>
										</ul>
									</li>
									<li><a href="#">菜单1223</a></li>
								</ul>
							</li>
							<li><a href="#">菜单123</a></li>
						</ul>
					</li>
					<li>
						<a href="#">菜单122</a>
						<ul>
							<li><a href="#">菜单1221</a></li>
							<li>
								<a href="#">菜单1222</a>
								<ul>
									<li><a href="#">菜单1221</a></li>
									<li><a href="#">菜单1222</a></li>
									<li><a href="#">菜单1223</a></li>
								</ul>
							</li>
							<li><a href="#">菜单1223</a></li>
						</ul>
					</li>
					<li><a href="#">菜单123</a></li>
				</ul>
			</li>
		</ul>
	</li>
	<li><a href="#">菜单13</a>
		<ul>
			<li><a href="#">菜单121</a></li>
			<li>
				<a href="#">菜单122</a>
				<ul>
					<li><a href="#">菜单1221</a></li>
					<li>
						<a href="#">菜单1222</a>
						<ul>
							<li><a href="#">菜单1221</a></li>
							<li><a href="#">菜单1222</a></li>
							<li><a href="#">菜单1223</a></li>
						</ul>
					</li>
					<li><a href="#">菜单1223</a></li>
				</ul>
			</li>
			<li><a href="#">菜单123</a>
				<ul>
					<li><a href="#">菜单121</a>
						<ul>
							<li><a href="#">菜单121</a></li>
							<li>
								<a href="#">菜单122</a>
								<ul>
									<li><a href="#">菜单1221</a></li>
									<li>
										<a href="#">菜单1222</a>
										<ul>
											<li><a href="#">菜单1221</a></li>
											<li><a href="#">菜单1222</a></li>
											<li><a href="#">菜单1223</a></li>
										</ul>
									</li>
									<li><a href="#">菜单1223</a></li>
								</ul>
							</li>
							<li><a href="#">菜单123</a></li>
						</ul>
					</li>
					<li>
						<a href="#">菜单122</a>
						<ul>
							<li><a href="#">菜单1221</a></li>
							<li>
								<a href="#">菜单1222</a>
								<ul>
									<li><a href="#">菜单1221</a></li>
									<li><a href="#">菜单1222</a></li>
									<li><a href="#">菜单1223</a></li>
								</ul>
							</li>
							<li><a href="#">菜单1223</a></li>
						</ul>
					</li>
					<li><a href="#">菜单123</a></li>
				</ul>
			</li>
		</ul>
	</li>
	<li><a href="#">菜单14</a>
		<ul>
			<li><a href="#">菜单121</a></li>
			<li>
				<a href="#">菜单122</a>
				<ul>
					<li><a href="#">菜单1221</a></li>
					<li>
						<a href="#">菜单1222</a>
						<ul>
							<li><a href="#">菜单1221</a></li>
							<li><a href="#">菜单1222</a></li>
							<li><a href="#">菜单1223</a></li>
						</ul>
					</li>
					<li><a href="#">菜单1223</a></li>
				</ul>
			</li>
			<li><a href="#">菜单123</a>
				<ul>
					<li><a href="#">菜单121</a>
						<ul>
							<li><a href="#">菜单121</a></li>
							<li>
								<a href="#">菜单122</a>
								<ul>
									<li><a href="#">菜单1221</a></li>
									<li>
										<a href="#">菜单1222</a>
										<ul>
											<li><a href="#">菜单1221</a></li>
											<li><a href="#">菜单1222</a></li>
											<li><a href="#">菜单1223</a></li>
										</ul>
									</li>
									<li><a href="#">菜单1223</a></li>
								</ul>
							</li>
							<li><a href="#">菜单123</a></li>
						</ul>
					</li>
					<li>
						<a href="#">菜单122</a>
						<ul>
							<li><a href="#">菜单1221</a></li>
							<li>
								<a href="#">菜单1222</a>
								<ul>
									<li><a href="#">菜单1221</a></li>
									<li><a href="#">菜单1222</a></li>
									<li><a href="#">菜单1223</a></li>
								</ul>
							</li>
							<li><a href="#">菜单1223</a></li>
						</ul>
					</li>
					<li><a href="#">菜单123</a></li>
				</ul>
			</li>
		</ul>
	</li>
  </ul>
</div>
 </BODY>
</HTML>

 

 

 参考了下面纯css实现的三级菜单,下面的例子有一系列大概六篇文章,不过是偶然搜到的,现在完整的找不到了。谁知道能告诉我下。

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>三级dropdown弹出菜单</title>
<style type="text/css">
/* common styling */
.menu {font-family: arial, sans-serif; width:750px; position:relative; margin:0; font-size:11px; margin:50px 0;}
.menu ul li a, .menu ul li a:visited {display:block; text-decoration:none; color:#000;width:104px; height:20px; text-align:center; color:#fff; border:1px solid #fff; background:#710069; line-height:20px; font-size:11px; overflow:hidden;}
.menu ul {padding:0; margin:0;list-style-type: none; }
.menu ul li {float:left; margin-right:1px; position:relative;}
.menu ul li ul {display: none;}
/* specific to non IE browsers */
.menu ul li:hover a {color:#fff; background:#36f;}
.menu ul li:hover ul {display:block; position:absolute; top:21px; left:0; width:105px;}
.menu ul li:hover ul li a.hide {background:#6a3; color:#fff;}
.menu ul li:hover ul li:hover a.hide {background:#6fc; color:#000;}
.menu ul li:hover ul li ul {display: none;}
.menu ul li:hover ul li a {display:block; background:#ddd; color:#000;}
.menu ul li:hover ul li a:hover {background:#6fc; color:#000;}
.menu ul li:hover ul li:hover ul {display:block; position:absolute; left:105px; top:0;}
.menu ul li:hover ul li:hover ul.left {left:-105px;}
</style>
<!--[if lte IE 6]>
<style type="text/css">
.menu ul li a.hide, .menu ul li a:visited.hide {display:none;}
.menu ul li a:hover ul li a.hide {display:none;}
.menu ul li a:hover {color:#fff; background:#36f;}
.menu ul li a:hover ul {display:block; position:absolute; top:21px; left:0; width:105px;}
.menu ul li a:hover ul li a.sub {background:#6a3; color:#fff;}
.menu ul li a:hover ul li a {display:block; background:#ddd; color:#000;}
.menu ul li a:hover ul li a ul {visibility:hidden;}
.menu ul li a:hover ul li a:hover {background:#6fc; color:#000;}
.menu ul li a:hover ul li a:hover ul {visibility:visible; position:absolute; left:105px; top:0; color:#000;}
.menu ul li a:hover ul li a:hover ul.left {left:-105px;}
</style>
<![endif]-->
</head>
<body>
<div class="menu">
<ul>
<li><a class="hide" href="../menu/index.html">DEMOS</a>
<!--[if lte IE 6]>
<a href="../menu/index.html">DEMOS
<table><tr><td>
<![endif]-->
<ul>
<li><a href="../menu/zero_dollars.html" title="The zero dollar ads page">zero dollars</a></li>
<li><a href="../menu/embed.html" title="Wrapping text around images">wrapping text</a></li>
<li><a href="../menu/form.html" title="Styling forms">styled form</a></li>
<li><a href="../menu/nodots.html" title="Removing active/focus borders">active focus</a></li>
<li><a class="hide" href="../menu/hover_click.html" title="Hover/click with no active/focus borders">HOVER/CLICK &gt;</a>
<!--[if lte IE 6]>
<a class="sub" href="../menu/hover_click.html" title="Hover/click with no active/focus borders">HOVER/CLICK &gt;
<table><tr><td>
<![endif]-->
<ul>
<li><a href="../menu/form.html" title="Styling forms">styled form</a></li>
<li><a href="../menu/nodots.html" title="Removing active/focus borders">active focus</a></li>
<li><a href="../menu/hover_click.html" title="Hover/click with no active/focus borders">hover/click</a></li>
</ul>
<!--[if lte IE 6]>
</td></tr></table>
</a>
<![endif]-->
</li>
<li><a href="../menu/shadow_boxing.html" title="Multi-position drop shadow">shadow boxing</a></li>
<li><a href="../menu/old_master.html" title="Image Map for detailed information">image map</a></li>
<li><a href="../menu/bodies.html" title="fun with background images">fun backgrounds</a></li>
<li><a href="../menu/fade_scroll.html" title="fade-out scrolling">fade scrolling</a></li>
<li><a href="../menu/em_images.html" title="em size images compared">em sized images</a></li>
</ul>
<!--[if lte IE 6]>
</td></tr></table>
</a>
<![endif]-->
</li>
<li><a class="hide" href="index.html">MENUS</a>
<!--[if lte IE 6]>
<a href="index.html">MENUS
<table><tr><td>
<![endif]-->
<ul>
<li><a href="spies.html" title="a coded list of spies">spies menu</a></li>
<li><a href="vertical.html" title="a horizontal vertical menu">vertical menu</a></li>
<li><a href="expand.html" title="an enlarging unordered list">enlarging list</a></li>
<li><a href="enlarge.html" title="an unordered list with link images">link images</a></li>
<li><a href="cross.html" title="non-rectangular links">non-rectangular</a></li>
<li><a href="jigsaw.html" title="jigsaw links">jigsaw links</a></li>
<li><a href="circles.html" title="circular links">circular links</a></li>
</ul>
<!--[if lte IE 6]>
</td></tr></table>
</a>
<![endif]-->
</li>
<li><a class="hide" href="../layouts/index.html">LAYOUTS</a>
<!--[if lte IE 6]>
<a href="../layouts/index.html">LAYOUTS
<table><tr><td>
<![endif]-->
<ul>
<li><a href="../layouts/bodyfix.html" title="Cross browser fixed layout">Fixed 1</a></li>
<li><a href="../layouts/body2.html" title="Cross browser fixed layout">Fixed 2</a></li>
<li><a href="../layouts/body4.html" title="Cross browser fixed layout">Fixed 3</a></li>
<li><a href="../layouts/body5.html" title="Cross browser fixed layout">Fixed 4</a></li>
<li><a href="../layouts/minimum.html" title="A simple minimum width layout">minimum width</a></li>
</ul>
<!--[if lte IE 6]>
</td></tr></table>
</a>
<![endif]-->
</li>
<li><a class="hide" href="../boxes/index.html">BOXES</a>
<!--[if lte IE 6]>
<a href="../boxes/index.html">BOXES
<table><tr><td>
<![endif]-->
<ul>
<li><a href="spies.html" title="a coded list of spies">spies menu</a></li>
<li><a href="vertical.html" title="a horizontal vertical menu">vertical menu</a></li>
<li><a href="expand.html" title="an enlarging unordered list">enlarging list</a></li>
<li><a href="enlarge.html" title="an unordered list with link images">link images</a></li>
<li><a href="cross.html" title="non-rectangular links">non-rectangular</a></li>
<li><a href="jigsaw.html" title="jigsaw links">jigsaw links</a></li>
<li><a href="circles.html" title="circular links">circular links</a></li>
</ul>
<!--[if lte IE 6]>
</td></tr></table>
</a>
<![endif]-->
</li>
<li><a class="hide" href="../mozilla/index.html">MOZILLA</a>
<!--[if lte IE 6]>
<a href="../mozilla/index.html">MOZILLA
<table><tr><td>
<![endif]-->
<ul>
<li><a href="../mozilla/dropdown.html" title="A drop down menu">drop down menu</a></li>
<li><a href="../mozilla/cascade.html" title="A cascading menu">cascading menu</a></li>
<li><a href="../mozilla/content.html" title="Using content:">content:</a></li>
<li><a href="../mozilla/moxbox.html" title=":hover applied to a div">mozzie box</a></li>
<li><a href="../mozilla/rainbow.html" title="I can build a rainbow">rainbow box</a></li>
<li><a href="../mozilla/snooker.html" title="Snooker cue">snooker cue</a></li>
<li><a href="../mozilla/target.html" title="Target Practise">target practise</a></li>
<li><a href="../mozilla/splittext.html" title="Two tone headings">two tone headings</a></li>
<li><a href="../mozilla/shadow_text.html" title="Shadow text">shadow text</a></li>
</ul>
<!--[if lte IE 6]>
</td></tr></table>
</a>
<![endif]-->
</li>
<li><a class="hide" href="../ie/index.html">EXPLORER</a>
<!--[if lte IE 6]>
<a href="../ie/index.html">EXPLORER
<table><tr><td>
<![endif]-->
<ul>
<li><a href="../ie/exampleone.html" title="Example one">example one</a></li>
<li><a href="../ie/weft.html" title="Weft fonts">weft fonts</a></li>
<li><a href="../ie/exampletwo.html" title="Vertical align">vertical align</a></li>
</ul>
<!--[if lte IE 6]>
</td></tr></table>
</a>
<![endif]-->
</li>
<li><a class="hide" href="../opacity/index.html">OPACITY</a>
<!--[if lte IE 6]>
<a href="../opacity/index.html">OPACITY
<table><tr><td>
<![endif]-->
<ul>
<li><a href="../opacity/colours.html" title="colour wheel">opaque colours</a></li>
<li><a href="../opacity/picturemenu.html" title="a menu using opacity">opaque menu</a></li>
<li><a href="../opacity/png.html" title="partial opacity">partial opacity</a></li>
<li><a href="../opacity/png2.html" title="partial opacity II">partial opacity II</a></li>
<li><a class="hide" href="../menu/hover_click.html" title="Hover/click with no active/focus borders">&lt; HOVER/CLICK</a>
<!--[if lte IE 6]>
<a class="sub" href="../menu/hover_click.html" title="Hover/click with no active/focus borders">&lt; HOVER/CLICK
<table><tr><td>
<![endif]-->
<ul class="left">
<li><a href="../menu/form.html" title="Styling forms">styled form</a></li>
<li><a href="../menu/nodots.html" title="Removing active/focus borders">active focus</a></li>
<li><a href="../menu/hover_click.html" title="Hover/click with no active/focus borders">hover/click</a></li>
</ul>
<!--[if lte IE 6]>
</td></tr></table>
</a>
<![endif]-->
</li>
</ul>
<!--[if lte IE 6]>
</td></tr></table>
</a>
<![endif]-->
</li>
</ul>
</div>
</body>
</html>
1
0
分享到:
评论

相关推荐

    C++与Comsol联合仿真的锂电池枝晶生长多物理场耦合模型研究

    内容概要:本文详细介绍了利用C++编程和Comsol软件进行锂电池内部枝晶生长过程的多物理场耦合仿真。首先探讨了枝晶生长对浓度场、电场、温度场以及应力场的敏感性,并展示了相应的数学模型和C++代码实现。接着讨论了采用元胞自动机(CA)和格子玻尔兹曼方法(LBM)来模拟枝晶的非均匀生长特性,特别是通过引入偏心正方算法改进了传统CA模型的方向局限性。此外,文中还涉及了如何将多种物理场(如浓度场、电场、温度场、应力场和流场)耦合在一起,形成完整的多物理场仿真系统。最后,作者分享了一些实用的经验和技术细节,比如参数调整技巧、避免常见错误的方法等。 适合人群:从事锂电池研究的专业人士,尤其是对电池安全性和性能优化感兴趣的科研工作者和技术开发者。 使用场景及目标:适用于希望深入了解锂电池内部枝晶生长机制的研究人员,旨在帮助他们构建更加精确的仿真模型,从而更好地理解和解决枝晶引起的电池安全隐患。 其他说明:文章不仅提供了理论分析,还包括具体的代码实例,便于读者动手实践。同时强调了多物理场耦合的重要性,指出这是提高仿真精度的关键因素之一。

    (源码)基于STM32F10x微控制器的综合驱动库.zip

    # 基于STM32F10x微控制器的综合驱动库 ## 项目简介 本项目是一个基于STM32F10x系列微控制器的综合驱动库,旨在为开发者提供一套全面、易于使用的API,用于快速搭建和配置硬件资源,实现高效、稳定的系统功能。项目包含了STM32F10x系列微控制器的基本驱动和常用外设(如GPIO、SPI、Timer、RTC、ADC、CAN、DMA等)的驱动程序。 ## 项目的主要特性和功能 1. 丰富的外设驱动支持支持GPIO、SPI、Timer、RTC、ADC、CAN、DMA等外设的初始化、配置、读写操作和中断处理。 2. 易于使用的API接口提供统一的API接口,简化外设操作和配置,使开发者能够专注于应用程序逻辑开发。 3. 全面的时钟管理功能支持系统时钟、AHB时钟、APB时钟的生成和配置,以及时钟源的选择和配置。 4. 电源管理功能支持低功耗模式、电源检测和备份寄存器访问,帮助实现节能和延长电池寿命。

    (源码)基于Python和TensorFlow的甲骨文识别系统.zip

    # 基于Python和TensorFlow的甲骨文识别系统 ## 项目简介 本项目是一个基于Python和TensorFlow的甲骨文识别系统,旨在利用深度学习技术,尤其是胶囊网络(Capsule Network)来识别甲骨文图像。项目包括数据集准备、模型构建、训练、测试以及评估等关键步骤。 ## 主要特性和功能 1. 数据准备项目提供了数据集的下载、预处理以及分割为训练集、验证集和测试集的功能。 2. 模型构建实现了基于胶囊网络的甲骨文识别模型,包括基本的CapsNet模型、分布式CapsNet模型以及支持多任务学习的CapsNet模型。 3. 训练与测试提供了训练模型、评估模型性能以及可视化训练过程的功能。 4. 性能评估通过测试集评估模型的识别准确率,并提供了测试结果的详细分析。 ## 安装使用步骤 1. 环境准备安装Python和TensorFlow,以及相关的依赖库。 2. 数据准备 下载MNIST或CIFAR数据集

    (源码)基于C++的Arduino BLE设备交互库.zip

    # 基于C++的Arduino BLE设备交互库 ## 项目简介 本项目是一个用于与BLE(蓝牙低能耗)设备交互的Arduino库。它为使用Arduino平台的开发者提供了与BLE设备通信所需的功能,能让开发者更轻松地将BLE设备集成到自己的项目中。 ## 项目的主要特性和功能 1. 初始化BLE设备调用begin()方法,可初始化BLE设备并启动通信。 2. 扫描和连接设备利用scan()方法扫描附近的BLE设备,通过connect()方法连接特定设备。 3. 读取和写入数据使用read()和write()方法,实现从BLE设备读取数据或向其写入数据。 4. 处理事件通过setEventHandler()方法注册回调函数,处理BLE事件,如连接成功、断开连接等。 5. 控制广播和广告使用advertise()和stopAdvertise()方法,控制BLE设备的广播和广告功能。

    基于ANSYS Fluent的增材制造激光熔覆同轴送粉熔池演变模拟及UDF应用

    内容概要:本文详细探讨了利用ANSYS Fluent对增材制造中激光熔覆同轴送粉技术的熔池演变进行模拟的方法。文中介绍了几个关键技术模块,包括高斯旋转体热源、VOF梯度计算、反冲压力和表面张力的UDF(用户自定义函数)实现。通过这些模块,可以精确模拟激光能量输入、熔池内的多相流行为以及各种物理现象如表面张力和反冲压力的作用。此外,文章展示了如何通过调整参数(如激光功率)来优化制造工艺,并提供了具体的代码示例,帮助读者理解和实现这些复杂的物理过程。 适合人群:从事增材制造领域的研究人员和技术人员,尤其是那些希望深入了解激光熔覆同轴送粉技术背后的物理机制并掌握相应模拟工具的人群。 使用场景及目标:适用于需要对增材制造过程中的熔池演变进行深入研究的情景,旨在提高制造质量和效率。具体目标包括但不限于:理解熔池内部的温度场和流场分布规律,评估不同参数对熔池形态的影响,预测可能出现的问题并提出解决方案。 其他说明:文章不仅提供了详细的理论背景介绍,还包括了大量的代码片段和实例解析,使读者能够在实践中更好地应用所学知识。同时,通过对实际案例的讨论,揭示了增材制造过程中的一些常见挑战及其应对策略。

    COMSOL中三维激光切割热流耦合模型:水平集、流体传热及层流分析的应用与优化

    内容概要:本文详细介绍了在COMSOL中构建三维激光切割过程中涉及的热流耦合模型的方法和技术要点。主要内容涵盖水平集物理场用于追踪材料界面变形、流体传热用于描述熔池流动和热传导的相互作用以及层流分析用于处理熔融金属流动。文中提供了具体的MATLAB代码片段,展示了如何设置材料属性、热源加载、熔融金属流动方程、求解器配置及后处理步骤。此外,还讨论了常见问题及其解决方案,如界面过渡区厚度的选择、热源加载的技术细节、表面张力系数的设置、求解器配置的技巧等。 适合人群:从事激光切割工艺研究、仿真建模的研究人员和工程师,尤其是熟悉COMSOL Multiphysics平台的用户。 使用场景及目标:适用于希望深入了解并优化激光切割过程中的热流耦合仿真的研究人员和工程师。主要目标是提高仿真精度,优化切割参数,改善切割质量和效率。 其他说明:文章不仅提供理论指导,还包括大量实用的操作建议和调试技巧,帮助用户更好地理解和应用COMSOL进行复杂物理现象的模拟。

    (源码)基于PythonDjango和Vue的美多电商平台.zip

    # 基于PythonDjango和Vue的美多电商平台 ## 项目简介 本项目是一个基于PythonDjango和Vue的B2C电商平台,名为美多商城,专注于销售自营商品。系统前台具备商品列表展示、商品详情查看、商品搜索、购物车管理、订单支付、评论功能以及用户中心等核心业务功能系统后台涵盖商品管理、运营管理、用户管理和系统设置等系统管理功能。同时,项目新增了统一异常处理、状态码枚举类等设计,避免使用魔法值,提升了项目的可扩展性和可维护性。 ## 项目的主要特性和功能 ### 前台功能 1. 商品相关提供商品列表展示、商品详情查看以及商品搜索功能,方便用户查找心仪商品。 2. 购物车支持用户添加、管理商品,方便集中结算。 3. 订单支付集成阿里支付,支持订单创建、支付及支付结果处理。 4. 评论用户可对商品进行评价,分享购物体验。 5. 用户中心支持用户注册、登录、密码修改、邮箱验证、地址管理等操作。 ### 后台功能

    目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛

    目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛 目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛~ 目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛 目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛 目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛

    (源码)基于Python和Nonebot框架的HoshinoBot.zip

    # 基于Python和Nonebot框架的HoshinoBot ## 项目简介 HoshinoBot是一个基于Python和Nonebot框架的开源QQ机器人项目,专为公主连结Re:Dive(PCR)和舰队收藏(KanColle)玩家设计。它提供了丰富的功能,旨在增强玩家的游戏体验和社区互动。 ## 项目的主要特性和功能 转蛋模拟支持单抽、十连抽和抽一井功能,模拟游戏中的抽卡体验。 竞技场解法查询提供竞技场解法查询,支持按服务器过滤,并允许用户反馈点赞或点踩。 竞技场结算提醒自动提醒竞技场结算时间,帮助玩家及时参与。 公会战管理提供详细的公会战管理功能,包括成员管理、战斗记录等。 Rank推荐表搬运自动搬运和更新Rank推荐表,帮助玩家选择最佳角色。 常用网址速查提供常用游戏网址的快速查询,方便玩家访问。 官方推特转发自动转发官方推特消息,确保玩家不会错过任何重要更新。 官方四格推送定期推送官方四格漫画,增加玩家的娱乐性。

    图书管理小项目完结(完善新增页面)

    图书管理小项目完结(完善新增页面)

    (源码)基于Arduino的超声波距离测量系统.zip

    # 基于Arduino的超声波距离测量系统 ## 项目简介 本项目是一个基于Arduino平台的超声波距离测量系统。系统包含四个超声波传感器(SPS)模块,用于测量与前方不同方向物体的距离,并通过蜂鸣器(Buzz)模块根据距离范围给出不同的反应。 ## 项目的主要特性和功能 1. 超声波传感器(SPS)模块每个模块包括一个超声波传感器和一个蜂鸣器。传感器用于发送超声波并接收回波,通过计算超声波旅行时间来确定与物体的距离。 2. 蜂鸣器(Buzz)模块根据超声波传感器测量的距离,蜂鸣器会给出不同的反应,如延时发声。 3. 主控制器(Arduino)负责控制和管理所有传感器和蜂鸣器模块,通过串行通信接收和发送数据。 4. 任务管理通过主控制器(Arduino)的 loop() 函数持续执行传感器任务(Task),包括测距、数据处理和蜂鸣器反应。 ## 安装使用步骤 1. 硬件连接

    YTBK2802 基于单片机的幼儿安全监控报警系统设计 20250322

    题目:基于单片机的幼儿安全监控报警系统设计 主控:STM32F103C8T6 显示:OLED ESP32 红外对管 火焰传感器 烟雾传感器 按键 继电器+水泵 蜂鸣器+led小灯 电源 1.实时监控:系统能够实时监控幼儿的活动区域,了解幼儿的活动情况。 2.入侵检测:系统可以设置安全区域,当有陌生人或动物进入该区域时, 系统会立即发出警报。 3.紧急呼叫:幼儿在遇到紧急情况时,可以通过按下紧急呼叫按钮触发声光报警, 通知教师或监护人。 4.远程监控与通知:教师或监护人可以通过手机远程监控幼儿的安全状况 5.火灾报警:当检测到着火点且烟雾浓度高于阈值,启动声光报警并自动打开水泵抽水进行灭火

    毕业设计源码【机器人动力学】基于MATLAB的多自由度机器人运动状态模拟:动力学模型与数值求解方法

    内容概要:该MATLAB函数 `robot_calc.m` 实现了一个12维机器人系统的动力学模型计算,主要用于模拟机器人的运动状态。它基于拉格朗日动力学方程,通过质量矩阵 `M`、科里奥利力/向心力矩阵 `N`、约束矩阵 `C` 和输入矩阵 `E` 描述机器人的运动方程。函数接收当前时间和状态向量作为输入,输出状态导数,包括速度和加速度。控制输入通过外部扭矩 `tau` 模拟,数值求解采用伪逆方法确保稳定性。核心步骤包括参数定义、矩阵计算、动力学方程求解和状态导数输出。; 适合人群:具备一定MATLAB编程基础和机器人动力学理论知识的研究人员、工程师和高校学生。; 使用场景及目标:①机器人控制仿真,测试控制算法(如PID、轨迹跟踪)的表现;②运动规划,模拟机器人在给定扭矩下的运动轨迹;③参数优化,通过调整物理参数优化机器人动态性能。; 其他说明:需要注意的是,当前扭矩 `tau` 是硬编码的,实际应用中应替换为控制器的输出。此外,代码中部分参数单位不一致,需确保单位统一。建议改进方面包括动态输入扭矩、添加可视化功能和参数化管理物理参数。

    基于CPO-Transformer-LSTM的光伏数据分类预测Matlab实现及优化

    内容概要:本文介绍了一种创新的光伏数据分类预测方法,采用CPO(冠豪猪优化算法)、Transformer和LSTM三种技术相结合的方式。首先进行数据预处理,包括数据加载、标准化和构建数据迭代器。然后详细介绍了模型架构,包括Transformer编码器捕捉特征间的关系,LSTM处理时间序列模式,以及CPO用于优化关键参数如隐藏层节点数、学习率等。实验结果显示,该模型在处理突变数据方面表现出色,特别是在光伏功率预测和异常检测任务中,相比传统LSTM模型有显著提升。 适合人群:具有一定机器学习基础的研究人员和技术开发者,尤其是关注光伏预测和时序数据分析的人士。 使用场景及目标:适用于需要处理复杂时序数据的任务,如光伏功率预测、电力负荷预测、故障诊断等。主要目标是提高预测准确性,尤其是在面对突变数据时的表现。 其他说明:文中提供了详细的代码示例和优化技巧,如数据预处理、模型结构调整、早停机制等。此外,还给出了可视化工具和一些实用的避坑指南,帮助初学者更好地理解和应用这一模型。

    基于Matlab的改进人工势场法路径规划算法:斥力函数优化与模拟退火应用

    内容概要:本文详细介绍了如何利用Matlab对传统人工势场法(APF)进行改进,以解决其在路径规划中存在的局部极小值和目标不可达问题。主要改进措施包括重构斥力函数,在靠近目标时使斥力随目标距离衰减,以及引入模拟退火算法用于跳出局部极小值。文中提供了详细的代码示例,展示了传统APF与改进版APF在不同障碍物布局下的表现对比,验证了改进算法的有效性和鲁棒性。 适合人群:具有一定编程基础并熟悉Matlab环境的研究人员、工程师和技术爱好者。 使用场景及目标:适用于需要进行路径规划的机器人导航系统或其他自动化设备,旨在提高路径规划的成功率和效率,特别是在复杂环境中。 其他说明:文章不仅提供了理论解释,还有具体的代码实现和测试案例,帮助读者更好地理解和应用改进后的APF算法。同时,附带的场力可视化工具使得势场分布更加直观易懂。

    Simulink模型自动化转换为PDF文档的全流程脚本工具

    内容概要:本文介绍了一款用于将Simulink模型自动转换为PDF文档的脚本工具。该工具能够自动化生成文档,提取模型中各模块的注释并转化为PDF中的说明文字,整合来自Excel的数据并生成表格,分模块分层打印模型图片,最终生成结构清晰的PDF文档。通过递归遍历模型结构,确保文档的章节结构与模型层次保持一致。此外,还包括自动检测未注释模块等功能,极大提高了文档生成效率和准确性。 适合人群:从事Simulink模型开发和维护的工程师,尤其是那些需要频繁编写和更新模型文档的人员。 使用场景及目标:适用于需要快速生成高质量模型文档的场合,如项目交付、技术评审等。主要目标是提高文档编写效率,减少手动操作带来的错误,确保文档与模型的一致性。 其他说明:该工具采用MATLAB和Python混合开发,支持Windows和Linux平台,可通过持续集成(CI/CD)管道自动化运行,进一步提升工作效率。

    (源码)基于Python和树莓派的智能语音闹钟.zip

    # 基于Python和树莓派的智能语音闹钟 ## 项目简介 “RaspberryClock”是一个基于树莓派4B的智能语音闹钟项目,使用Python 3.8开发。该项目集成了时间显示、温湿度监测、天气查询、语音提醒以及与图灵机器人对话等功能,旨在为用户提供一个功能丰富且易于使用的智能闹钟解决方案。 ## 项目的主要特性和功能 1. 时间显示实时显示当前时间。 2. 温湿度监测通过DHT11温湿度传感器读取并显示环境温湿度数据。 3. 天气查询通过API查询并显示当前天气信息。 4. 语音提醒支持语音播放和录音功能,用户可以设置语音提醒。 5. 与图灵机器人对话支持语音输入并与图灵机器人进行对话。 6. 用户界面使用Qt库创建友好的用户界面,操作便捷。 ## 安装使用步骤 假设用户已经安装了树莓派和Python环境,以下是项目的安装和使用步骤 1. 下载项目将项目文件下载并解压到树莓派的指定目录。

    (源码)基于PaddleDetection和Docker的深度学习模型部署系统.zip

    # 基于PaddleDetection和Docker的深度学习模型部署系统 ## 项目简介 本项目旨在利用Docker容器技术,将PaddleDetection训练的深度学习模型进行快速部署和推理。通过Docker镜像的制作和发布,用户可以在不安装复杂依赖的情况下,轻松实现模型的推理任务。项目特别适用于需要快速部署深度学习模型的场景,如工业检测、图像识别等。 ## 项目的主要特性和功能 1. 模型训练与推理基于PaddleDetection框架训练深度学习模型,支持PPYOLOE等目标检测模型。 2. Docker容器化部署通过Docker将训练好的模型和运行环境打包成镜像,实现一键化部署。 3. 图像推理支持对本地图像进行推理,并将结果保存到指定目录。 4. 镜像发布与测试支持将Docker镜像发布到阿里云等容器镜像服务,并支持从云端拉取镜像进行测试。 ## 安装使用步骤 ### 1. 安装Docker

    基于PCA-BP的多变量回归预测Matlab代码实现与可视化

    内容概要:本文介绍了一种将PCA(主成分分析)和BP(反向传播)神经网络相结合的多变量回归预测方法,并提供了完整的Matlab代码实现。主要内容包括数据预处理、PCA降维、BP神经网络构建与训练、预测结果可视化以及性能评估。文中详细展示了如何通过PCA降维减少数据维度并计算原始特征的贡献率,同时利用BP神经网络进行回归预测,最终生成预测效果对比图、误差分布直方图等多种图表,并计算了多个评价指标如R²、MAE、RMSE等。 适用人群:适用于具有一定Matlab基础的数据分析师、机器学习爱好者及科研工作者。 使用场景及目标:①用于处理高维数据集,降低维度的同时保留重要特征;②通过BP神经网络实现高效的回归预测任务;③提供详细的代码注释和可视化工具,帮助用户快速理解和应用。 其他说明:代码中包含了多种实用的功能,如自动保存关键参数到Excel、自动生成多种类型的图表等。此外,还给出了常见的错误避免建议和技术细节说明。

Global site tag (gtag.js) - Google Analytics