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 相关文章推荐
jquery的颜色选择插件实例代码
Oct 02 Javascript
js中widow.open()方法使用详解
Jul 30 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
Oct 23 Javascript
Node.js重新刷新session过期时间的方法
Feb 04 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 Javascript
用React实现一个完整的TodoList的示例代码
Oct 30 Javascript
Node.Js生成比特币地址代码解析
Apr 21 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
Mar 08 Javascript
细说Vue组件的服务器端渲染的过程
May 30 Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 Javascript
vue.js实现双击放大预览功能
Jun 23 Javascript
Vue基于localStorage存储信息代码实例
Nov 16 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
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
浅谈PHP进程管理
2019/03/08 PHP
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
python实现删除文件与目录的方法
2014/11/10 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
python数据化运营的重要意义
2019/11/25 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
应届生的求职推荐信范文
2013/11/30 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
大学生应聘求职信
2014/05/26 职场文书
质量安全标语
2014/06/07 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
2014年招商工作总结
2014/11/22 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers