下拉列表的两种实现方式

时间:2024-03-18 09:04:55

写过下拉列表一般都会遇到一个问题就是,鼠标覆盖的时候下拉列表显示,但是当鼠标离开的时候下拉列表也跟着消失了。

思路:两种办法解决以上问题;一种是通过css样式控制,布局要求下拉列表box需要被覆盖的标签包起来,假如你使用 ul li 做的导航栏,用ol li做的下拉列表,那么布局就得如下:

 

<ul>

<li>

<ol><li></li><li></li><li></li></ol> <!—下拉列表的盒子-->

</li>

<li>

<ol><li></li><li></li><li></li></ol> <!—下拉列表的盒子-->

</li>

<li>

<ol><li></li><li></li><li></li></ol> <!—下拉列表的盒子-->

</li>

 

</ul>

 

其中ul为导航项的盒子,li标签就是每一个导航项,ol就是对应下面的那个列表盒子。在css设置的时候可以设置为默认样式为display:none;在hover事件中可以设置为display:block;其中hover可以写到css,也可以写在js事件里面。

另一种布局就是把下拉列表放到导航项外面,就得用jquery方法,布局如下:

<ul>

<li></li><!—导航项-->

<li></li>

<li></li>

<li></li>

<li></li>

</ul>

<div>

<p></p><!—下拉列表的盒子-->

<p></p>

<p></p>

<p></p>

 

</div>

 

这时候我们 就可以通过浮动或者定位把下拉列表放到相应的位置上,这里不再赘述,主要讲一下jquery代码如何实现。

布局如下:

<div>div</div>

<p>

<a>1</a>

<a>2</a>

<a>3</a>

<a>4</a>

</p>

 

样式如下:

<style type="text/css">

div{width: 200px;height: 50px;border: 1px solid #000;margin: 0 auto;text-align: center;line-height: 50px;}

p{

width: 200px;height:320px;margin: 0 auto;text-align: center;line-height: 78px;

display: none;

}

a{

display: block;border: 1px solid red;

}

</style>

 

Jquery如下:

第一种:

<script type="text/javascript">

var tick;

$("div").hover(function () {

clearInterval(tick);//这里非常重要不可省略,目的是为了清除定时器,否则只能执行一次代码效果,以后会受到定时器的干扰。

$("p").show();

}, function () {

tick = setInterval(auto, 500)

})

 

$("p").hover(function () {

clearInterval(tick);

}, function () {

tick = setInterval(auto, 500)

})

 

function auto() {

$("p").hide();

}

 

})

</script>

 

第二种:

<script type="text/javascript">

var tick;

$("div").hover(function () {

$("p").css({"display":"block"});//效果和show一样。

$("p").show();

}, function () {

tick = setTimeout(function () {

$("p").hide();

},500)

})

 

$("p").hover(function () {

$("p").css({"display":"block"});//效果和show一样。

$("p").show();

}, function () {

$("p").hide();

}

</script>

 

总结:推荐用第一种,在布局的时候需要考虑清楚,在css就可以实现效果;布局在外面的两种写法再布局的时候比较简单,不会用到那么多标签,制定样式的时候比较方便,其中第一种定时器总会获取服务器资源,占内存比较大,使用推荐第一种。