Home > Article > Web Front-end > jquery dynamic navigation plug-in dynamicNav usage example analysis_jquery
The example in this article describes the usage of jquery dynamic navigation plug-in dynamicNav. Share it with everyone for your reference. The details are as follows:
This is a self-written jquery dynamic navigation plug-in—dynamicNav. The specific idea is:
First, insert a span tag into all li and include the a tag in li
Second, copy a copy of the a tag and insert it into the span. Now there are two a tags in the span
Third, determine whether to switch vertically or horizontally based on the parameters passed in. If it is vertical, change the width of span to the width of an a tag. At this time, the two a tags will be arranged vertically. Here you must change the li overflow:hidden; Otherwise you will see 2 a tags. If it is horizontal, change the width of span to the width of 2 a tags, and change the width of li to the width of one a tag, because I did not set the width of li in css, it depends on the width of the a tag. To change, if you want to make all navigation menus the same width, you can add the width attribute to li in css.
The fourth step is to start creating animation effects, using hover events to handle the effects when the mouse passes and leaves.
Just use jquery’s animate to change the margin-top (vertical direction) and margin-left (horizontal direction) of the span.
The screenshot of the running effect is as follows:
The online demo address is as follows:
http://demo.jb51.net/js/2015/jquery-tab-cha-plug-dynamicNav-codes/
The specific code is as follows:
<!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>
I hope this article will be helpful to everyone’s jquery programming design.