jquery动态导航插件dynamicNav用法实例分析


Posted in Javascript onSeptember 06, 2015

本文实例讲述了jquery动态导航插件dynamicNav用法。分享给大家供大家参考。具体如下:

这是一款自己写的jquery动态导航插件—dynamicNav,具体思路是:

第一、给所有的li里插入一个span标签,且包含li里面的a标签
第二、复制一份a标签,插入到span里,现在span里有两个a标签
第三、根据传入的参数判断是垂直切换还是水平的,如果是垂直的,将span的宽度改为一个a标签的宽度,这时两个a标签就垂直排列了,这里一定要将li的overflow:hidden;否则会看到2个a标签。如果是水平的,将span的宽度改为2个a标签的宽度,且将li的宽度改为一个a标签的宽度,因为我没有在css中设置li的宽度,它是随a标签的宽度而改变,如果你像将所有导航菜单的宽度设为一样宽,可以在css中给li加上width属性。
第四、就是开始制作动画效果,使用hover事件,处理鼠标经过和离开时的效果。

使用jquery的animate改变span的margin-top(垂直方向)和margin-left(水平方向)就可以了。

运行效果截图如下:

jquery动态导航插件dynamicNav用法实例分析

在线演示地址如下:

具体代码如下:

<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>动态导航插件</title>
<style type="text/css">
<!--
body, td, th {
 font-size: 14px;
 background-color:#FFF
}
h1{border-bottom:1px solid #999; margin:50px 60px;}
/*导航默认样式,可根据实际情况修改*/
* {
 margin:0;
 padding:0
}
.nav {
 width:980px;
 height:30px;
 left:50%;
 margin-left:-490px;
 list-style:none;
 position:relative;
}
.nav li {
 display:inline-block;
 margin:0 3px;
 position:relative;
 overflow:hidden;
 height:30px; /*建议此高度大于等于里面的a标签高度*/
 float:left;
}
.nav li span {
 display:inline-block;
 overflow:hidden
}
.nav li a {
 text-decoration:none;
 outline:none;
 color:#666;
 display:inline-block;
 padding:0 10px; 
 text-align:center;
 background-color: #E1E1E1;
 font-weight:bold;
 height:30px;
 line-height:30px;
}
/*鼠标经过时样式*/
.nav li a.over {
 background-color:#666;
 color:#FFF
}
-->
</style>
<script type=text/javascript src="jquery-1.6.2.min.js"></script>
<script type="text/javascript">
(function($){
  $.fn.dynamicNav=function(options){
  //默认配置
   var defaults = {
   direction:"up", //动画切换方向,总共4种up 、down 、left 、right
   duration:100 //三种预定速度之一的字符串("slow", "normal", or "fast")或表示动画时长的毫秒数值(如:1000)
   }; 
 // 覆盖默认配置
  var opts = $.extend(defaults, options);
  this.each(function(){
   var navList=$(this).find("li"),
   navLink=navList.find("a");
   //在a标签外侧插入span
   navList.wrapInner("<span></span>");
   var span=navLink.parent();
   //判断是否垂直切换
   if(opts.direction=="up" || opts.direction=="down"){
    var v=true;
     }
   //判断是否改变span初始位置及a样式 
   if(opts.direction=="right" || opts.direction=="down"){
    var restSpan=true;
     }
    navLink.each(function(){
    //获取a高度和宽度
    var w=$(this).outerWidth(),
    p=$(this).parent();
    //初始复制现有a标签 
    $(this).clone().appendTo(p).addClass("over");
    //如果是垂直切换
    if(v){ 
     p.css("width",w);   
     }else{
     p.css("width",2*w).parent().css("width",w); 
     }
     });
   //如果向右或向下切换,改变span初始位置及a样式
   if(restSpan){
   span.each(function(){
     if(opts.direction=="right"){
     $(this).css({"margin-left":-$(this).outerWidth()/2});
     }
    if(opts.direction=="down"){
     $(this).css({"margin-top" : -$(this).outerHeight()/2});
     }
    $(this)
    .find('a')
    .last()
    .removeClass("over")
    .prev()
    .addClass("over");
    });
     }
   //鼠标经过时动画函数
   function over(o){
    o.animate(v?{"margin-top": -o.outerHeight()/2}:{"margin-left": -o.outerWidth()/2}, opts.duration);
     }
   //鼠标移开时动画函数
   function out(o){
    o.animate(v?{"margin-top":0}:{"margin-left": 0}, opts.duration);
     }
   //鼠标经过和离开 
   span.hover(function(){
     restSpan ? out($(this)) : over($(this));
      },function(){
      restSpan ? over($(this)) : out($(this));
      });
   });
  };
 })(jQuery);
 $(function(){
  //向左 
  $("#nav1").dynamicNav({
    direction:"left", //动画切换方向,总共4种up 、down 、left 、right
    duration:300 //三种预定速度之一的字符串("slow", "normal", or "fast")或表示动画时长的毫秒数值(如:1000)
    });
  //向右 
  $("#nav2").dynamicNav({
    direction:"right", 
    duration:200 
    });
  //向上
  $("#nav3").dynamicNav({
    direction:"up", 
    duration:100 
    });
  //向下 
  $("#nav4").dynamicNav({
    direction:"down",
    duration:400
    });
  });
</script>
</head>
<body>
<h1>向左(速度300毫秒)</h1>
<ul class="nav" id="nav1">
 <li><a href="#">首页</a></li>
 <li><a href="#">前端技术</a></li>
 <li><a href="#">视觉设计</a></li>
 <li><a href="#">文章归档</a></li>
 <li><a href="#">工具/书籍</a></li>
 <li><a href="#">关于我</a></li>
</ul>
<h1>向右(速度200毫秒)</h1>
<ul class="nav" id="nav2">
 <li><a href="#">首页</a></li>
 <li><a href="#">前端技术</a></li>
 <li><a href="#">视觉设计</a></li>
 <li><a href="#">文章归档</a></li>
 <li><a href="#">工具/书籍</a></li>
 <li><a href="#">关于我</a></li>
</ul>
<h1>向上(速度100毫秒)</h1>
<ul class="nav" id="nav3">
 <li><a href="#">首页</a></li>
 <li><a href="#">前端技术</a></li>
 <li><a href="#">视觉设计</a></li>
 <li><a href="#">文章归档</a></li>
 <li><a href="#">工具/书籍</a></li>
 <li><a href="#">关于我</a></li>
</ul>
<h1>向下(速度400毫秒)</h1>
<ul class="nav" id="nav4">
 <li><a href="#">首页</a></li>
 <li><a href="#">前端技术</a></li>
 <li><a href="#">视觉设计</a></li>
 <li><a href="#">文章归档</a></li>
 <li><a href="#">工具/书籍</a></li>
 <li><a href="#">关于我</a></li>
</ul>
</body>
</html>

希望本文所述对大家的jquery程序设计有所帮助。

Javascript 相关文章推荐
event.srcElement 用法笔记e.target
Dec 18 Javascript
CSS中position属性之fixed实现div居中
Dec 14 Javascript
值得分享的bootstrap table实例
Sep 22 Javascript
js判断是否为空和typeof的用法(详解)
Oct 07 Javascript
AngularJS入门教程之数据绑定用法示例
Nov 01 Javascript
Angular 常用指令实例总结整理
Dec 13 Javascript
微信小程序开发(一) 微信登录流程详解
Jan 11 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
Feb 23 Javascript
浅谈Vuex的状态管理(全家桶)
Nov 04 Javascript
基于input动态模糊查询的实现方法
Dec 12 Javascript
layui 数据表格复选框实现单选功能的例子
Sep 19 Javascript
vue+vant 上传图片需要注意的地方
Jan 03 Vue.js
jquery实现可自动收缩的TAB网页选项卡代码
Sep 06 #Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
Sep 06 #Javascript
js实现简洁的TAB滑动门效果代码
Sep 06 #Javascript
js实现左侧网页tab滑动门效果代码
Sep 06 #Javascript
浅谈javascript函数式编程
Sep 06 #Javascript
JS简单实现多级Select联动菜单效果代码
Sep 06 #Javascript
Javascript实现快速排序(Quicksort)的算法详解
Sep 06 #Javascript
You might like
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
据说是雅虎的一份PHP面试题附答案
2009/01/07 PHP
PHP实现异步调用方法研究与分享
2011/10/27 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
读jQuery之五(取DOM元素)
2011/06/20 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
详解webpack自定义loader初探
2018/08/29 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
python时间整形转标准格式的示例分享
2014/02/14 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
Python devel安装失败问题解决方案
2020/06/09 Python
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
银行会计业务的个人自我评价
2013/11/02 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
群众路线专项整治方案
2014/10/27 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
党支部先进事迹材料
2014/12/24 职场文书
入党自传范文2015
2015/06/26 职场文书
高中军训感想
2015/08/07 职场文书
导游词之湖北梁子湖
2019/11/07 职场文书