基于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 相关文章推荐
firefox下frameset取不到值的解决方法
Sep 06 Javascript
js点击button按钮跳转到另一个新页面
Oct 10 Javascript
AngularJS 指令的交互详解及实例代码
Sep 14 Javascript
全面解析node 表单的图片上传
Nov 21 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
Apr 27 jQuery
Vue.set()实现数据动态响应的方法
Feb 07 Javascript
jQuery实现使用sort方法对json数据排序的方法
Apr 17 jQuery
微信小程序实现的五星评价功能示例
Apr 25 Javascript
利用es6 new.target来对模拟抽象类的方法
May 10 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
May 12 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
Sep 07 Javascript
vue实现广告栏上下滚动效果
Nov 26 Vue.js
基于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
各种战术和打法的原创者
2020/03/04 星际争霸
用PHP制作静态网站的模板框架(二)
2006/10/09 PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
PHP中list方法用法示例
2016/12/01 PHP
php表单处理操作
2017/11/16 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
python数据归一化及三种方法详解
2019/08/06 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
《老山界》教学反思
2014/04/08 职场文书
技术员个人工作总结
2015/03/03 职场文书
工会文体活动总结
2015/05/07 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android