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 相关文章推荐
自制基于jQuery的智能提示插件一枚
Feb 18 Javascript
Three.js源码阅读笔记(Object3D类)
Dec 27 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
Oct 17 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
Aug 25 Javascript
jquery中validate与form插件提交的方式小结
Mar 26 Javascript
js实现移动端微信页面禁止字体放大
Feb 16 Javascript
利用forever和pm2部署node.js项目过程
May 10 Javascript
JS实现简单短信验证码界面
Aug 07 Javascript
Canvas放置反弹效果随机图形(实例)
Aug 17 Javascript
JavaScript复制内容到剪贴板的两种常用方法
Feb 27 Javascript
Vue.js进阶知识点总结
Apr 01 Javascript
详解如何使用webpack打包多页jquery项目
Feb 01 jQuery
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在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
浅谈php://filter的妙用
2019/03/05 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
javascript 伪数组实现方法
2010/10/11 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
超全面的javascript中变量命名规则
2017/02/09 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中的Classes和Metaclasses详解
2015/04/02 Python
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
python提取log文件内容并画出图表
2019/07/08 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
django 实现简单的插入视频
2020/04/07 Python
HEMA英国:荷兰原创设计
2018/08/28 全球购物
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
中国央视网签名寄语
2014/01/18 职场文书
出国留学担保书
2014/05/20 职场文书
篮球比赛口号
2014/06/10 职场文书
单位工作证明
2014/10/07 职场文书
小学校长开学致辞
2015/07/29 职场文书
企业年会祝酒词
2015/08/11 职场文书
建议书的格式及范文
2015/09/14 职场文书
HAM-2000摩机图
2021/04/22 无线电
使用Springboot实现健身房管理系统
2021/07/01 Java/Android