基于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+css在交互上的应用
Jul 18 Javascript
THREE.JS入门教程(5)你应当知道的十件事
Jan 24 Javascript
关于JS中的apply,call,bind的深入解析
Apr 05 Javascript
JS获取IMG图片高宽的简单实例
May 17 Javascript
对js eval()函数的一些见解
Aug 15 Javascript
JS获取及验证开始结束日期的方法
Aug 20 Javascript
很酷的星级评分系统原生JS实现
Aug 25 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
Oct 09 jQuery
原生JS实现 MUI导航栏透明渐变效果
Nov 07 Javascript
angularJs 表格添加删除修改查询方法
Feb 27 Javascript
在vue里使用codemirror遇到的问题
Nov 01 Javascript
JavaScript实现秒杀时钟倒计时
Sep 29 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
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
php 随机排序广告的实现代码
2011/05/09 PHP
关于PHP实现异步操作的研究
2013/02/03 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
2016/08/31 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
[03:48]大碗DOTA
2019/07/25 DOTA
Python日志模块logging简介
2015/04/13 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
语文高效课堂实施方案
2014/05/03 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript