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 相关文章推荐
一个简单的jquery进度条示例
Apr 28 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
Dec 14 Javascript
JavaScript创建一个object对象并操作对象属性的用法
Mar 23 Javascript
全面解析Bootstrap排版使用方法(文字样式)
Nov 30 Javascript
Validform表单验证总结篇
Oct 31 Javascript
浅谈JavaScript中promise的使用
Jan 11 Javascript
js图片上传的封装代码
Aug 01 Javascript
Vue入门之数据绑定(小结)
Jan 08 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
Sep 03 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
Sep 27 Javascript
vue 实现动态路由的方法
Jul 06 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
Jul 26 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
浅析SVN常见问题及解决方法
2013/06/21 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
php识别翻转iphone拍摄的颠倒图片
2018/05/17 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python xml解析实例详解
2016/11/14 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
Django中的文件的上传的几种方式
2018/07/23 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
百货商场楼层班组长竞聘书
2014/03/31 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
教书育人演讲稿
2014/09/11 职场文书
大学生干部培训心得体会
2016/01/06 职场文书
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL
MySQL创建管理HASH分区
2022/04/13 MySQL