悬停导航栏,悬停搜索栏,像hao123一样

无论是悬停导航栏,还是悬停搜索栏,原理都是一样的,运用CSS的position:fixed,通过滚动条上下滑动时计算导航栏的位置,当滚动条下拉到看不见导航栏时,触发特效代码,将导航栏悬停在顶部位置固定不动;当滚动条上拉到导航栏可见时,再还原原本的位置。

<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>悬停导航栏</title>
</head>
<body>
<style>
body { max-width:1000px; margin:0 auto; font-weight:bold; text-align:center;  }
div { margin:15px auto;  }
#head { height:50px; background-color:#CCCCCC;  }
#nav { background-color:#FF9900; text-align:left;  }
#nav_fixed { background-color:#FF9900; position:fixed; top:0; z-index:9; margin:0;  }
#nav a { height:32px; line-height:32px; color:#FFFFFF; font-weight:bold; padding:0 15px;  }
#body { height:2000px; background-color:#CCCCCC;  }
#foot { height:50px; background-color:#CCCCCC;  }
</style>
<script>
//事件触发器
function addEvent(obj,type,fn){
	if(obj.attachEvent){
		obj.attachEvent('on'+type,function(){
			fn.call(obj);
		})
	}else{
		obj.addEventListener(type,fn,false);
	}
}
(function() {
	//获取元素(导航栏)距离浏览器上沿的高度
	function getOffsetTop(o) { 
		var t = o.offsetTop;
		var p = o.offsetParent;
		while (p != null) {
			t += p.offsetTop;
			p = p.offsetParent;
		}
		return t;
	}
	function fix_nav() {
		var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
		var navW = nav.offsetWidth;
		var navH = nav.offsetHeight;
		//触发悬停
		if (scrollTop > navTop) {
			nav.style.width = navW + 'px';
			nav.style.height = navH + 'px';
			nav.innerHTML = '<!--悬停临时div--><div id="nav_fixed" style="width:' + navW + 'px; height:' + navH + 'px;"><!--//悬停临时div-->' + nav.innerHTML.replace(/<\!--悬停临时div-->.+?<\!--\/\/悬停临时div-->/ig, '') + '<!--悬停临时div--></div><!--//悬停临时div-->';
		}
		//位置还原
		else {
			nav.innerHTML = nav.innerHTML.replace(/<\!--悬停临时div-->.+?<\!--\/\/悬停临时div-->/ig, '');
		}
	}
	addEvent(window, "load",
	function() {
		//导航栏对象,ID自己定
		var nav = document.getElementById('nav'); 
		navTop = getOffsetTop(nav);
		//切换浏览器窗口大小时也要计算触发
		addEvent(window, "resize",
		function() {
			nav.innerHTML = nav.innerHTML.replace(/<\!--悬停临时div-->.+?<\!--\/\/悬停临时div-->/ig, '');
			nav.style.width = '100%';
			nav.style.height = 'auto';
			fix_nav();
		});
		//滚动条滑动时计算触发
		addEvent(window, "scroll", fix_nav);
	});
})();
</script>
<div id="head">head</div>
<div id="nav"><a>首页</a><a>关于我们</a><a>服务项目</a><a>客户展示</a><a>联系电话</a></div>
<div id="body">body</div>
<div id="foot">foot</div>
</html>

应用在我给客户做的网站上:http://www.furuijinzhao.com/

效果绝对自然、特别丝滑哟!

因为IE6不支持position:fixed,所以IE6就别悬停了,就使用正常效果吧;其它IE7以上都测试了no problem。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值