左側分類導航菜單,是電商購物導航的最直接的分類形式。
js方面主要以下幾點注意
1、事件有mouseover、mouseleave
onmouseover 事件會在滑鼠指針移動到指定的對象上時發生。
onmouseleave 事件會在滑鼠指針移出到指定的對象時發生。
2、setTimeout、clearTimeout
setTimeout 方法用于在指定的毫秒數後調用函數或計算表達式。setTimeout() 隻執行 code 一次。
clearTimeout 方法可取消由 setTimeout() 方法設定的 timeout。
代碼片段:
滑鼠移動到li元素上和移出元素時執行的動作
css方面主要一下幾點注意
1、position: relative 和 position的使用
2、清楚浮動
3、hover僞類的使用
代碼示範:
如果設定顯示将"navSwitch": "navopen",預設隐藏。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
*{ margin: 0px; padding: 0px; list-style: none; color: #333; }
body{ padding-top: 20px; height: 1000px; }
.cfl{*zoom:1;}
.cfl:after{content:"\0020";display:block;height:0;clear:both;overflow:hidden;visibility:hidden;}
.nav{ position: relative; width: 960px; margin: 0px auto; }
.navswitch{ width: 230px; height: 50px; line-height: 50px; border-bottom: 1px solid #ccc; }
.navswitch a{ position: relative; display: block; height: 100%; font-weight: 700; text-decoration: none; padding-left: 30px; background: #f1f1f1; }
.navswitch a .tri{ position: absolute; right: 20px; top: 22px; z-index: 1; display: block; width: 0px; height: 0px; line-height: 0px; font-size: 0px; border: 8px solid #ffffff; border-color: #ffffff transparent transparent transparent; border-style: solid dashed dashed dashed; display: none; }
.navlist{ position: absolute; left: 0px; top: 51px; width: 230px; height: 650px; background: #f1f1f1; display: none; }
.navlist .item{ position: relative; height: 40px; border-bottom: 1px solid #ccc; }
.navlist .item .tit{ display: block; line-height: 40px; font-size: 16px; text-decoration: none; background: #f1f1f1; padding-left: 30px; }
.navlist .item .tit:hover{ background: #ccc; }
.navlist .item .on{ background: #ccc; }
.navlist .item .tri{ position: absolute; right: -1px; top: 10px; z-index: 2; display: block; width: 0px; height: 0px; line-height: 0px; font-size: 0px; border: 10px solid #f3f3f3; border-color:transparent #f3f3f3 transparent transparent; border-style: dashed solid dashed dashed; display: none; }
.navlist .item .tri i{ position: absolute; left: -4px; top: -8px; display: block; width: 0px; height: 0px; line-height: 0px; font-size: 0px; border: 8px solid #ffffff; border-color:transparent #ffffff transparent transparent; border-style: dashed solid dashed dashed; }
.navlist .item .show{ position: absolute; left: 230px; top: 0px; z-index: 1; width: 535px; border: 3px solid rgba(0,0,0,0.05); padding: 10px 0px 10px 0px; }
.navlist .item .show .lt{ float: left; width: 225px; font-size: 12px; line-height: 20px; }
.navlist .item .show .lt a{ text-decoration: none; }
.navlist .item .show .lt a:hover{ text-decoration: underline; }
.navlist .item .show .lt dl{ padding-left: 16px; margin-bottom: 10px; }
.navlist .item .show .lt dt{ font-weight: 700; font-size: 14px; line-height: 30px; }
.navlist .item .show .rt{ float: right; width: 300px; margin-right: 10px; }
</style>
</head>
<body>
<div class="nav">
<div class="navswitch"><a href="#">商品清單<label class="tri"></label></a></div>
<ul id="showlist" class="navlist">
<li class="item">
<a class="tit" href="#">商品名稱1</a>
<label class="tri" ><i></i></label>
<div class="show cfl" style="display:none;">
<div class="lt">
<dl>
<dt><a href="#">全部分類1</a></dt>
<dd><a href="#">商品一</a></dd>
<dd><a href="#">商品二</a></dd>
<dd><a href="#">商品三</a></dd>
</dl>
<dt>熱門商品1</dt>
<dd><a href="#">熱門商品一</a></dd>
<dd><a href="#">熱門商品二</a></dd>
</div>
<div class="rt">
<a href="#">
<img alt="" src="http://images.cnblogs.com/cnblogs_com/kuikui/354173/r_test1.jpg">
</a>
</li>
<a class="tit" href="#">商品名稱2</a>
<dt><a href="#">全部分類2</a></dt>
<dt>熱門商品2</dt>
<a class="tit" href="#">商品名稱3</a>
<dt><a href="#">全部分類3</a></dt>
<dt>熱門商品3</dt>
<a class="tit" href="#">商品名稱4</a>
<dt><a href="#">全部分類4</a></dt>
<dt>熱門商品4</dt>
<a class="tit" href="#">商品名稱5</a>
<dt><a href="#">全部分類5</a></dt>
<dt>熱門商品5</dt>
<a class="tit" href="#">商品名稱6</a>
<dt><a href="#">全部分類6</a></dt>
<dt>熱門商品6</dt>
<a class="tit" href="#">商品名稱7</a>
<dt><a href="#">全部分類7</a></dt>
<dt>熱門商品7</dt>
<a class="tit" href="#">商品名稱8</a>
<dt><a href="#">全部分類8</a></dt>
<dt>熱門商品8</dt>
<a class="tit" href="#">商品名稱9</a>
<dt><a href="#">全部分類9</a></dt>
<dt>熱門商品9</dt>
<a class="tit" href="#">商品名稱10</a>
<dt><a href="#">全部分類10</a></dt>
<dt>熱門商品10</dt>
<a class="tit" href="#">商品名稱11</a>
<dt><a href="#">全部分類11</a></dt>
<dt>熱門商品11</dt>
<a class="tit" href="#">商品名稱12</a>
<dt><a href="#">全部分類12</a></dt>
<dt>熱門商品12</dt>
<a class="tit" href="#">商品名稱13</a>
<dt><a href="#">全部分類13</a></dt>
<dt>熱門商品13</dt>
<a class="tit" href="#">商品名稱14</a>
<dt>熱門商品14</dt>
</ul>
<script type="text/javascript" src="http://files.cnblogs.com/kuikui/jquery.js"></script>
<script>
var nav = {
init: function(params){
var _this = this;
this.params = $.extend({"delay": 200, "navSwitch": "navoff"},params);
this.showlist = $("#showlist");
this.navswitch = $(".navswitch");
this.isshowlist = false;
this.stopswitch = null;
this.stopswitchup = null;
_this.events();
},
events: function(){
_this.domInitAction();
_this.navSwitchAction();
_this.liAction();
domInitAction: function(){
if(_this.params.navSwitch === "navopen"){
_this.showlist.show();
_this.navswitch.find(".tri").hide();
} else {
_this.showlist.hide();
_this.navswitch.find(".tri").fadeIn();
}
navSwitchAction: function(){
_this.navswitch.hover(function(){
if(_this.params.navSwitch !== "navopen"){
if(!!_this.stopswitch){
clearTimeout(_this.stopswitch);
if(!!_this.stopswitchup){
clearTimeout(_this.stopswitchup);
_this.showlist.fadeIn();
},function(){
_this.stopswitch = setTimeout(function(){
_this.showlist.fadeOut();
},_this.params.delay);
});
liAction: function(){
var _this = this,stopOver = null,stopLeave = null;
_this.showlist.find(".item").live("mouseover",function(){
var $this = $(this), show = _this.showlist.find(".show"), len = show.length;
if(!!stopOver){
clearTimeout(stopOver);
if(!!stopLeave){
clearTimeout(stopLeave);
stopOver = setTimeout(function(){
_this.showlist.find(".show,.tri").hide();
_this.showlist.find(".tit").removeClass("on");
var index = $this.index(),tmpheight = $this.find(".show").height(),topval = 0;
if(index < 5){
topval = index * (-41);
show.css({"top": topval + "px"});
} else if(index > ( len - 5)) {
topval = -tmpheight + (len - 1 -index) * 41 + 20;
} else{
var tmpheight = $this.find(".show").height();
topval = -tmpheight/2 + 10;
$this.find(".show,.tri").show();
$this.find(".tit").addClass("on");
_this.showlist.find(".item").live("mouseleave",function(){
var $this = $(this);
stopLeave = setTimeout(function(){
$this.find(".show,.tri").hide();
$this.find(".tit").removeClass("on");
_this.showlist.hover(function(){
_this.stopswitchup = setTimeout(function(){
};
nav.init({"navSwitch": "navopen"});
</script>
</body>
</html>
運作代碼
預設效果如下:
nav.init();