jquery实现图片放大镜功能


Posted in Javascript onNovember 23, 2015

实现原理:

这里用到了两张图片,一张小图,一张大图。将大图设置为放大镜的背景图片,当鼠标在小图上移动时,同时控制背景大图在放大镜中的位置。两张图片大小最好是等比例的,这样才能达到最佳效果。当没有大图时,则默认为小图本身,这时由于两张图片大小一样,因此放大镜效果不明显,就跟没放大是一样的。

此插件用到了html5,css3的一些属性,ie8及以下版本不兼容,放大镜是方形的。

运行效果截图如下:

jquery实现图片放大镜功能

具体代码如下:

(function () {
 $.fn.Magnifier = function (options) {

  //默认参数设置
  var settings = {
   diameter: 150,     //放大镜的直径大小
   borderWidth: 2,     //放大镜边框大小
   borderColor: "white",   //放大镜边框颜色
   backgroundImg: "../img/111.jpg" //放大镜内的图片(即大图)
  };

  //合并参数
  if (options)
   $.extend(settings, options);

  //链式原则
  return this.each(function () {
   //存储当前对象
   var root = $(this);

   //当前对象宽高
   var WRoot = root.width();
   var HRoot = root.height();

   //偏移量 left 和 top
   var offset = root.offset();

   //放大镜样式
   var style = "background-position: 0px 0px;background-repeat: no-repeat;float: left;";
   style += "position: absolute;box-shadow:0 0 5px #777, 0 0 10px #aaa inset;display: none;";
   style += "width: " + String(settings.diameter) + "px;height: " + String(settings.diameter) + "px;";
   style += "border-radius: " + String(settings.diameter / 2 + settings.borderWidth) + "px;";
   style += "border: " + String(settings.borderWidth) + "px solid " + settings.borderColor + ";";

   //创建放大镜
   var magnifier = $("<div style='" + style + "'></div>").appendTo(root.parent());

   //图片(当没有大图时,为小图本身)
   var backgroundImg = settings.backgroundImg ? settings.backgroundImg : root.attr("src");

   //将图片放入放大镜内
   magnifier.css({ backgroundImage: "url('" + backgroundImg + "')" });

   //缩放比例
   var WRatio = 0; //宽度
   var HRatio = 0; //高度

   //图片加载完,计算缩放比例
   //由于图片原本不在DOM文档里,因此页面加载时不会触发load事件,因此要通过执行appendTo来触发load事件
   $("<img style='display:none;' src='" + backgroundImg + "' />").load(function () {
    WRatio = $(this).width() / WRoot;
    HRatio = $(this).height() / HRoot;
   }).appendTo(root.parent());

   //放大镜及其背景图片位置控制
   function Position(e) {

    var LPos = parseInt(e.pageX - offset.left);
    var TPos = parseInt(e.pageY - offset.top);

    //判断鼠标是否在图片上
    if (LPos < 0 || TPos < 0 || LPos > WRoot || TPos > HRoot) {

     magnifier.hide(); //不在隐藏放大镜

    } else {

     magnifier.show(); //反之显示放大镜

     //控制放大镜内背景图片的位置 (settings.diameter / 2)半径
     LPos = String(((e.pageX - offset.left) * WRatio - settings.diameter / 2) * (-1));
     TPos = String(((e.pageY - offset.top) * HRatio - settings.diameter / 2) * (-1));

     magnifier.css({ backgroundPosition: LPos + 'px ' + TPos + 'px' });

     //控制放大镜本身位置
     LPos = String(e.pageX - settings.diameter / 2);
     TPos = String(e.pageY - settings.diameter / 2);

     magnifier.css({ left: LPos + 'px', top: TPos + 'px' });
    }
   }

   //放大镜
   magnifier.mousemove(Position);

   //当前对象
   root.mousemove(Position);

  });
 };
})();

实例DEMO如下:

<!DOCTYPE html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>CSS3+jQuery图像放大镜效果</title>
 <style type="text/css">
  body
  {
   background-color: Black;
  }
  .box
  {
   width: 700px;
   margin: 50px auto;
  }
 </style>
</head>
<body>
 <div class="box">

 <!--小图-->
  <img alt="" id="img_02" src="../img/222.gif" width="700" height="500" />
 </div>
 <script src="../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
 <script src="../Scripts/jquery.similar.magnifier.js" type="text/javascript"></script>
 <script type="text/javascript">
  $("#img_02").Magnifier();
 </script>
</body>
</html>

关于jquery实现图片放大镜功能的内容就介绍到这里,希望大家仔细研究,学以致用。

Javascript 相关文章推荐
ExtJS 2.0实用简明教程 之Border区域布局
Apr 29 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
Aug 13 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
Nov 03 Javascript
JavaScript用select实现日期控件
Jul 17 Javascript
easyui tree带checkbox实现单选的简单实例
Nov 07 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
Dec 14 Javascript
js判断手机号是否正确并返回的实现代码
Jan 17 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
Sep 21 Javascript
jQuery实现列表的增加和删除功能
Jun 14 jQuery
jQuery中$原理实例分析
Aug 13 jQuery
JavaScript交换两个变量方法实例
Nov 25 Javascript
javaScript实现一个队列的方法
Jul 14 Javascript
jquery自定义表格样式
Nov 23 #Javascript
jquery实现表单验证简单实例演示
Nov 23 #Javascript
JavaScript与HTML的结合方法详解
Nov 23 #Javascript
js实现接收表单的值并将值拼在表单action后面的方法
Nov 23 #Javascript
跟我学习javascript的垃圾回收机制与内存管理
Nov 23 #Javascript
跟我学习javascript解决异步编程异常方案
Nov 23 #Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
Nov 23 #Javascript
You might like
表格展示无限级分类(PHP版)
2012/08/21 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
详解Python中类的定义与使用
2017/04/11 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
python文件拆分与重组实例
2018/12/10 Python
python实现定时发送qq消息
2019/01/18 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
Shell编程面试题
2012/05/30 面试题
计算机开发个人求职信范文
2013/09/26 职场文书
求职面试个人自我评价
2014/02/28 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
违纪学生保证书
2015/02/27 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers