苹果菜单放大效果
苹果放大菜单效果主要是运用了三角函数的知识,其实三角函数在编程中应用的还是非常广泛的,而且个人觉得也非常的实用,之前我写的css旋转真实坐标的转换也是运用了三角函数,那么如果利用三角函数的知识来实现苹果放大菜单效果呢?
接下来,我们先看一张图:
要实现这个效果,首先我们需要知道鼠标释放点和每个菜单项中心点之间的距离d,根据上图,通过三角函数我们可以轻松的计算出距离d,然后我们将每个菜单项中心点距离鼠标释放点的距离除以一个阈值,可以得到每个菜单项和鼠标释放点之前的一个相对比例,而且我们可以发现离鼠标距离越近的菜单项比例越小,但是最终的效果是离鼠标距离越近的菜单项更大一些,所以我们用1分别减去距离比例,剩下的工作就很简单了,用图片的高宽分别乘以这个比例就是我们最终需要的结果。
最终代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Apple Menu</title> <style type="text/css"> * { padding: 0; margin: 0; } #main { width: 288px; position: fixed; bottom: 10px; width: 100%; text-align: center; } #main img { margin: 0 8px; } </style> </head> <body> <div id="main"> <img src="b3.png" width="72px"> <img src="b4.png" width="72px"> <img src="b8.png" width="72px"> <img src="b9.png" width="72px"> </div> <script type="text/javascript"> var imgs = document.querySelectorAll('img'), main = document.querySelector('#main'); window.addEventListener('mousemove', function(e) { var ex = e.pageX, ey = e.pageY; imgs.forEach(function(img) { var cx = img.offsetLeft + img.offsetWidth / 2, cy = img.offsetTop + img.offsetHeight / 2 + main.offsetTop, deltaX = ex - cx, deltaY = ey - cy; var distance = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)), scale = 1 - distance / 300; if (scale<0.5) { scale = 0.5; } img.style.width = 144 * scale + 'px'; img.style.height = 144 * scale + 'px'; }); }, false); </script> </body> </html>
- 支付宝
- 微信