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 批量上传图片实现代码
Jan 28 Javascript
基于jquery的button默认enter事件(回车事件)。
May 18 Javascript
JavaScript函数定义的常见注意事项小结
Sep 16 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
Mar 28 Javascript
javascript函数式编程实例分析
Apr 25 Javascript
jQuery的文档处理程序详解
May 10 Javascript
JS 实现可停顿的垂直滚动实例代码
Nov 23 Javascript
Bootstrap CSS使用方法
Dec 23 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
Dec 26 Javascript
详解前后端分离之VueJS前端
May 24 Javascript
微信小程序WebSocket实现聊天对话功能
Jul 06 Javascript
Angularjs实现页面模板清除的方法
Jul 20 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开发需要注意的安全问题
2010/09/01 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
Python zip()函数用法实例分析
2018/03/17 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
Python 可视化神器Plotly详解
2020/12/26 Python
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
美国知名生活购物网站:Goop
2017/11/03 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
房产代理公证处委托书
2014/04/04 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
青年标兵事迹材料
2014/08/16 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
2014年班组长工作总结
2014/11/20 职场文书
大学生团员个人总结
2015/02/14 职场文书
教师见习总结范文
2015/06/23 职场文书