js模仿下拉菜单制作

简单下拉菜单制作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<style>
<!--简单给一些样式-->
    *{margin: 0;padding: 0;}
    .box {width: 200px;height: 30px;line-height: 30px;margin: 40px auto;}
    .box span {width: 188px;height: 30px; border: 1px solid #ccc;display:block;padding: 0 5px;}
    .box ul {border: 1px solid #ccc;overflow: auto;border-top: none;display: none;}
    .box ul li {padding: 0 5px;}
    .active{background: lightblue;}
</style>
<body>
    <div class="box">
        <span>鼠标</span>
        <ul>
        <!--给一个固定class名 使没有滑动的时候和主框里的内容一样-->
            <li class="active">鼠标</li>
            <li>键盘</li>
            <li>电脑</li>
            <li>音箱</li>
            <li>显示器</li>
            <li>...</li>
        </ul>
    </div>
</body>
<script>
//获取元素
    var aspan = document.querySelector(".box span");
    var aul = document.querySelector(".box ul")
    var ali = document.querySelectorAll(".box ul li");
 //先定义一个索引
    var index = 1;
    //封装一个遍历所有的li  把定义的索引给想要给的li 使其className = “active”
    setActive();
    //让获得索引的li的内容赋值给span
    aspan.innerHTML = ali[index].innerHTML;
    var i=0;
    //给span一个点击事件  获得点击出现ul也就是把下拉菜单属性display:block;
    aspan.onclick = function(eve){
    //解决兼容
        var e = eve || window.event;
        //阻止冒泡
        eve.stopPropagation();
        eve.cancelBubble=true;
        //判断下拉菜单的状态 隐藏和出现
        if(i == 0){
        //执行显示时 执行封装函数
            aul.style.display = "block";
            setActive();
            i=1;
        }else{
            aul.style.display = "none";
            i=0;
        }
    }
    //当点击空白页面时也让下拉菜单消失
    document.onclick = function(){
        aul.style.display = "none";
        i=0;
    }
//遍历li 给li绑定索引
    for(var j = 0;j < ali.length;j++){
        ali[j].index = j;
//取消所有选中 只显示当前选中
        ali[j].onmouseover = function(){
            for(var k = 0;k<ali.length;k++){
                ali[k].className = "";
            }
            this.className = "active";
        }
        
        点击li设置内容给span
        ali[j].onclick = function(){
            aspan.innerHTML = this.innerHTML;
            index = this.index;
        }
    }
    function setActive(){
        for(var k=0;k<ali.length;k++){
            ali[k].className="";
        }
        ali[index].className = "active";
    }
</script>
</html>
发布了11 篇原创文章 · 获赞 12 · 访问量 472

猜你喜欢

转载自blog.csdn.net/weixin_45481771/article/details/100187294