js简单仿苹果菜单图片效果
2012-07-05 23:04
344 查看
DEMO演示:
点我点我点我
思路:通过计算鼠标与图片的位置来设定图片的大小
点我点我点我
思路:通过计算鼠标与图片的位置来设定图片的大小
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>仿苹果菜单</title> <style type="text/css"> #menu li{float:left; list-style: none; margin-left: 5px;} #menu{ display: inline-block;} body{ text-align: center;} </style> </head> <body> <ul id="menu"> <li><img src="images/01.png" alt="" width="100" height="100"></li> <li><img src="images/02.png" alt="" width="100" height="100"></li> <li><img src="images/03.png" alt="" width="100" height="100"></li> <li><img src="images/04.png" alt="" width="100" height="100"></li> <li><img src="images/05.png" alt="" width="100" height="100"></li> <li><img src="images/06.png" alt="" width="100" height="100"></li> <li><img src="images/07.png" alt="" width="100" height="100"></li> <li><img src="images/08.png" alt="" width="100" height="100"></li> <li><img src="images/09.png" alt="" width="100" height="100"></li> </ul> <script type="text/javascript"> Tool = { $:function(selector,context){ var elements,returnEle = []; var context = context || document; var sub = selector.substring(1); if (typeof(selector) == 'string'){ switch(selector.charAt(0)) { case '#': return document.getElementById(sub); case '.': if (context.getElementsByClassName) return context.getElementsByClassName(sub); elements = context.getElementsByTagName('*'); for(var i= 0,n=elements.length;i<n;i++){ if(elements[i].className.indexOf(sub)>-1){ returnEle.push(elements[i]); } } return returnEle; default: return context.getElementsByTagName(selector); } } }, on:function(node, type, handler) { node.addEventListener ? node.addEventListener(type, handler, false) : node.attachEvent('on' + type, handler); } }; // 获取节点的中心点坐标位置 function getCenterPos(ele){ var x = ele.offsetLeft, y = ele.offsetTop; var width = ele.offsetWidth, height = ele.offsetHeight; while(ele.offsetParent){ ele = ele.offsetParent; x += ele.offsetLeft; y += ele.offsetTop; } x = x + width/2; y = y + height/2; return [x,y]; } // 在每个li节点中记录自己的位置 function appleMenu(id){ var ul = document.getElementById(id); var lis = ul.getElementsByTagName('li'); for(var i= 0,n=lis.length;i<n;i++){ lis[i].pos = getCenterPos(lis[i]); } return lis; } // 设置事件 Tool.on(document,'mousemove', function(event){ // 获取鼠标的x,y位置 var pageX = event.pageX; var pageY = event.pageY; var dis; var lis = appleMenu('menu'); for(var i = 0,n = lis.length; i < n; i++){ // 计算鼠标与节点的距离 dis = Math.sqrt(Math.pow(pageX - lis[i].pos[0],2) + Math.pow(pageY-lis[i].pos[1],2)); // 根据鼠标与节点的距离来计算图片的宽高 if(dis<=200){ // 图片大小与鼠标距离的关系可以用二次函数(抛物线)来表示,鼠标在图片中心的时候图片最大(即dis为0的时候图片最大) // 我们设置最大值为200,那么抛物线经过(0,200)这个点,然后鼠标移动距离越远,图片大小越小,可以自己设定 // 距离为多大的时候,图片恢复默认大小,比如设置为200,则抛物线经过(200,100)这个点,这样就可以求出 // y = ax^2 + bx 中的a 和 b 的值,详情见此贴http://www.cnblogs.com/NNUF/archive/2012/05/28/2522541.html // 即求出图片大小鼠标位置的关系的公式即可 Tool.$('img',lis[i])[0].height = Tool.$('img',lis[i])[0].width = 200 - 0.002*Math.pow(dis,2); }else{ // 恢复默认大小 Tool.$('img',lis[i])[0].height = Tool.$('img',lis[i])[0].width = 100; } } }) </script> </body> </html>
相关文章推荐
- JS简单封装的图片无缝滚动效果示例【测试可用】
- JS实现超简单的仿QQ折叠菜单效果
- 原生js实现苹果菜单效果
- 通过js写的一个比较简单的点击切换图片效果
- JS简单实现多级Select联动菜单效果代码
- JS+CSS实现的简单折叠展开多级菜单效果
- 简单的JS幻灯片效果(播放图片) and Tab卡显示、展开、隐藏效果
- Android 中 WebView 与 js 简单交互实现图文混排效果,解决图片自适应屏幕与查看大图问题
- JS+CSS实现的简单折叠展开多级菜单效果
- 原生JS仿苹果任务栏菜单,放大效果的菜单
- JS+CSS实现简单滑动门(滑动菜单)效果
- 分享超简单实用的用JS实现DIV、图片圆角效果,关键是很兼容
- JavaEE day03 使用JS完成简单的数据校验、完成图片轮播效果、完成页面定时弹出广告、完成表单校验
- 用ReactJs写一个简单的手风琴菜单效果
- JS图片放大查看效果! (代码全部重构,兼容IE,FF,OP,简单,健壮)
- 最简单的js图片切换效果实现代码
- js实现简单的联动菜单效果
- 原生JS实现图片轮播与淡入效果的简单实例
- JS实现简单的图片轮换效果
- js菜单点击显示或隐藏效果的简单实例