原生js和jquery分别实现横向导航菜单效果


Posted in Javascript onMay 13, 2016

本文实例为大家分享了原生js和jquery横向导航菜单的制作方法,供大家参考,具体内容如下

原生javascript实现:
这一次要实现的是鼠标放上去以后,菜单栏被选中的那一栏水平拉伸,鼠标离开后水平收缩。并带有一定的时间性,使肉眼能够看出其拉伸收缩的动画效果。
开始用javascript进行编写:
首先在之前水平方向的导航栏上进行操作,将第一栏和选中栏的样式只改变为背景变黑色,文字变白色
.on,a:hover{background:#000000;color:#FFFFFF;} 

之后开始写javascript脚本:

<script> 
 window.onload=function(){ 
 var A=document.getElementsByTagName("a"); 
  
 for(var i=0;i<A.length;i++) 
 { 
  A[i].onmouseover=function(){ 
  clearInterval(this.time); 
   var This=this; 
   This.time=setInterval(function(){ 
    
   if(This.offsetWidth>=200) 
    { 
    clearInterval(This.time); 
    } 
   This.style.width=This.offsetWidth+8+"px"; 
     
   },50) 
  } 
   
   A[i].onmouseout=function(){ 
   clearInterval(this.time); 
   var This=this; 
   This.time=setInterval(function(){ 
   if(This.offsetWidth<=120) 
    { 
    This.style.width="120px"; 
    clearInterval(This.time); 
    } 
   This.style.width=This.offsetWidth-8+"px"; 
    
   },50) 
  } 
   
   
  } 
   
 } 
  
 </script>

剖析一下这段代码:
第一层,window.onload,页面加载的时候调用这个函数。
第二层,for循环,用document.getElementsByTagName("a")获得导航栏数组,遍历为其添加第三层的效果。
第三层,一个onmouseover,一个onmouseout,分别实现鼠标覆盖和鼠标离开的效果。
第四层,setInterval和clearInterval方法,参数50ms.
第五层,核心部分,修改this.style.width,每次50ms加减8px,增加判断语句到达边界。
细节部分:采用先加减8px再进行判断,我认为应该倒过来,不必要先处理再判断,会浪费资源。还有就是在第三层开始后必须先清除时间机制,否则会容易出现重叠动画的紊乱状况。
最后实现的动画就是:鼠标放上去某一栏后,120px的菜单栏将每50ms伸长8px,直至到达200px停下;当鼠标离开后,该栏又将以50ms收缩8px的速度恢复到120px.
看一下总代码和效果图:

<!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> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>导航栏</title> 
<style> 
*{margin:0;padding:0;font-size:20px} 
ul{list-style:none;height:50px;border-bottom:#000000 solid;padding-left:30px}  
li{float:left;margin-top:20px;} 
a{text-decoration:none;display:block;height:30px;line-height:30px;width:120px;margin-bottom:1px;background:#FFFFFF;color:#000000;text-align:center} 
.on,a:hover{background:#000000;color:#FFFFFF;} 
</style> 
<script> 
 window.onload=function(){ 
 var A=document.getElementsByTagName("a"); 
  
 for(var i=0;i<A.length;i++) 
 { 
  A[i].onmouseover=function(){ 
  clearInterval(this.time); 
   var This=this; 
   This.time=setInterval(function(){ 
    
   if(This.offsetWidth>=200) 
    { 
    clearInterval(This.time); 
    } 
   This.style.width=This.offsetWidth+8+"px"; 
     
   },50) 
  } 
   
   A[i].onmouseout=function(){ 
   clearInterval(this.time); 
   var This=this; 
   This.time=setInterval(function(){ 
   if(This.offsetWidth<=120) 
    { 
    This.style.width="120px"; 
    clearInterval(This.time); 
    } 
   This.style.width=This.offsetWidth-8+"px"; 
    
   },50) 
  } 
   
   
  } 
   
 } 
  
 </script> 
</head> 
<ul> 
<li> 
<a class="on" href="#">首 页</a> 
</li> 
<li> <a href="#">今日新闻</a></li> 
<li><a href="#">周边故事</a></li> 
<li><a href="#">天气预报</a></li> 
<li><a href="#">好书推荐</a></li> 
</ul> 
</html>

原生js和jquery分别实现横向导航菜单效果

下面用jquery实现同样的效果:
先下载一个jQurey1.2.6,引用到html中去

<script type="text/javascript" src="jquery-1.2.6.js"></script> 
下载地址:Jquery1.2.6下载
[html] view plain copy print?
<script> 
$(function(){ 
 
 $('a').hover( 
  
  function(){ 
   $(this).stop().animate({"width":"200px"},200  );}, 
  function(){ 
   $(this).stop().animate({"width":"120px"},200 
   );}  
 ) 
 }) 
 
</script>

同样,这段代码是包含在$(function(){})中,相当于window.onload的作用。
之后$('a')获取a标签,其提供一个hover方法,这个方法里面要提供两个函数,一个移入一个移出,我们将其设定为移入时200ms增加到200px,移出时200ms收缩到120px.
animate即自定义动画的方法,在这里是设置宽度动态变化。
要在处理前用stop(),把上个动画清理掉。
效果是一样的,但代码量少。

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
jquery实现增加删除行的方法
Feb 03 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
Apr 12 Javascript
纯javascript响应式树形菜单效果
Nov 10 Javascript
Javascript技术栈中的四种依赖注入小结
Feb 27 Javascript
轻松掌握JavaScript装饰者模式
Aug 27 Javascript
seajs模块之间依赖的加载以及模块的执行
Oct 21 Javascript
jQuery插件扩展实例【添加回调函数】
Nov 26 Javascript
JS简单获取日期相差天数的方法
Apr 24 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
May 17 jQuery
vue 中动态绑定class 和 style的方法代码详解
Jun 01 Javascript
jQuery实现的简单手风琴效果示例
Aug 29 jQuery
解决vue单页面 回退页面 keeplive 缓存问题
Jul 22 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
May 13 #Javascript
AngularJS在IE8的不支持的解决方法
May 13 #Javascript
基于jquery插件实现拖拽删除图片功能
Aug 27 #Javascript
JavaScript String 对象常用方法详解
May 13 #Javascript
JavaScript原生对象常用方法总结(推荐)
May 13 #Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
May 13 #Javascript
使用jQuery制作浮动工具栏的实例分享
May 13 #Javascript
You might like
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
Java中final关键字详解
2015/08/10 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
实现JavaScript中继承的三种方式
2009/10/16 Javascript
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
vue实现计算器功能
2020/02/22 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
python中PIL安装简单教程
2016/04/21 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
python实现磁盘日志清理的示例
2020/11/05 Python
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
小橄榄树:Le Petit Olivier
2018/04/23 全球购物
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
技能竞赛活动方案
2014/02/21 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
法院执行局工作总结
2015/08/11 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python