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 相关文章推荐
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 Javascript
常用一些Javascript判断函数
Aug 14 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
Apr 02 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
Apr 07 Javascript
分享十五款 jQuery 社交网络分享插件
May 16 Javascript
Bootstrap框架实现广告轮播效果
Nov 28 Javascript
Angular4表单验证代码详解
Sep 03 Javascript
node使用promise替代回调函数
May 07 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
Jun 21 Javascript
react实现同页面三级跳转路由布局
Sep 26 Javascript
vue项目中微信登录的实现操作
Sep 08 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脚本的10个技巧(8)
2006/10/09 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
PHP count()函数讲解
2019/02/03 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
Django 自动生成api接口文档教程
2019/11/19 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
工商管理实习自我鉴定
2013/09/28 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
学生鉴定评语大全
2014/05/05 职场文书
清明节演讲稿
2014/05/27 职场文书
争先创优活动总结
2014/08/27 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
《观潮》教学反思
2016/02/17 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
Python 数据可视化之Seaborn详解
2021/11/02 Python