分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

原生js应用setTimeout实现下拉菜单

发布时间:2023-09-06 01:31责任编辑:苏小强关键词:js下拉菜单

今天实现一个很简单的下拉菜单的小实例,也就是鼠标移入菜单,它的子菜单出现并延迟消失。大概效果如下图:

来看下布局:

<div class="menu" id="menu">主菜单</div><ul class="mList" id="mList"> ???<li>下拉菜单一</li> ???<li>下拉菜单二</li> ???<li>下拉菜单三</li> ???<li>下拉菜单四</li></ul>

关于css代码:

<style> ???ul,li{list-style: none;margin: 0;padding:0;} ???a{text-decoration: none} ???.menu{padding:0 10px;border-radius:5px;background-color:#1E9FFF;color:#fff;width:100px;height:35px;line-height:35px;text-align: center;float:left;margin-right:10px;} ???.mList {overflow: hidden;position:absolute;top:50px;border:1px solid #e5e5e5;border-radius: 5px;background-color: #c6d4ff; display:none;} ???.mList li{float:left;padding:0 10px;margin:5px 0;border-right:1px solid #e5e5e5;} ???.mList li:last-child{border-right:none;}</style>

js如下:

<script> ???window.onload=function(){ ???????var oMenu=document.getElementById("menu"); ???????var omList=document.getElementById("mList"); ???????var timer=null; ???????oMenu.onmouseover=function(){ ???????????show(); ???????}; ???????oMenu.onmouseout=function(){ ??????????hide(); ???????}; ???????omList.onmouseover=function(){ ???????????show(); ???????}; ???????omList.onmouseout=function(){ ???????????hide(); ???????}; ???????//代码合并 ???????function show(){ ???????????clearInterval(timer);//鼠标移入时,先要清除掉定时器 ???????????omList.style.display="block" ???????} ???????function hide(){//鼠标移出时要让子菜单缓缓(先显示1秒)的消失 ???????????timer=setTimeout(function(){ ???????????????omList.style.display="none" ???????????},1000); ???????} ???}</script>

以上例子总结一下三点:

1、首先看布局,主菜单div没有包含子菜单,这样的话不同于被包含的关系,扩展性应该会强一些;

2、鼠标移出事件开启时,并没有让子菜单立刻消失,而是先显示了1秒,方便鼠标移入子菜单;

3、鼠标移入主菜单时,一定要先清除定时器,否则显示效果会受到影响。

好了,就是这样了,不过这是单个菜单的若是多个的话应该也是可以扩展的,大家可以试试看!

原生js应用setTimeout实现下拉菜单

原文地址:http://www.cnblogs.com/web001/p/8067810.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved