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 textlimit 显示用户输入的字符数 限制用户输入的字符数
May 14 Javascript
firefox和IE系列的相关区别整理 以备后用
Dec 28 Javascript
Extjs学习笔记之二 初识Extjs之Form
Jan 07 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
Oct 12 Javascript
Jquery实现页面加载时弹出对话框代码
Apr 19 Javascript
jquery制作弹窗提示窗口代码分享
Mar 02 Javascript
jQuery CSS()方法改变现有的CSS样式表
Sep 09 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
Dec 14 Javascript
jQuery中 DOM节点操作方法大全
Oct 12 jQuery
详解Angular调试技巧之报错404(not found)
Jan 31 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
May 26 Javascript
JS中forEach()、map()、every()、some()和filter()的用法
May 11 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判断GIF图片是否为动画的方法
2020/09/04 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
jQuery实现动态向上滚动
2020/12/21 jQuery
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
英国女士家居服网站:hush
2017/08/09 全球购物
用友笔试题目
2016/10/25 面试题
会计自我鉴定
2013/11/02 职场文书
高中毕业生生活的自我评价
2013/12/08 职场文书
大学生创业计划书的格式要求
2013/12/29 职场文书
生产车间班组长岗位职责
2014/01/06 职场文书
售后服务经理岗位职责范本
2014/02/22 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
2015年护士节活动总结
2015/02/10 职场文书
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python