基于jquery的放大镜效果


Posted in Javascript onMay 30, 2012

核心代码:

$(function(){ 
var mouseX = 0; //鼠标移动的位置X 
var mouseY = 0; //鼠标移动的位置Y 
var maxLeft = 0; //最右边 
var maxTop = 0; //最下边 
var markLeft = 0; //放大镜移动的左部距离 
var markTop = 0; //放大镜移动的顶部距离 
var perX = 0; //移动的X百分比 
var perY = 0; //移动的Y百分比 
var bigLeft = 0; //大图要移动left的距离 
var bigTop = 0; //大图要移动top的距离 
//改变放大镜的位置 
function updataMark($mark){ 
//通过判断,让小框只能在小图区域中移动 
if(markLeft<0){ 
markLeft = 0; 
}else if(markLeft>maxLeft){ 
markLeft = maxLeft; 
} if(markTop<0){ 
markTop = 0; 
}else if(markTop>maxTop){ 
markTop = maxTop; 
} 
//获取放大镜的移动比例,即这个小框在区域中移动的比例 
perX = markLeft/$(".small").outerWidth(); 
perY = markTop/$(".small").outerHeight(); 
bigLeft = -perX*$(".big").outerWidth(); 
bigTop = -perY*$(".big").outerHeight(); 
//设定小框的位置 
$mark.css({"left":markLeft,"top":markTop,"display":"block"}); 
} 
//改变大图的位置 
function updataBig(){ 
$(".big").css({"display":"block","left":bigLeft,"top":bigTop}); 
} 
//鼠标移出时 
function cancle(){ 
$(".big").css({"display":"none"}); 
$(".mark").css({"display":"none"}); 
} 
//鼠标小图上移动时 
function imgMouseMove(event){ 
var $this = $(this); 
var $mark = $(this).children(".mark"); 
//鼠标在小图的位置 
mouseX = event.pageX-$this.offset().left - $mark.outerWidth()/2; 
mouseY = event.pageY-$this.offset().top - $mark.outerHeight()/2; 
//最大值 
maxLeft =$this.width()- $mark.outerWidth(); 
maxTop =$this.height()- $mark.outerHeight(); 
markLeft = mouseX; 
markTop = mouseY; 
updataMark($mark); 
updataBig(); 
} 
$(".small").bind("mousemove",imgMouseMove).bind("mouseleave",cancle); 
})

这个里面主要有二点

1.如何大图跟随"放大镜"的位置,同时移动大图?

其实就是用到一个比例关系,当“放大镜”移动多少比例(是比例,不是具体值),大图也同时用这个比例去乘以大图的宽和高,就可以算出大图该移动多少距离了;

2.显示区域和放大镜的关系?

这里的“放大镜”应该和大图的显示区域的比例,应该是大图和小的比例关系一样。比如大图和小图的比例是1:2,那个“放大镜”区域的大小,和显示大图区域的大小比例也应该是1:2,不然“放大镜”罩住的小图区域,和大图的显示区域,所显示的图像信息,不能保持一致。(妙味课堂里讲的那个实例,就是没有保持一至);

在线演示:http://demo.3water.com/js/2012/mymagnifier/
打包下载:https://3water.com/jiaoben/45315.html

Javascript 相关文章推荐
jquery选择器(常用选择器说明)
Sep 28 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
Mar 16 Javascript
Extjs NumberField后面加单位实现思路
Jul 30 Javascript
JS中的log对象获取以及debug的写法介绍
Mar 03 Javascript
JS操作HTML自定义属性的方法
Feb 10 Javascript
JavaScript模拟实现继承的方法
Mar 30 Javascript
js简单实现标签云效果实例
Aug 06 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
Mar 01 Javascript
Bootstrap每天必学之滚动监听
Mar 16 Javascript
jquery输入数字随机抽奖特效的简单实现代码
Jun 10 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
May 30 Javascript
react组件基本用法示例小结
Apr 27 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
May 27 #Javascript
Javascript的常规数组和关联数组对比小结
May 24 #Javascript
基于mootools插件实现遮罩层新手引导
May 24 #Javascript
jQuery 拖动层(在可视区域范围内)
May 24 #Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
May 24 #Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
May 24 #Javascript
js动态在form上插入enctype=multipart/form-data的问题
May 24 #Javascript
You might like
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
vue组件name的作用小结
2018/05/23 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
python端口扫描系统实现方法
2014/11/19 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
python 函数内部修改外部变量的方法
2018/12/18 Python
python psutil模块使用方法解析
2019/08/01 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
python3爬虫中异步协程的用法
2020/07/10 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
关于.NET, HTML的五个问题
2012/08/29 面试题
linux面试题参考答案(5)
2016/11/05 面试题
培训自我鉴定
2014/01/31 职场文书
幼儿老师求职信
2014/06/30 职场文书
付款承诺函范文
2015/01/21 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python