jQuery实现的背景动态变化导航菜单效果


Posted in Javascript onAugust 24, 2015

本文实例讲述了jQuery实现的背景动态变化导航菜单效果。分享给大家供大家参考。具体如下:

这里介绍一款使用jQuery插件制作完成的导航菜单,一大特点是,菜单的背景有动态效果,与使用的背景图片完全变换,动态效果是在鼠标悬停时出现,也就是把鼠标放在菜单上的时候,背景即开始滚动起来,看上去漂亮极了,而且兼容性也是相当不错的,推荐给网页设计者使用。

运行效果截图如下:

jQuery实现的背景动态变化导航菜单效果

在线演示地址如下:

具体代码如下:

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jQuery动态背景的导航菜单</title>
<script type="text/javascript" src="jquery-1.6.2.min.js" charset="utf-8"></script>
<script type="text/javascript">
$(document).ready(function(){
 var width = 0;
 $('#menu li').each(function() {
  width += $(this).width()+1;
 });
 var padding = parseInt((($('#menu').width() - width) / $('#menu li a').length)/2);
 var pixLeft = ($('#menu').width() - width)-(padding*$('#menu li a').length*2)
 $('#menu li a').each(function(index) {
  if (index+1 != $('#menu li a').length) {
   $(this).css('padding', '0 '+padding+'px');
   $(this).css('background-position', '-' + $(this).position().left + 'px 0');
  } else {
   padding = padding + (pixLeft/2);
   $(this).css('padding', '0 '+padding+'px');
   $(this).css('background-position', '-' + $(this).position().left + 'px 0');
  }
 });
 $('#menu li a').mouseover(function(){ 
   $(this).stop().animate({ backgroundPosition: '-' + $(this).position().left - 129 + 'px 0'}, 2000)
  .mouseout(function(){
   $(this).stop().animate({ backgroundPosition: '-' + $(this).position().left + 'px 0'}, 2000)
  })
 });
});
(function($) {
 if(!document.defaultView || !document.defaultView.getComputedStyle){ // IE6-IE8
  var oldCurCSS = jQuery.curCSS;
  jQuery.curCSS = function(elem, name, force){
   if(name === 'background-position'){
    name = 'backgroundPosition';
   }
   if(name !== 'backgroundPosition' || !elem.currentStyle || elem.currentStyle[ name ]){
    return oldCurCSS.apply(this, arguments);
   }
   var style = elem.style;
   if ( !force && style && style[ name ] ){
    return style[ name ];
   }
   return oldCurCSS(elem, 'backgroundPositionX', force) +' '+ oldCurCSS(elem, 'backgroundPositionY', force);
  };
 }
 var oldAnim = $.fn.animate;
 $.fn.animate = function(prop){
  if('background-position' in prop){
   prop.backgroundPosition = prop['background-position'];
   delete prop['background-position'];
  }
  if('backgroundPosition' in prop){
   prop.backgroundPosition = '('+ prop.backgroundPosition;
  }
  return oldAnim.apply(this, arguments);
 };
 function toArray(strg){
  strg = strg.replace(/left|top/g,'0px');
  strg = strg.replace(/right|bottom/g,'100%');
  strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");
  var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
  return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];
 }
 $.fx.step. backgroundPosition = function(fx) {
  if (!fx.bgPosReady) {
   var start = $.curCSS(fx.elem,'backgroundPosition');
   if(!start){//FF2 no inline-style fallback
    start = '0px 0px';
   }
   start = toArray(start);
   fx.start = [start[0],start[2]];
   //var end = toArray(fx.options.curAnim.backgroundPosition);
   var end = toArray(fx.options.curAnim == undefined ? fx.end : fx.options.curAnim.backgroundPosition);
   fx.end = [end[0],end[2]];
   fx.unit = [end[1],end[3]];
   fx.bgPosReady = true;
  }
  //return;
  var nowPosX = [];
  nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
  nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];  
  fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1];
 };
})(jQuery);
</script>
<style type="text/css">
html {
 height:100%; 
 min-height:100%;
}
body {
 position:relative;
 margin:0; padding:0;
 font-size:1em;
 font:62.8% Arial, Tahoma, Helvetica, sans-serif;
 min-width:1130px; 
 min-height:100%;
 height:100%; 
 background: #1e1e1d;
 color:#FFFFFF;
}
h1, h2, h3, h4, h5, h6, form, fieldset, dl, ul {margin:0; padding: 0;}
strong, b {font-weight:bold;}
em, i {font-style:italic;}
small {display:block;}
fieldset {border:0;}
img {border:none;}
a {
 color: #FFCC00;
 text-decoration: none;
}
a:hover {
 text-decoration: underline;
}
a:focus
{
 outline-style: none;
}
.go_back {
 position: absolute;
 top: 15px; left: 240px;
 color: #ff0072;
 font-size: 1.6em;
}
#content {
 position: relative;
 top: 100px;
 width:800px; 
 position:relative;
 margin: 0 auto;
}
#menu {
 float: left;
 width: 800px;
 list-style: none;
 line-height: 33px;
 background: url('images/menu_bg1.gif') no-repeat top left;
 border-top: 1px solid #000;
 border-bottom: 1px solid #000;
 margin: 0;
 padding:0;
}
#menu li {
 float: left;
 border-left: 1px solid #000;
}
#menu li a {
 float: left;
 font-size: 1.2em;
 color: #fff;
 border-left: 1px solid #ccc;
 text-decoration: none;
 background: url('images/menu_bg1.gif') no-repeat top left;
}
#menu li a:hover {
 background: url('images/menu_bg_active.gif') no-repeat top left;
}
#menu li:first-child { border: none; }
#menu li:first-child a { border: none; }
</style>
</head>
<body>
<div id="content">
<br />
 <ul id="menu">
  <li><a href="#" title="脚本下载">脚本下载</a></li>
  <li><a href="#" title="网页特效">网页特效</a></li>
  <li><a href="#" title="教程文章">教程文章</a></li>
  <li><a href="#" title="编程类库">编程类库</a></li>
  <li><a href="#" title="最新更新">最新更新</a></li>
 </ul><br />
