与jQuery熔岩灯风格菜单导航

与jQuery熔岩灯风格菜单导航382
步骤1创建标记
我们可以创建这个整洁的功能之前,我们需要一个工作的基地。
在您最喜欢的代码编辑器,创建一个无序列表为你导航,通过谷歌引用jQuery和jQuery UI。
<!DOCTYPE html>
 
<html lang="en">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <title>SpasticNav  Plugin</title>
 <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" />
</head>
<body>
 
<div id="container">
 
 <ul id="nav">
  <li id="selected"><a href="#">Home</a></li>
  <li><a href="#">About</a></li>
  <li><a href="#">Blog</a></li>
  <li><a href="#">More About My Portfolio</a></li>
  <li><a href="#">Contact</a></li>
 </ul>
 
</div>
 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript"></script>
 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
 
</body>
</html>

请注意我们给一个id“选择”的主页。这是相当标准的在大多数网站;它允许使用目标当前页面,并相应地风格特别的列表项。 接下来,我们必须决定如何最好地实现熔岩灯功能。允许的可重用性,我们将这个小脚本打包成一个插件,并称之为:
$('#nav').spasticNav();
自从我们决定建立一个插件,让我们继续,创建一个新文件,脚本,并参考我们的标记。我们将称之为jquery.spasticNav.js。
<script type="text/javascript" src="js/jquery.spasticNav.js"></script>
 
<script type="text/javascript">
$('#nav').spasticNav();
</script>

步骤2开始插件 减少全局变量的数量,我们必须创建和删除任何可能性的美元符号与其他JavaScript库冲突,让我们用插件self-uting匿名函数。
(function($) {
 
})(jQuery);

现在,jQuery将传递给我们的插件,并将通过美元符号代表。 接下来,它通常是一个最佳实践给插件的用户尽可能多的灵活性。因此,我们给他们的选择调用时传递一个object-literal插件覆盖几个设置。在我看来,他们应该能够: 为我们的小斑点的重叠量。这是指多少blob将超过导航菜单的高度。 设定的速度 设置重置,这导致blob回到当前页面项(假设用户没有点击链接) 设置颜色的斑点。这可以用CSS来完成,但它是一个不错的方便,尽管如此。 设置宽松的选择。 现在,我们的名字我们的插件,使它等于一个函数。$.fn jquery.prototype只是一个别名。
$.fn.spasticNav = function(options) {
};

知道我们会允许这些覆盖,我们必须确保我们接受一个“选项”参数。 步骤3配置选项 既然我们已经叫我们的插件,下一步是创建配置选项。
options = $.extend({
 overlap : 20,
 speed : 500,
 reset : 1500,
 color : '#0b2b61',
 easing : 'easeOutExpo'
}, options);

上面,我们选择变量,设置一些默认的属性和值,然后扩展它与任何(如果有的话)时,用户通过调用插件。这样,他们通过将覆盖我们的默认设置的选项。例如,如果,当我调用这个插件,我通过:
$('#nav').spasticNav({
   speed : 2000,
   easing : 'easeOutElastic'
});

这两个属性将覆盖默认设置,而剩余的选项将保持不变。 步骤4实现的功能 现在,我们准备周期通过每个元素传递给这个插件,并实现熔岩灯功能。记住,我们不能假设用户是单个元素传递给这个插件。如果他们想要,他们可以引用一个类,它是指多个项目,应该接受这个功能。因此,我们称之为。每个迭代中的每一项包装集。
return this.each(function() {
 
});

在这个函数中,我们将创建一些变量。不是所有的人会立即有值,但由于JavaScript引擎将起重机所有变量名称的函数无论如何(幕后),通常顶部声明它们的最佳实践,然后初始化它们。
var nav = $(this),
currentPageItem = $('#selected', nav),
blob,
reset;

导航:“缓存”,包裹在jQuery对象。 currentPageItem:包含一个id的列表项选中。我们将第二个参数传递给设置上下文搜索。这样,我们不需要遍历整个dom找到这个元素。 团:因为缺乏一个更好的词,这个变量将引用萤光笔,跟随我们的鼠标悬停在菜单。 重置:这将存储setTimeout函数将创建后的引用。这是需要为了clearTimeout打电话。在这不久… 现在我们宣布/初始化变量,让我们创建实际的blob,可以这么说。
$('<li id="blob"></li>').css({
 width : currentPageItem.outerWidth(),
 height : currentPageItem.outerHeight() + options.overlap,
 left : currentPageItem.position().left,
 top : currentPageItem.position().top - options.overlap / 2,
 backgroundColor : options.color
}).appendTo(this);

