自定义一个jQuery二级菜单插件
自定义jQuery插件需要了解:
- 命名规范:jQuery.插件名-版本.js
- 以工具(全局)函数形式加到jQuery中:
$.extend({函数名:function(){功能代码}});
使用时:$.函数名();
- 以成员(局部)函数形式加到jQuery中:
$.fn.extend({函数名:function(){功能代码}});
使用时:$("选择元素").函数名();
- 以成员形式应返回jQuery对象,便于链式操作。
1.创建关联文件
创建插件名.js文件
创建页面名.css文件
然后引入html中
<!-- 引入创建的名为myPlugin-menu的css -->
<link rel="stylesheet" type="text/css" href="../css/myPlugin-menu.css"/>
<!-- 引入jQuery库,必须在前面,后面的插件文件基于jQuery -->
<script src="../js/jquery-1.11.3.js" type="text/javascript" charset="utf-8"></script>
<!-- 引入创建的名为jquery-myPluginmenu-1.0.js -->
<script src="../js/jquery-myPluginmenu-1.0.js" type="text/javascript" charset="utf-8"></script>
现在先写出所需基本html代码
一个div里面包含一个ul六个li标签
<body>
<div id="menu"> <!-- id设置为menu -->
<ul>
<li>menu1
<div>
<a href="#">menu1</a>
<a href="#">menu2</a>
<a href="#">menu3</a>
<a href="#">menu4</a>
</div>
</li>
<li>menu2
<div>
<a href="#">menu1</a>
<a href="#">menu2</a>
<a href="#">menu3</a>
<a href="#">menu4</a>
</div>
</li>
<li>menu3
<div>
<a href="#">menu1</a>
<a href="#">menu2</a>
<a href="#">menu3</a>
<a href="#">menu4</a>
</div>
</li>
<li>menu4
<div>
<a href="#">menu1</a>
<a href="#">menu2</a>
<a href="#">menu3</a>
<a href="#">menu4</a>
</div>
</li>
<li>menu5
<div>
<a href="#">menu1</a>
<a href="#">menu2</a>
<a href="#">menu3</a>
<a href="#">menu4</a>
</div>
</li>
<li>menu6
<div>
<a href="#">menu1</a>
<a href="#">menu2</a>
<a href="#">menu3</a>
<a href="#">menu4</a>
</div>
</li>
</ul>
</div>
</body>
初始界面如下:

在名为myPlugin-menu的css中写入样式
/* 设置一个类名sunmenu */
/* 找到menu里面的ul */
.sunmenu >ul{
margin: 0px; /* 外边距 */
padding: 0px; /* 内边距 */
list-style: none; /* 列表属性 */
}
/* 找到ul里的li */
.sunmenu >ul >li{
float: left; /* 左浮动 */
display: inline-block; /* 水平居中显示 */
width: 120px; /* 宽度 */
height: 30px; /* 高度 */
line-height: 30px; /* 行高 */
background-color: #333333; /* 背景颜色 */
color: #FFFFFF; /* 字体颜色 */
text-align: center; /* 文本居中 */
margin-right: 2px; /* 右边距 */
}
/* 找到li里的div */
.sunmenu > ul>li>div{
width: 120px; /* 宽度 */
background-color: #999999; /* 背景颜色 */
position: absolute; /* 相对定位 */
}
/* 找到div里的a */
.sunmenu >ul>li>div a:link{
text-decoration: none;/* 文本修饰 去掉下划线 */
}
.astyle{
color: #DDDDDD; /* 字体颜色 */
}
我们需要用js来调用这些样式,让它们隐藏或是显示。
在创建的插件.js中以成员函数的形式来设置插件:
//以成员函数形式设置插件
(function($){
$.fn.extend({
submenu:function(){
//添加样式
this.addClass("sunmenu");
//隐藏div
this.find("ul>li>div").hide();
//当鼠标经过li时
this.find("ul>li").on("mouseover",function(){
//此处的this表示事件源
$(this).find("div").show(); //显示div
//当鼠标离开li时
}).on("mouseout",function(){
$(this).find("div").hide(); //隐藏div
});
//再给a标签添加一个鼠标移入移出事件
$("a").mouseover(function(){
$(this).addClass("astyle");
}).mouseout(function(){
$(this).removeClass("astyle");
})
return this; //为了支持链式操作 要返回当前对象
}
})
})(jQuery);
最后在HTML中运行自定义的插件:
<script type="text/javascript">
$(function(){
$("#menu").submenu();//选择id为menu的元素调用成员函数submenu
})
</script>
运行结果:

当鼠标移入移出时:

如果觉得有用不妨点个赞:D