基于JQuery的模拟苹果桌面Dock效果(稳定版)


Posted in Javascript onOctober 15, 2012

已经迫不及待的想要将我的最新成果分享给大家了,其实代码和之前的版本很相似。

首相是HTML页面代码:

<!DOCTYPE html> 
<html lang="zh-cmn-Hans-CN"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>jQuery Dock</title> 
<link type="text/css" rel="stylesheet" href="css/dock.css" /> 
<script type="text/javascript" src="js/jquery-1.8.0.js"></script> 
<script type="text/javascript" src="js/dock.js"></script> 
</head> 
<body id="content"> 
<div id="topBody" align="center"> 
<div id="topMenu"> 
<a href="#"><img alt="Home" src="images/home.png" /></a> 
<a href="#"><img alt="Music" src="images/music.png" /></a> 
<a href="#"><img alt="Calendar" src="images/calendar.png" /></a> 
<a href="#"><img alt="Email" src="images/email.png" /></a> 
<a href="#"><img alt="Portfolio" src="images/portfolio.png" /></a> 
<a href="#"><img alt="Video" src="images/video.png" /></a> 
<a href="#"><img alt="Link" src="images/link.png" /></a> 
<a href="#"><img alt="History" src="images/history.png" /></a> 
<a href="#"><img alt="RSS" src="images/rss.png" /></a> 
</div> 
</div> 
</body> 
</html>

同样加上相应的CSS代码:
#topMenu{ 
height:128px; 
line-height:250px; 
width: 630px; 
background-image:url(../images/dock-bg1.png); 
} 
#topMenu img{ 
width: 50px; 
height:50px; 
border:none; 
}

对应的JS代码如下:
$(function(){ 
$(this).mousemove(function(e){ 
var mouseY = parseInt(e.pageY); 
if(mouseY<136 && mouseY>8){ 
var mouseX = parseInt(e.pageX); 
$("#topMenu img").each(function(){ 
var obj = $(this); 
var objWidth = obj.css("width"); 
//获取图片中心水平坐标 
var objX = parseInt(obj.offset().left) + parseInt(objWidth.substr(0,objWidth.length-2))/2; 
var x = Math.abs(objX-mouseX); 
if(x<75){ 
obj.css("width",(128-((78*x*x)/(75*75)))+"px").css("height",(128-((78*x*x)/(75*75)))+"px"); 
}else{ 
obj.css("width","50px").css("height","50px"); 
} 
}); 
}else{ 
$("#topMenu img").each(function(){ 
$(this).css("width","50px").css("height","50px"); 
}); 
} 
}); 
});

相比于之前的版本最大的改变还是在JS上面,当鼠标在页面上移动时触发mousemove事件,在mousemove方法中首先取得鼠标在页面上的垂直坐标,判断鼠标是否在可操作dock菜单的垂直范围之内,如果鼠标不在这个范围之内,就将所有图标还原到初始状态;相反,如果鼠标在这个范围之内,就继续获取鼠标在页面上的水平坐标,并用mouseX来记录。同时获取图片中心在页面中的水平坐标,用objX来保存相应的值,当mouseX与objX之差的绝对值(用x来记录)小于75时,就进入了当前图片的可操作范围,dock效果就会触发,用y来表示当鼠标移动时某一张图片的width(为了简单本次示例使用的图标width和height相等的),本次示例用了方程 y=128-78*x2/752来表示鼠标的位置与图片尺寸之间的关系,当 x 的大于75时就将对应的图片还原。
在本次示例的过程中发现了一个 ie 的一个小 bug ,当 <a> 标签中间的内容为 <img /> 时如果没有给 img 的 border 的任何CSS样式,则 ie 会给 img 加上蓝色边框,即使给 <a> 标签加上 text-decoration: none; 的CSS样式,img 仍然会被 ie 加上蓝色边框,当给 img 添加 border:none; 之后烦人的蓝色边框就不见了。下图是改进过后版本的演示图,所有代码仅供参考,谢谢阅读。
基于JQuery的模拟苹果桌面Dock效果(稳定版)
Javascript 相关文章推荐
Array.slice()与Array.splice()的返回值类型
Oct 09 Javascript
学习YUI.Ext 第七天--关于View&amp;JSONView
Mar 10 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
Apr 07 Javascript
原生js实现shift/ctrl/alt按键的获取
Apr 08 Javascript
javascript遍历控件实例详细解析
Jan 10 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
javascript中的altKey 和 Event属性大全
Nov 06 Javascript
利用JS轻松实现获取表单数据
Dec 06 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
Mar 15 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
Dec 18 Javascript
微信小程序实现的一键拨号功能示例
Apr 24 Javascript
node将geojson转shp返回给前端的实现方法
May 29 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
Oct 15 #Javascript
JS自动缩小超出大小的图片
Oct 12 #Javascript
文本框input聚焦失焦样式实现代码
Oct 12 #Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
Oct 12 #Javascript
innerHTML与jquery里的html()区别介绍
Oct 12 #Javascript
jquery聚焦文本框与扩展文本框聚焦方法
Oct 12 #Javascript
Jquery index()方法 获取相应元素索引值
Oct 12 #Javascript
You might like
967 个函式
2006/10/09 PHP
php设计模式 Adapter(适配器模式)
2011/06/26 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
优秀应届生推荐信
2013/11/09 职场文书
会计大学生职业生涯规划书范文
2014/01/13 职场文书
趣味体育活动方案
2014/02/08 职场文书
经典演讲稿汇总
2014/05/19 职场文书
2014年行风建设工作总结
2014/12/01 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python