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

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

来看下布局:

<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、鼠标移入主菜单时,一定要先清除定时器,否则显示效果会受到影响。

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

时间: 2024-10-10 02:09:51

原生js应用setTimeout实现下拉菜单的相关文章

JS网页特效操作流程——下拉菜单列表与登录注册弹窗效果

下拉菜单列表 <style>        *{            margin: 0px;            padding: 0px;        }        .menu{            width: 1100px;            height: 30px;            background-image: url(img/魅力罗兰Music炫图18.jpg);            margin-left: 200px;            ma

js控制的多级下拉菜单

最近身体不适,所以没能如期的更新,抱歉.这里直接把代码贴上,如果有不明白的地方,留言就行. <!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"> &

原生js实现简单的下拉刷新功能

前言: 我们在浏览移动端web页面的时候,经常会用到下拉刷新. 现在我们用原生的js实现这个非常简单的下拉刷新功能. (温馨提示:本文比较基础,功能也很简单.写的不好的地方,希望大神提点一二.) 一.创建简单的html页面: 假设代码里的float-box是一个主页面. 二.封装下拉刷新的功能模块: (1)首先创建一个Slide构造函数,用来初始化属性与函数. function Slide(dom){ this.start_y=null;//手指滑动屏幕的初始位置 this.end_y=null

js控件,下拉菜单

要求输入框点击出现下拉菜单,并实现以下功能: 1.首先点击地点标签页,选择好地点: 2.自动显示相应节点标签页显示节点信息,选择好节点 3.自动显示相应的连接点,选择连接点,连接点被选中并被传送的输入框input控件中 制作了该控件的jquery插件,格式采用bootstrap的. 调用方法: input控件写成 <input class="form-control dropdown-toggle" data-toggle="dropdown" id=&quo

原生js手机端触摸下拉刷新

废话不多说,直接上代码,这里感谢我的好朋友,豆姐 <!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> <met

js+css实现简单下拉菜单

<head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>css菜单演示</title> <style type="text/css"> <!-- *{margin:0;padding:0;border:0;} body { font-family: arial, 宋体,

js实现按钮开关.单机下拉菜单

通过onclick单击事件,实现效果,代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>开关按钮设置</title> </head> <link rel="stylesheet" href="css/Default style sheet.css" /> <styl

Bootstrap中的下拉菜单

下拉菜单(基本用法) 小伙伴们注意,在Bootstrap框架中的下拉菜单组件是一个独立的组件,根据不同的版本,它对应的文件: ?  LESS版本:对应的源码文件为 dropdowns.less ?  Sass版本:对应的源码文件为 _dropdowns.scss ?  编译后的Bootstrap版本:查看bootstrap.css文件第3004行-第3130行 在使用Bootstrap框架的下拉菜单时,必须调用Bootstrap框架提供的bootstrap.js文件.当然,如果你使用的是未编译版

实现下拉菜单的宽度与登录人ID长度的匹配

{# 通过css添加min-width,通过eval对字符串或表达式进行运算,通过map遍历标签,通过return获得要遍历的内容[固定关键字],#}{# 通过get()获得类数组,通过join进行元素链接. 这个语句:可对标签类进行遍历累加统计,也可对单个ID标签进行统计.#} <!--该JS功能,实现下拉菜单的宽度与登录人ID长度的匹配.--><script> $('.drop-size').css('min-width', eval($('#user_set').map(fu