基于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内存管理详细解析
Nov 11 Javascript
js每隔5分钟执行一次ajax请求的实现方法
Nov 27 Javascript
js判断iframe内的网页是否滚动到底部触发事件
Mar 18 Javascript
javascript实现带下拉子菜单的导航菜单效果
May 14 Javascript
浅谈JavaScript字符串与数组
Jun 03 Javascript
JS实现六位字符密码输入器功能
Aug 19 Javascript
angular 用拦截器统一处理http请求和响应的方法
Jun 08 Javascript
JS实现上传图片的三种方法并实现预览图片功能
Jul 14 Javascript
Vue2.0点击切换类名改变样式的方法
Aug 22 Javascript
基于VUE实现的九宫格抽奖功能
Sep 30 Javascript
详解基于electron制作一个node压缩图片的桌面应用
Jan 29 Javascript
详解微信小程序图片地扯转base64解决方案
Aug 18 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
PHP可变函数学习小结
2015/11/29 PHP
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
js的2种继承方式详解
2014/03/04 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
深入解析Python中的urllib2模块
2015/11/13 Python
Python探索之修改Python搜索路径
2017/10/25 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
django基于restframework的CBV封装详解
2019/08/08 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
CSS3 Flexbox中flex-shrink属性的用法示例介绍
2013/12/30 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
大学秋游活动方案
2014/02/11 职场文书
小组合作学习反思
2014/02/18 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
协议书与合同的区别
2014/04/18 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
对讲机知识
2022/04/07 无线电
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python