前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一道二栏布局题目

一道二栏布局题目

作者头像
meteoric
发布2019-02-25 16:48:57
3080
发布2019-02-25 16:48:57
举报
文章被收录于专栏:游戏杂谈游戏杂谈游戏杂谈

这是2008年阿里巴巴前端开发工程师一道布局题。

image
image

现在的要求是C必须先于A、B节点之前,如何实现?

类似于下面的结构:

<div id="wrapper">     <div>C</div>     <div>A</div>     <div>B</div> </div>

请思考……..

我的解答:

<!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="" />
  <meta http-equiv='content-type' content='text/html;charset=utf-8' />
  <style type='text/css'>
	* {margin:0; padding:0;}
	body {background-color:#fff;}

	#wrapper {width:400px;margin:100px; border:1px solid #ff0000;}
	#wrapper:after {content:"."; height:0; line-height:0; visibility:hidden; overflow:hidden; display:block; clear:both;}
	
	#content,#secondPrimary,#extra{background-color:#CDD8DA; text-align:center; position:relative;}
	
	#primary {width:100%; float:right; margin-left:-200px;}
	#content {margin-left:210px; height:500px; line-height:500px;}
	#secondPrimary {float:left; width:200px; height:300px; line-height:300px;}
	#extra {clear:float; float:left;  height:190px; width:200px; margin-top:10px; line-height:190px;}
	
	.current {background-color:#DDF8C0; position:absolute; top:0; left:0;}
  </style>
 </head>

 <body>

<div id="wrapper">
	<div id="primary">
		<div id='content'>
			<div>C</div>
		</div>
	</div>

	<div id="secondPrimary">
		<div>A</div>
	</div>
	<div id="extra">
		<div>B</div>
	</div>
</div>


<script type="text/javascript">
	function $(id) {
		return typeof id === 'string' ? document.getElementById(id) : id;
	}
	
	var Event = {
		
		add : function(el, handler, fn) {
			handler = handler.replace(/^on/, "").toLowerCase();
			
			if(el.attachEvent) {
				el.attachEvent("on" + handler, fn);
			} else {
				el.addEventListener(handler, fn, false);
			}

			return el;
		},
		remove : function(el, handler, fn) {
			handler = handler.replace(/^on/, "").toLowerCase();
			
			if(el.detachEvent) {
				el.detachEvent("on" + handler, fn);
			} else {
				el.removeEventListener(handler, fn, false);
			}

			return el;
		},
		removeAll : function() {
			
		}
	};

	var Dom = {
		getParent : function(node) {
			if(!node) {
				return null;
			}

			var parent = !!node.parentNode && node.parentNode.nodeType == 1 ? node.parentNode : null;

			if(!parent) {
				while (parent) {
					parent = parent.parentNode;

					if(!!parent && parent.nodeType == 1) {
						break;
					}
				}
			}

			return parent;
		},
		getFirstChild : function(node) {
			if (!node) {
				return null;
			}
			var child = !!node.firstChild && node.firstChild.nodeType == 1 ? node.firstChild : null;

			return child || this.getNextSibling(node.firstChild);
		},
		getNextSibling : function(node) {
			if(!node) {
				return null;
			}

			while (node) {
				node = node.nextSibling;

				if(!!node && node.nodeType == 1) {
					return node;
				}
			}

			return null;
		},
		/**
		* 判断指定的节点是否是第二个节点的祖先
		*/
		isAncestor : function(node1, node2) {
			if(!node1 || !node2) {
				return false;
			}

			return node1.contains ? (node1 != node2 && node1.contains(node2)) : !!(node1.compareDocumentPosition(node2) & 16);
		}
	}
	
	function zoomIn(ev, rate) {
		
		if (!this._w) {
			this._w = this._w || this.offsetWidth;
			this._h = this._h || this.offsetHeight;
		}	

		this.style.zIndex = 1;
		
		var child = Dom.getFirstChild(this);
		child.className = "current";

		child.style.width = this.offsetWidth * rate + "px";
		child.style.height = this.offsetHeight * rate + "px";
		child.style.lineHeight = this.offsetHeight * rate + "px";
	}

	function zoomOut(ev, rate) {
		this.style.zIndex = 0;

		var child = Dom.getFirstChild(this);
		child.className = "";

		child.style.width = '100%';
		child.style.height = '100%';
		child.style.lineHeight = this._h + 'px';
	}

	!(function() {
		var a = $("content"), b = $("secondPrimary"), c = $("extra");

		var arr = [a, b, c], tempEl = null, zoomRate = 1.2;

		for (var i = 0,len = arr.length; i<len;i++) {
			tempEl = arr[i];
			
			//绑定mouseover事件
			Event.add(tempEl, 'mouseover', function(el, rate) {
				return function() {
					var args = Array.prototype.slice.call(arguments).concat([rate]);

					return zoomIn.apply(el, args);
				}
			}(tempEl, zoomRate));
			
			//绑定mouseout事件
			Event.add(tempEl, 'mouseout', function(el, rate) {
				return function() {
					var args = Array.prototype.slice.call(arguments).concat([rate]);

					return zoomOut.apply(el, args);
				}
			}(tempEl, zoomRate));
		}
		
		a = b = c = arr = tempEl = zoomRate = null;
	})();
	
</script>

 </body>
</html>

运行实例,查看效果:

<!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="" /> <meta http-equiv='content-type' content='text/html;charset=utf-8' /> <style type='text/css'> * {margin:0; padding:0;} body {background-color:#fff;} #wrapper {width:400px;margin:100px; border:1px solid #ff0000;} #wrapper:after {content:"."; height:0; line-height:0; visibility:hidden; overflow:hidden; display:block; clear:both;} #content,#secondPrimary,#extra{background-color:#CDD8DA; text-align:center; position:relative;} #primary {width:100%; float:right; margin-left:-200px;} #content {margin-left:210px; height:500px; line-height:500px;} #secondPrimary {float:left; width:200px; height:300px; line-height:300px;} #extra {clear:float; float:left; height:190px; width:200px; margin-top:10px; line-height:190px;} .current {background-color:#DDF8C0; position:absolute; top:0; left:0;} </style> </head> <body> <div id="wrapper"> <div id="primary"> <div id='content'> <div>C</div> </div> </div> <div id="secondPrimary"> <div>A</div> </div> <div id="extra"> <div>B</div> </div> </div> </body> </html> 预览代码

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-10-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档