JS实现Fisheye效果动感放大菜单代码


Posted in Javascript onOctober 21, 2015

本文实例讲述了JS实现Fisheye效果动感放大菜单代码。分享给大家供大家参考,具体如下:

这款Fisheye Menu,是采用JS+CSS+XHTML实现的动感放大菜单,放到图标上的时候,图标会被放大,整个菜单有缓冲弹簧的效果,学jQuery的朋友见的比较多,不过本款没有用到jQuery,效果却同样精彩。

运行效果截图如下:

JS实现Fisheye效果动感放大菜单代码

在线演示地址如下:

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fisheye 动感放大的菜单</title>
<style>
#fisheye_menu {
 list-style: none;
 padding: 0;
 margin: 10px;
 height: 81px;
}
#fisheye_menu li {
 position: relative;
 display: block;
 float: left;
}
#fisheye_menu span {
 position: absolute;
 top: 100%;
 left: 0;
 text-align: center;
 width: 79px;
 padding: 1px;
 margin: 0;
 border: solid 1px #bbb; 
 color: #333;
 background: #eee;
}
#fisheye_menu a {
 text-decoration: none;
}
#fisheye_menu img {
 border: 0;
 vertical-align: top;
}
</style>
<script type='text/javascript'>
var fisheyemenu = {
 startSize : 55,
 endSize : 88,
 imgType : ".gif",
 init : function () {
  var animElements = document.getElementById("fisheye_menu").getElementsByTagName("img");
  var titleElements = document.getElementById("fisheye_menu").getElementsByTagName("span");
  for(var j=0; j<titleElements.length; j++) {
   titleElements[j].style.display = 'none';
  }
  for(var i=0; i<animElements.length; i++) {
   var y = animElements[i];
   y.style.width = fisheyemenu.startSize+'px';
   y.style.height = fisheyemenu.startSize+'px';
   fisheyemenu.imgSmall(y);
   animElements[i].onmouseover = changeSize;
   animElements[i].onmouseout = restoreSize;
  }
  function changeSize() {
   fisheyemenu.imgLarge(this);
   var x = this.parentNode.getElementsByTagName("span");
   x[0].style.display = 'block';
   if (!this.currentWidth) this.currentWidth = fisheyemenu.startSize;
   fisheyemenu.resizeAnimation(this,this.currentWidth,fisheyemenu.endSize,15,10,0.333);
  }
  function restoreSize() {
   var x = this.parentNode.getElementsByTagName("span");
   x[0].style.display = 'none';
   if (!this.currentWidth) return;
   fisheyemenu.resizeAnimation(this,this.currentWidth,fisheyemenu.startSize,15,10,0.5);
   fisheyemenu.imgSmall(this);
  }
 },
 resizeAnimation : function (elem,startWidth,endWidth,steps,intervals,powr) {
  if (elem.widthChangeMemInt) window.clearInterval(elem.widthChangeMemInt);
  var actStep = 0;
  elem.widthChangeMemInt = window.setInterval(
   function() {
    elem.currentWidth = fisheyemenu.easeInOut(startWidth,endWidth,steps,actStep,powr);
    elem.style.width = elem.currentWidth+"px";
    elem.style.height = elem.currentWidth+"px";
    actStep++;
    if (actStep > steps) window.clearInterval(elem.widthChangeMemInt);
   }
   ,intervals)
 },
 easeInOut : function (minValue,maxValue,totalSteps,actualStep,powr) {
  var delta = maxValue - minValue;
  var stepp = minValue+(Math.pow(((1 / totalSteps)*actualStep),powr)*delta);
  return Math.ceil(stepp)
 },
 imgSmall : function (obj) {
  imgSrc = obj.getAttribute("src");
  var typePos = imgSrc.indexOf(fisheyemenu.imgType, 0);
  var imgName = imgSrc.substr(0, typePos);
  obj.setAttribute("src", imgName+"_small"+fisheyemenu.imgType);
 },
 imgLarge : function (obj) {
  imgSrc = obj.getAttribute("src");
  var typePos = imgSrc.indexOf("_small", 0);
  var imgName = imgSrc.substr(0, typePos);
  obj.setAttribute("src", imgName+fisheyemenu.imgType);
 }
}
if ( typeof window.addEventListener != "undefined" )
 window.addEventListener( "load", fisheyemenu.init, false );
else if ( typeof window.attachEvent != "undefined" )
 window.attachEvent( "onload", fisheyemenu.init );
else {
 if ( window.onload != null ) {
 var oldOnload = window.onload;
 window.onload = function ( e ) {
  oldOnload( e );
  fisheyemenu.init();
 };
 }
 else
 window.onload = fisheyemenu.init;
}
</script>
 </head>
 <body>
  <div>
   <ul id="fisheye_menu">
    <li><a href="#1"><img src="images/icon.gif" alt="三水点靠木" /><span>Icon 1</span></a></li>
    <li><a href="#2"><img src="images/icon2.gif" alt="image description" /><span>Icon 2</span></a></li>
    <li><a href="#3"><img src="images/icon.gif" alt="脚本下载" /><span>Icon 3</span></a></li>
    <li><a href="#4"><img src="images/icon2.gif" alt="image description" /><span>Icon 4</span></a></li>
    <li><a href="#5"><img src="images/icon.gif" alt="3water.com" /><span>Icon 5</span></a></li>
    <li><a href="#6"><img src="images/icon2.gif" alt="image description" /><span>Icon 6</span></a></li>
   </ul>
   </div>
 </body>
</html>

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

Javascript 相关文章推荐
根据分辨率不同,调用不同的css文件
Jul 07 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
Apr 16 Javascript
再谈javascript面向对象编程
Mar 18 Javascript
js获取指定日期周数以及星期几的小例子
Jun 27 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
Dec 15 Javascript
JS实现的跨浏览器解析XML文件实例
Jun 21 Javascript
js简单实现图片延迟加载的方法
Jul 19 Javascript
JavaScript的兼容性与调试技巧
Nov 22 Javascript
JavaScript实现格式化字符串函数String.format
Dec 16 Javascript
jquery插件开发之选项卡制作详解
Aug 30 jQuery
一步快速解决微信小程序中textarea层级太高遮挡其他组件
Mar 04 Javascript
vue+element 实现商城主题开发的示例代码
Mar 26 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
Oct 21 #Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
Oct 21 #Javascript
chrome调试javascript详解
Oct 21 #Javascript
Javascript 计算字符串在localStorage中所占字节数
Oct 21 #Javascript
深入解析JavaScript的闭包机制
Oct 20 #Javascript
JavaScript中字面量与函数的基本使用知识
Oct 20 #Javascript
JavaScript基本的输出和嵌入式写法教程
Oct 20 #Javascript
You might like
php实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
js charAt的使用示例
2014/02/18 Javascript
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
js实现下一页页码效果
2017/03/07 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
JavaScript如何操作css
2020/10/24 Javascript
python网络编程学习笔记(一)
2014/06/09 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
python web框架 django wsgi原理解析
2019/08/20 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
《逃家小兔》教学反思
2014/02/23 职场文书
结婚周年感言
2014/02/24 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
开天辟地观后感
2015/06/09 职场文书
《风筝》教学反思
2016/02/23 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android