原生JavaScript技术,jQuery实现下拉菜单

一,通过原生JavaScript实现


      原理:利用onMouseOver 和 onMouseOut 事件来触发一个自定义的 change() 函数,实现了鼠标悬停时显示下拉菜单,鼠标移出时隐藏下拉菜单的效果。

  • html部分代码

</ul>
			<ul class="right">
			  <li class="list" onMouseOver="change('list_cur','block')" onMouseOut="change('list_cur','none')">
				  <span>个人中心</span>
				  <div id="list_cur">
				     <a href="#">已完成订单</a>
					  <a href="#">未完成订单</a>
					  <a href="#">我的保险</a>
					  <a href="#">账号安全</a>
					  <a href="#">个人信息</a>
					  <a href="#">常用联系人</a>
				  </div>
				</li>
				    <li class="line">|</li>
			    <li><span>使用须知</span></li>
				    <li class="line">|</li>
				<li><span>收藏夹</span></li>
					<li class="line">|</li>
				<li><span>货物快运</span></li>
					<li class="line">|</li>
				<li><span>联系我们</span></li>
			</ul>

      onMouseOver 和 onMouseOut 事件所含不同参数决定了他们各自实现的效果不同

     第一个参数作为选择器,在函数中选中对应元素

     第二个参数作为display属性值,配合选择语句来决定何时显示,何时隐藏下拉菜单

  • 完整js代码

function change(myid,mode){
	document.getElementById(myid).style.display=mode;//修改id=“myid”的元素的display属性为mode,即list_cur对应的总下拉菜单框架的display属性值,后续css代码有说明
	if(mode=='block'){//显示下拉菜单
		//设置下拉菜单所在的边框
		document.getElementById(myid).style.border="1px solid #eee";
		document.getElementById(myid).style.borderTop="none";
		//设置鼠标滑过的li的边框及背景颜色
		document.getElementById(myid).parentNode.style.backgroundColor="#fff";//修改父节点的css样式
		document.getElementById(myid).parentNode.style.border="1px solid #eee";
		document.getElementById(myid).parentNode.style.borderBottom="none";
	}
	else{
		//当不显示下拉列表时,鼠标滑过的li的边框及背景颜色
		document.getElementById(myid).parentNode.style.backgroundColor="";
		document.getElementById(myid).parentNode.style.border="";
	}	
}
  • css部分代码

.right li{
	cursor: pointer;
	border: 1px solid #f7f7f7;
}
.right li span{padding: 0px 9px;}
.right .list{position: relative;}
.right #list_cur{
	width: 80px;
	position: absolute;
	display: none;                   /*原本的下拉菜单元素被隐藏,通过style.display方法改变display为block,使其显示*/      
	left: -1px;
	top: 30px;
	background-color: #FFFFFF;
	border: 1px solid #EEE;
}
.right #list_cur a{
	display: block;                  /*因为a标签元素是行内元素,改变display值使其能向下排列显示*/
	padding: 10px;
	line-height: 28px;
	color: #6C6C6C;
}
.right #list_cur a:hover{
	background: #f5f5f5;
}
  • 部分样图

  

 


二,利用jQuery技术实现下拉菜单

方法一

         原理:通过初始hide()和toggle()方法设置下拉菜单div的样式是否可见

  • html部分代码

<div class="_002">
                <div id="sanjiao1"><img src="image/iconClose.jpg"></div>
                  <span id="_get">我的设备</span>
          </div>
             <div class="list" >
              <a href="#">01</a>
              <a href="#">02</a>
              <a href="#">03</a>
              <a href="#">04</a>
              <a href="#">05</a>
          </div>
  • css部分代码

     .list a{                                         /*链接标记样式,因为<a>标记是行内元素,所以要转换为块元素以换行*/   
        display: block;
	    padding: 10px;
	    line-height: 28px;
	    color: #6C6C6C;
      }
  • js部分代码

$(function(){
           $(".list").hide();                                       //初始化隐藏下拉菜单的样式
            $("#_get").click(function(){                          //通过一个单击事件,使用toggle()设置下拉菜单div的样式是否可见
              $(".list").toggle();    
    });
  • 部分样图

 


方法二

  原理:通过 slideToggle()方法 实现下拉菜单的下滑与收起

相关代码

<!DOCTYPE html>
<html>
<head>
  <title>好友列表</title>
  <style>
    .device {
      cursor: pointer;
    }

    .contacts {
      display: none;
    }
  </style>
  <script src="jQuery.js"></script>
  <script>
    $(document).ready(function() {
      // 监听我的设备的点击事件
      $('.device').on('click', function() {
        // 切换联系人的显示状态
        $('.contacts').slideToggle();                 //菜单是滑下或收起的,而不是突然隐藏或出现
      });
    });
  </script>
</head>
<body>
  <div class="device">我的设备</div>
  <ul class="contacts">
    <li>联系人1</li>
    <li>联系人2</li>
    <li>联系人3</li>
  </ul>

  <!-- 其他模块 -->
  <div>其他模块</div>

</body>
</html>

部分样图

 

       我是小p,希望与大家分享更多的前端开发的知识,如果你有不同或更好的见解,欢迎在我的评论区留言!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下拉树是一种常见的树形选择控件,可以在下拉框中展示树形结构,用户可以通过下拉框选择树形节点。在实现下拉树时,可以使用ejs模板引擎、jQuery库、JavaScript原生HTML Select元素。 首先,在HTML文件中创建一个下拉框,并给该下拉框设置id,如下所示: ```html <select id="tree-select"></select> ``` 接下来,使用ejs模板引擎创建下拉树节点的模板,如下所示: ```ejs <% function renderTree(data) { %> <% for (var i = 0; i < data.length; i++) { %> <option value="<%= data[i].id %>"><%= data[i].name %></option> <% if (data[i].children && data[i].children.length > 0) { %> <% renderTree(data[i].children); %> <% } %> <% } %> <% } %> ``` 该模板使用递归方式,遍历树形结构的每个节点,并将节点渲染成下拉框的一个选项。 接下来,使用jQuery库来获取下拉框,并在下拉框中渲染树形结构。具体实现如下所示: ```javascript $(function() { // 模拟树形结构数据 var treeData = [ { id: 1, name: '节点1', children: [ { id: 2, name: '节点1-1', children: [ { id: 3, name: '节点1-1-1' }, { id: 4, name: '节点1-1-2' } ] }, { id: 5, name: '节点1-2' } ] }, { id: 6, name: '节点2' } ]; // 获取下拉框元素 var $select = $('#tree-select'); // 渲染树形结构到下拉框中 renderTree(treeData, $select); // 定义渲染树形结构的函数 function renderTree(data, $select) { var html = ''; for (var i = 0; i < data.length; i++) { html += '<option value="' + data[i].id + '">' + data[i].name + '</option>'; if (data[i].children && data[i].children.length > 0) { renderTree(data[i].children, $select); } } $select.append(html); } }); ``` 上述代码首先定义了一个模拟的树形结构数据,然后获取下拉框元素,并调用渲染树形结构的函数将树形结构渲染到下拉框中。渲染函数中使用了递归方式来遍历树形结构的每个节点,并将节点渲染成下拉框的一个选项。 最后,将上述代码保存为HTML文件并在浏览器中打开该文件,即可看到渲染出来的下拉树。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值