基于jQuery仿淘宝产品图片放大镜特效


Posted in Javascript onOctober 19, 2020

在开发商城的时候,往往会用到图片的放大功能,这里把自己在近期项目中使用的放大镜特效做一下总结(非插件)。

放大镜效果 常用的js组件jquery.imagezoom,jquery.jqzoom,jquery.zoom等 这些组件大同小异。 大家感兴趣的话可以去百度一下。

本文主要是使用非组件方法来做放大镜效果。

每一张图片都要生成三种尺寸,否则放大镜的效果不会太明显,这里是 54X54  320X320  800X800。

首先看效果:鼠标经过小图时,大图随之切换。

基于jQuery仿淘宝产品图片放大镜特效

首先是html

<div class="infoimg">
 <div class="mainImg" id="largePicDiv">
  <img id="largePic" src="FileUpload/20160120/20160120103334758_w.jpg" alt="" />
  <div class="zoom_pup" id="move"></div>
  <div id="detailPic" class="big_pic">
   <img alt="和朋友们一起想办法(第二辑):全8册" src="FileUpload/20160120/20160120103334758_b.jpg" />
  </div>
 </div>
 <div class="allImg">
   <img src="FileUpload/20160120/20160120103334758_x.jpg" alt="和朋友们一起想办法(第二辑):全8册"/>
   <img src="FileUpload/20160120/20160120103334918_x.jpg" alt="和朋友们一起想办法(第二辑):全8册"/>
   <img src="FileUpload/20160120/20160120103335031_x.jpg" alt="和朋友们一起想办法(第二辑):全8册"/>
   <img src="FileUpload/20160120/20160120103335127_x.jpg" alt="和朋友们一起想办法(第二辑):全8册"/>
   <img src="FileUpload/20160120/20160120103335209_x.jpg" alt="和朋友们一起想办法(第二辑):全8册"/>

 </div>
    
</div>

这里id为move的div是放大镜的手柄 id为detailPic的div是右侧放大镜

 css

.infoimg { float: left; padding: 0 20px 30px 0; position: relative; width: 320px; }

.infoimg img { display: block; height: 320px; width: 320px; }

.allImg { height: 58px; margin: 15px 0 0 10px; overflow: hidden; width: 310px; }

.allImg img { cursor: pointer; float: left; height: 54px; margin-right: 3px; padding: 2px; width: 54px; }

.allImg img.current { border: 1px solid #f1f1f1; padding: 1px; }

.mainImg { position: relative; }

.mainImg .zoom_pup { background: url("../images/zoom_pup.png") repeat 0 0; cursor: move; height: 175px; left: 0px; position: absolute; top: 160px; width: 175px; display: none; }

.big_pic { background-color:#fff; border: 1px solid #f5f5f5; height: 400px; left: 320px; overflow: hidden; position: absolute; text-align: center; top: 0; width: 400px; display: none; }
.big_pic img{ width: 800px; height: 800px;}

JS代码

//切换图片
 $(".allImg img").mouseover(function() {
  $(".allImg img").removeClass("current");
  $(this).addClass("current");
  var src = $(this).attr("src");
  $("#largePic").attr("src", src.replace("_x", "_w"));
  $("#detailPic img").attr("src", src.replace("_x", "_b"));

 });
 
 //放大镜效果
 $("#largePicDiv").bind("mousemove",
  function(e) {
   var ev = e || event;
   var mouseX = ev.pageX;
   var mouseY = ev.pageY;
   var picLeft = $("#largePic").offset().left;
   var picTop = $("#largePic").offset().top;
   var picWidth = $("#largePic").width();
   var picHeight = $("#largePic").height();
   var xLength = mouseX - picLeft;
   var yLength = mouseY - picTop;
   var qWidth = picWidth / 4;
   var lastQWidth = picWidth - picWidth / 4;
   var qHeight = picHeight / 4;
   var lastQHeight = picHeight - picHeight / 4;
   if (xLength < qWidth) {
    $("#move").css("left","0px");
   } else {
    if (xLength > lastQWidth) {
     $("#move").css("left", (lastQWidth - qWidth) + "px");
    } else {
     $("#move").css("left", (xLength - qWidth) + "px");
    }
   }
   if (yLength < qHeight) {
    $("#move").css("top", "0px");
   } else {
    if (yLength > lastQHeight) {
     $("#move").css("top", (lastQHeight - qHeight) + "px");
    } else {
     $("#move").css("top", (yLength - qHeight) + "px");
    }
   }
   $("#detailPic > img").css("left", parseInt($("#move").css("left")) * (-800 / picWidth) + "px").css("top", parseInt($("#move").css("top")) * (-800 / picWidth) + "px").css("position", "absolute");
  });

当然这里最下面一排小图片 还缺少一个功能,就是当图片大于5张的时候可以左右滚动图片,这样可以容纳大于5张的图片。这里项目中使用的图片一般都小于5张,因此这个功能没有,大家可以参考一下当当或京东。

以上就是jQuery实现图片放大镜效果的代码,希望对大家的学习有所帮助。

Javascript 相关文章推荐
js function使用心得
May 10 Javascript
关于JavaScript中原型继承中的一点思考
Jul 25 Javascript
JavaScript实现GriwView单列全选(自写代码)
May 13 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
Jun 16 Javascript
使用js获取图片原始尺寸
Dec 03 Javascript
JavaScript无缝滚动效果的实例代码
Mar 27 Javascript
快速使用node.js进行web开发详解
Apr 26 Javascript
AngularJS实现的输入框字数限制提醒功能示例
Oct 26 Javascript
vue中使用ueditor富文本编辑器
Feb 08 Javascript
JavaScript创建、读取和删除cookie
Sep 03 Javascript
Openlayers显示地理位置坐标的方法
Sep 28 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
Jan 21 #Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
Jan 21 #Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
Jan 21 #Javascript
jquery mobile开发常见问题分析
Jan 21 #Javascript
json格式数据的添加,删除及排序方法
Jan 21 #Javascript
jquery及js实现动态加载js文件的方法
Jan 21 #Javascript
js console.log打印对像与数组用法详解
Jan 21 #Javascript
You might like
PHP+DBM的同学录程序(4)
2006/10/09 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
php生成与读取excel文件
2016/10/14 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
javascript中返回顶部按钮的实现
2015/05/05 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
python中实现php的var_dump函数功能
2015/01/21 Python
python操作excel的方法
2018/08/16 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
分享一个python的aes加密代码
2020/12/22 Python
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
火山动力Java笔试题
2014/06/26 面试题
建设单位项目负责人任命书
2014/06/06 职场文书
小学领导班子对照材料
2014/08/23 职场文书
见习报告怎么写
2014/10/31 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
学生通报表扬范文
2015/05/04 职场文书