为什么我们调用CSS的方法,而不是简单地添加一个类,因为这些值取决于当前页面的列表项。因此,我们必须使用JavaScript来检索值。 宽度:获取currentPageItem的宽度,包括任何边框和填充。 高度:获取currentPageItem的高度,包括任何边框和填充。同时,添加大量的重叠,使blob之外的扩展菜单。 左:集的左财产blob等于左边currentPageItem的位置。(我们必须设置一个定位背景CSS这个值生效。) 上图:设置最高价值,和垂直中心blob。 backgroundColor:设置背景颜色。 最后,我们添加这个新的列表项,或#导航。 接下来,我们需要存储引用# blob。这样,我们不需要搜索DOM每次我们希望访问它。我们宣布blob变量的函数。现在,让我们来初始化它。
blob = $('#blob', nav);
步骤5悬停事件 我们现在必须“听”,当用户将鼠标悬停于一个列表项(当然不包括blob)在我们的导航菜单。当他们这样做,我们将设置宽度和左属性的blob相当于当前列表项徘徊。
$('li:not(#blob)', nav).hover(function() {
 // mouse over
 clearTimeout(reset);
 blob.animate(
  {
   left : $(this).position().left,
   width : $(this).width()
  },
  {
   duration : options.speed,
   easing : options.easing,
   queue : false
  }
 );
}, function() {
 // mouse out
 reset = setTimeout(function() {
  blob.animate({
   width : currentPageItem.outerWidth(),
   left : currentPageItem.position().left
  }, options.speed)
 }, options.reset);
 
});

总结上面的脚本… 得到所有列表项,而不是# blob -在导航菜单中,当鼠标在其上悬停时,运行一个函数。 动画的blob,并设置其左和宽度值等于徘徊的列表项。 通过动画的对象字面作为第二个参数,并设置时间和宽松等于我们在配置选项。队列设置为false,以防止动画积聚。 setTimeOut鼠标时,调用,这将推动blob回到当前页面项。如果我们不这样做,和用户没有点击导航链接,菜单会显示他们 一个完全不同的页面。后一秒左右,这将推动blob currentPageItem。 这是所有有它!这是一个超级简单的插件。下一步是风格我们的导航菜单。 步骤6样式的菜单 让我们首先风格“导航”ul。打开你的风格。css文件,并添加:
#nav {
 position: relative;
 background: #292929;
 float: left;
}

接下来,我们将每个列表项风格。
#nav li {
 float: left;
 list-style: none;
 border-right: 1px solid #4a4a4a;
 border-left: 1px solid black;
}
沿着,我们接下来必须风格锚标签在我们的导航菜单。
#nav li a {
 color: #e3e3e3;
 position: relative;
 z-index: 2;
 float: left;
 font-size: 30px;
 font-family: helvetica, arial, sans-serif;
 text-decoration: none;
 padding: 30px 45px;
}

我们设置一个颜色,漂浮到左边,设置一些字体值,和一个健康的填充量。注意的z - index属性。这是必要的,将很快被解释。但是,记住,为了调整z - index,我们必须设定一个定位的背景下,我们所做的一切。
ul, li {
 margin: 0; padding: 0;
}
最后一步是风格blob本身!
#blob {
 border-right: 1px solid #0059ec;
 border-left: 1px solid #0059ec;
 position: absolute;
 top: 0;
 z-index : 1;
 background: #0b2b61;
 background: -moz-linear-gradient(top, #0b2b61, #1153c0);
 background: -webkit-gradient(linear, left top, left bottom, from(#0b2b61), to(#1153c0));
 -moz-border-radius: 4px;
 -webkit-border-radius: 4px;
 -moz-box-shadow: 2px 3px 10px #011331;
 -webkit-box-shadow: 2px 3px 10px #011331;
}

再一次,我们为边界,设置一些漂亮的颜色和添加一些背景颜色(包括CSS3渐变阴影边界/ Firefox和Safari和Chrome)。再一次,我们看到,z - index属性。 没有这个,上面的blob将显示所有的导航菜单中的文本。为了应对这一问题,我们必须确保它的z - index属性低于列表项的!我们还必须设置位置绝对是为了调整其顶部和左值与我们的插件。

也许你还喜欢