Mac Dock 效果及原理(勾股定理)

这个是苹果机上的 Dock 效果,Windows 上也有一款专门的模拟软件——RocketDock。
代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>RocketDock效果</title>
<style>
/* CSS Reset */
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td {margin:0; padding:0;}
body,button,input,select,textarea {font:12px/1.5 \5FAE\8F6F\96C5\9ED1,\5B8B\4F53,Arial,Helvetica,sans-serif;}
h1,h2,h3,h4,h5,h6 {font-size:100%; font-weight:normal;}
table {border-collapse:collapse; border-spacing:0;}
em {font-style:normal;}
ul,ol {list-style:none;}
a {text-decoration:none; color:#39442e;}
a:hover {text-decoration:underline;}
fieldset,img {border:0;}
button,input,select,textarea {font-size:100%; border:0;}
.clearfix:after {content:"."; display:block; height:0; clear:both; visibility:hidden;}
.clearfix {*zoom:1;} .menu {position:absolute; width:100%; bottom:0; text-align:center;}
</style>
</head>
<body>
<div id="menu" class="menu">
<img src="data:images/1.png" alt="" />
<img src="data:images/2.png" alt="" />
<img src="data:images/3.png" alt="" />
<img src="data:images/4.png" alt="" />
<img src="data:images/5.png" alt="" />
<img src="data:images/6.png" alt="" />
<img src="data:images/7.png" alt="" />
<img src="data:images/8.png" alt="" />
</div>
<script>
window.onload=function () {
var oMenu=document.getElementById("menu");
var aImg=oMenu.getElementsByTagName("img");
var aWidth=[];
var i=0;
for (i=0;i<aImg.length;i++) {
//存储最初宽度
aWidth.push(aImg[i].offsetWidth);
//设置新的宽度
aImg[i].width=parseInt(aImg[i].offsetWidth/2);
}
//鼠标移入事件
document.onmousemove=function (event) {
var event=event || window.event;
for (i=0;i<aImg.length;i++) {
/*
* 勾股定理的应用,a/b为直角的两边
* 计算鼠标到各种图片中心的直线距离
*/
var a=event.clientX-aImg[i].offsetLeft-aImg[i].offsetWidth/2;
var b=event.clientY-aImg[i].offsetTop-oMenu.offsetTop-aImg[i].offsetHeight/2;
/*
* 设置图片放大比例,先将取得的值除以一个数值(Math.sqrt(a*a+b*b)/300)
* 然后再用1减去这个初始比例(距离越近,比例应越大)
*/
var iScale=1-Math.sqrt(a*a+b*b)/300;
/*
* 如果鼠标距离图片太远,比例设置为0.5(该比例请与最初图片的设置保持一致)
*
*/
if (iScale<0.5) {
iScale=0.5;
};
aImg[i].width=aWidth[i]*iScale;
};
};
};
</script>
</body>
</html>
实现原理:
拆分成单个图片的放大效果来看,具体的方法是计算鼠标指标到图片中心的距离,然后除以一个定值(随意),接着用 1 减去这个值(因为距离越近,比例越大),如果是鼠标指标距离图片太远会造成图片反而变小,因此作个判断,当这个比例小于某个值时,则设置为图片缩小的初始值。
1.Math.sqrt(x):返回一个数的平方根。x 必需且是大于等于 0 的数。
案例下载>>Dock效果
Mac Dock 效果及原理(勾股定理)的更多相关文章
- 视差滚动(Parallax Scrolling)效果的原理与实现
视差滚动(Parallax Scrolling)效果的原理与实现1.视差滚动效果的主要特点: 1)直观的设计,快速的响应速度,更合适运用于单页面 2)差异滚动 分层视差 页面上很多的 ...
- HTML5 Canvas动画效果实现原理
在线演示 使用HTML5画布可以帮助我们高速实现简单的动画效果.基本原理例如以下: 每隔一定时间绘制图形而且清除图形,用来模拟出一个动画过程,能够使用context.clearRect(0, 0, x ...
- ARP-NAT(MAC Address Translation)的原理
本文部分图片来自: http://wiki.deliberant.com/faq/wireless-bridge-routing-arpnat/ https://wiki.openwrt.org/do ...
- 视差滚动(Parallax Scrolling)效果的原理和实现
视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验.作为今年网页设计的热点趋势,越来越多的网站应用了这项技术. 一.什么是视差滚 ...
- 【转】视差滚动(Parallax Scrolling)效果的原理和实现
原文:http://www.cnblogs.com/JoannaQ/archive/2013/02/08/2909111.html 视差滚动(Parallax Scrolling)是指让多层背景以不同 ...
- iOS开发——高级篇——iOS抽屉效果实现原理
实现一个简单的抽屉效果: 核心思想:KVO实现监听mainV的frame值的变化 核心代码: #import "ViewController.h" // @"frame& ...
- MAC地址欺骗(原理及实验)
MAC地址欺骗 MAC地址欺骗(或MAC地址盗用)通常用于突破基于MAC地址的局域网访问控制,例如在交换机上限定只转发源MAC地址修改为某个存在于访问列表中的MAC地址即可突破该访问限制,而且这种修改 ...
- transition:all 0.5s linear;进度条动画效果 制作原理
Html: <span class="progress"><b ><i></i></b><em>50< ...
- VC++实现位图显示透明效果--实现原理
我们在进行程序的界面设计时,常常希望将位图的关键部分,也既是图像的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本文介绍了透明位图的制作知识,并将透明位图在一个对话框中显示 ...
随机推荐
- css03复合选择器
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- CSS3 target 伪类不得不说那些事儿(纯CSS实现tab切换)
是不是觉得target有点眼熟?! 今天要讲的不是HTML的<a>标签里面有个target属性. target伪类是css3的新属性. 说到伪类,对css属性的人肯定都知道:hover.: ...
- .Net程序员 Solr-5.3之旅 (二)Solr 安装
阅读目录 引言 Solr5.3环境搭建 Solr5.3创建第一个Core 结尾 引言 一个糟糕的设计有好的表现形式,它会被判死缓,一个好的设计有糟糕的表现形式,它会被判死刑立即执行. 以上摘自一个设计 ...
- WebBrowser控件使用相关
修改WebBrowser控件的内核解决方案 http://www.cnblogs.com/sung/p/3391264.html C#中的WebBrowser控件的使用 http://www.cnbl ...
- (转)jQuery LigerUI 插件介绍及使用之ligerTree
一,简介 ligerTree的功能列表: 1,支持本地数据和服务器数据(配置data或者url) 2,支持原生html生成Tree 3,支持动态获取增加/修改/删除节点 4,支持大部分常见的事件 5 ...
- linux操作笔记
[fedora可以ping通但是isReachAble返回false的原因] fedora18+ 防火墙设置原因,导致tcp端口不通,返回no route to host错误. 关闭防火墙命令: sy ...
- 高放的c++学习笔记之重载运算与类型转换
▲基本概念 (1)重载运算符是具有特殊名字的函数,它们的名字又operator和其后要定义的运算符号共同构成.. (2)对于一个运算符号来说它或者是类的成员,或者至少含有一个类类型的参数. (3)我们 ...
- span里设置高度
众所周知,SPAN元素内单纯设置height是没有效果的. 需要设置SPAN的高度,需要将其设置成block元素. display:block 但这样会导致span占据了整一行,我们通常不希望这样. ...
- SQL 把数据从一张表更新到另一张表
代码写多了,有些使用过的方法和技巧会一时半会想不起来,平日记录下来,方便自己和有需要的人日后查阅. UPDATE tb1 SET tb1.fieldOne = tb2.fieldOne /* 将原始表 ...
- jQuery上传插件Uploadify 3.2使用
Uploadify下载地址:http://www.uploadify.com/download/ 这里下载最新版的3.2的. 常用API描述: $(document).ready(function() ...