</div>
</body>
</html>

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

Javascript 相关文章推荐
EXT窗口Window及对话框MessageBox
Jan 27 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
May 06 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
Apr 17 Javascript
node.js解决获取图片真实文件类型的问题
Dec 20 Javascript
JS实现设置ff与ie元素绝对位置的方法
Mar 08 Javascript
实用jquery操作表单元素的简单代码
Jul 04 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
Jul 14 Javascript
使用JavaScript开发跨平台的桌面应用详解
Jul 27 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
May 28 jQuery
详解如何在Vue项目中发送jsonp请求
Oct 25 Javascript
Node.js API详解之 string_decoder用法实例分析
Apr 29 Javascript
vue实现简单的登录弹出框
Oct 26 Javascript
jquery带下拉菜单和焦点图代码分享
Aug 24 #Javascript
javascript中SetInterval与setTimeout的定时器用法
Aug 24 #Javascript
jQuery仿360导航页图标拖动排序效果代码分享
Aug 24 #Javascript
js实现的黑背景灰色二级导航菜单效果代码
Aug 24 #Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
Aug 24 #Javascript
ajax如何实现页面局部跳转与结果返回
Aug 24 #Javascript
jquery实现的蓝色二级导航条效果代码
Aug 24 #Javascript
You might like
PHP.MVC的模板标签系统(二)
2006/09/05 PHP
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
针对初学PHP者的疑难问答(2)
2006/10/09 PHP
php mysql Errcode: 28 终极解决方法
2009/07/01 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
200行自定义python异步非阻塞Web框架
2017/03/15 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
美国知名生活购物网站:Goop
2017/11/03 全球购物
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
一套.net面试题及答案
2016/11/02 面试题
会计实习生工作总结的自我评价
2013/10/07 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL