原生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 相关文章推荐
QQ邮箱的一个文本编辑器代码
Mar 14 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
May 24 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
Jun 22 Javascript
文本框只能选择数据到文本框禁止手动输入
Nov 22 Javascript
node.js中的fs.linkSync方法使用说明
Dec 15 Javascript
Bootstrap学习笔记之环境配置(1)
Dec 07 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
Dec 27 Javascript
js中的闭包学习心得
Feb 06 Javascript
es6 symbol的实现方法示例
Apr 02 Javascript
vue输入节流,避免实时请求接口的实例代码
Oct 30 Javascript
npm qs模块使用详解
Feb 07 Javascript
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
实例讲解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
DC动漫人物排行
2020/03/03 欧美动漫
php 中文处理函数集合
2008/08/27 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
浅谈php://filter的妙用
2019/03/05 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
python实现一次创建多级目录的方法
2015/05/15 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
群众路线个人对照检查材料
2014/09/23 职场文书
公证处委托书
2015/01/28 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
基于Python实现射击小游戏的制作
2022/04/06 Python