基于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 相关文章推荐
增强的 JavaScript 的 trim 函数的代码
Aug 13 Javascript
JAVASCRIPT下判断IE与FF的比较简单的方式
Oct 17 Javascript
IE本地存储userdata的一个bug说明
Jul 01 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
Feb 07 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 Javascript
javascript实现简单加载随机色方块
Dec 25 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
Apr 14 Javascript
js数组去重的hash方法
Dec 22 Javascript
Bootstrap Table使用整理(一)
Jun 09 Javascript
利用Vue实现移动端图片轮播组件的方法实例
Aug 23 Javascript
es6新特性之 class 基本用法解析
May 05 Javascript
小程序实现侧滑删除功能
Jun 25 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脚本代码
2011/02/19 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
php 邮件发送问题解决
2014/03/22 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
php提取微信账单的有效信息
2018/10/01 PHP
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
ie与ff下的event事件使用介绍
2013/11/25 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
pytorch 数据集图片显示方法
2018/07/26 Python
Python匿名函数及应用示例
2019/04/09 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
python openCV自制绘画板
2020/10/27 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
柏林通行证:Berlin Pass
2018/04/11 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
会计实习生工作总结的自我评价
2013/10/07 职场文书
销售冠军获奖感言
2014/02/03 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis