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 相关文章推荐
基于jquery的模态div层弹出效果
Aug 21 Javascript
页面刷新时记住滚动条的位置jquery代码
Jun 17 Javascript
JavaScript中扩展Array contains方法实例
Aug 23 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
Aug 23 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
Nov 23 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
Mar 11 Javascript
限制复选框最多选择项的实现代码
May 30 Javascript
星期几的不同脚本写法(推荐)
Jun 01 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
Nov 02 Javascript
js获取文件里面的所有文件名(实例)
Oct 17 Javascript
让你5分钟掌握9个JavaScript小技巧
Jun 09 Javascript
关于vue组件事件属性穿透详解
Oct 28 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获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
php实现阳历阴历互转的方法
2015/10/28 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
Python 判断奇数偶数的方法
2018/12/20 Python
python实现五子棋小程序
2019/06/18 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
中学家长会邀请函
2014/02/03 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
毕业生学校组织意见
2015/06/04 职场文书
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL
MySQL日期时间函数知识汇总
2022/03/17 MySQL