基于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 判断checkbox是否选中的操作方法
Nov 09 Javascript
js实现回放拖拽轨迹从过程上进行分析
Jun 26 Javascript
Jquery修改页面标题title其它JS失效的解决方法
Oct 31 Javascript
node.js中的url.format方法使用说明
Dec 10 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
Dec 14 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
Jan 04 Javascript
node.js爬虫爬取拉勾网职位信息
Mar 14 Javascript
JS中的三个循环小结
Jun 20 Javascript
详解在vue-cli项目中安装node-sass
Jun 21 Javascript
vue使用laydate时间插件的方法
Nov 14 Javascript
解决layui弹框失效的问题
Sep 09 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
php中JSON的使用方法
2015/04/30 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
PHP中$GLOBALS与global的区别详解
2019/03/21 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
js 自定义的联动下拉框
2010/02/07 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
React中的render何时执行过程
2018/04/13 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
python实现ftp客户端示例分享
2014/02/17 Python
Python 多线程的实例详解
2017/09/07 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
Python安装OpenCV的示例代码
2020/03/05 Python
PyQt5实现登录页面
2020/05/30 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
买卖协议书范本
2014/04/21 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
好好学习保证书
2015/02/26 职场文书
运动会1000米加油稿
2015/07/21 职场文书
Python中常见的导入方式总结
2021/05/06 Python
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
python3操作redis实现List列表实例
2021/08/04 Python