JS实现带圆弧背景渐变效果的导航菜单代码


Posted in Javascript onOctober 13, 2015

本文实例讲述了JS实现带圆弧背景渐变效果的导航菜单代码。分享给大家供大家参考。具体如下:

这是一款效果个性的JS+CSS导航菜单,鼠标经过时出现有趣弧形背景,实际上,这里用CSS调用了背景,用JavaScript控制了背景的移动,用jQuery实现过类似的功能,整体感觉很不错。

运行效果截图如下:

JS实现带圆弧背景渐变效果的导航菜单代码

在线演示地址如下:

具体代码如下:

<!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>
<title>圆弧背景的导航菜单</title>
<meta http-equiv="content-type" content="text/html;charset=gb2312">
<style type="text/css">
*{margin:0px;padding:0px;font-size:12px;}
.div_menu{ position:absolute;left:100px;top:100px;}
.ul_menu{list-style:none;}
.ul_menu li{float:left;margin-left:1px;border:1px solid #33CCCC;display:block;padding:5px 3px;background:url(images/menu_bg.gif) repeat-x 0px -80px;padding:2px 12px;}
.ul_menu li a{height:40px;width:auto;color:#ffffff;font-size:20px;font-weight:600;text-decoration:none;}
</style>
<script type="text/javascript">
var isIE = (document.all)?true:false;
var $ID = function(id){
 return "string"==typeof id?document.getElementById(id):id;
}
var Class = {
 create:function(){
  return function(){
   this.initilize.apply(this,arguments);
  }
 }
}
var Extend = function(destination, source){
 for(var property in source){
  destination[property] = source[property];
 }
}
var Bind = function(object,fun){
 var args = Array.prototype.slice.call(arguments).slice(2);
 return function(){
  return fun.apply(object,args);
 }
}
var BindAsEventListener = function(object,fun){
 var args = Array.prototype.slice.call(arguments).slice(2);
 return function(event){
  return fun.apply(object,[event||window.event].concat(args));
 }
}
function addEventHandler(oTarget, sEventType, fnHandler) {
 if (oTarget.addEventListener) {
  oTarget.addEventListener(sEventType, fnHandler, false);
 } else if (oTarget.attachEvent) {
  oTarget.attachEvent("on" + sEventType, fnHandler);
 } else {
  oTarget["on" + sEventType] = fnHandler;
 }
};
function removeEventHandler(oTarget, sEventType, fnHandler) {
 if (oTarget.removeEventListener) {
 oTarget.removeEventListener(sEventType, fnHandler, false);
 } else if (oTarget.detachEvent) {
 oTarget.detachEvent("on" + sEventType, fnHandler);
 } else { 
 oTarget["on" + sEventType] = null;
 }
};
</script>
<script type="text/javascript">
var MyMenu = Class.create();
MyMenu.prototype = {
 initilize:function(ul){
  this.lis = ul.getElementsByTagName("li");
  for(var i=0;i<this.lis.length;i++){
   new BgChange(this.lis[i]);
  }
 }
}
var BgChange = Class.create();
BgChange.prototype = {
 initilize:function(li){
  this.li = li;
  this._fnMouseOver = Bind(this,this.MouseOver);
  this._fnMouseOut = Bind(this,this.MouseOut);
  addEventHandler(this.li,"mouseover",this._fnMouseOver);
  addEventHandler(this.li,"mouseout",this._fnMouseOut);
  this.timer = null;
  this.i = -80;
 },
 MouseOver:function(){
  this.Stop();
  this.i+=2;
  if(this.i>=0){
   window.clearTimeout(this.timer);
   this.i = 0;
  }else{
   this.ShowBg();
   this.timer = window.setTimeout(this._fnMouseOver,10);
  }
 },
 MouseOut:function(){
  this.Stop();
  this.i-=2;
  if(this.i<=-80){
   window.clearTimeout(this.timer);
   this.i = -80;
  }else{
   this.ShowBg();
   this.timer = window.setTimeout(this._fnMouseOut,10);
  }
 },
 ShowBg:function(){
  this.li.style.backgroundPosition = "0px " + this.i + "px";
 },
 Stop:function(){
  if(this.timer){
   window.clearTimeout(this.timer);
  }
 }
}
onload = function(){
 new MyMenu($ID("ul_menu"));
}
</script>
</head>
<body>
<div class="div_menu">
 <ul class="ul_menu" id="ul_menu">
 <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>
</div>
</body>
</html>

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

Javascript 相关文章推荐
JavaScript实现维吉尼亚(Vigenere)密码算法实例
Nov 22 Javascript
JavaScript设计模式之建造者模式介绍
Dec 28 Javascript
jQuery源码解读之removeAttr()方法分析
Feb 20 Javascript
浅析Javascript匿名函数与自执行函数
Feb 06 Javascript
Javascript日期格式化format函数的使用方法
Aug 30 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
Jan 23 Javascript
彻底理解js面向对象之继承
Feb 04 Javascript
快速解决处理后台返回json数据格式的问题
Aug 07 Javascript
node错误处理与日志记录的实现
Dec 24 Javascript
微信小程序实现图片压缩
Dec 03 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
Jul 24 Javascript
Vue中watch、computed、updated三者的区别及用法
Jul 27 Javascript
js验证真实姓名与身份证号是否匹配
Oct 13 #Javascript
编写高性能Javascript代码的N条建议
Oct 12 #Javascript
JavaScript 性能优化小结
Oct 12 #Javascript
一个php+js实时显示时间问题
Oct 12 #Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
Oct 12 #Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
Oct 12 #Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
Oct 12 #Javascript
You might like
PHP设计聊天室步步通
2006/10/09 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
iframe 异步加载技术及性能分析
2011/07/19 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
H5实现仿flash效果的实现代码
2017/09/29 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
深入探究Django中的Session与Cookie
2017/07/30 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
python三方库之requests的快速上手
2019/03/04 Python
如何给Python代码进行加密
2020/01/10 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
英国电信商店:BT Shop
2019/12/17 全球购物
设计总监岗位职责
2013/12/07 职场文书
大专毕业自我鉴定
2014/02/04 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
采购部年度工作总结
2015/08/13 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
keepalived + nginx 实现高可用方案
2022/12/24 Servers