基于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 相关文章推荐
javascript数组组合成字符串的脚本
Jan 06 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
Mar 04 Javascript
JavaScript中URL编码函数代码
Jan 11 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
Jul 31 Javascript
获取当前点击按钮的id用this.id实现
Mar 17 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
Mar 18 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
Mar 26 Javascript
js鼠标点击图片切换效果实现代码
Nov 19 Javascript
Vue中使用clipboard实现复制功能
Sep 05 Javascript
jQuery实现滑动星星评分效果(每日分享)
Nov 13 jQuery
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
Apr 08 Javascript
JavaScript实现轮播图效果
Oct 30 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对XML的操作详解
2013/06/07 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
javascript 页面只自动刷新一次
2009/07/10 Javascript
CCPry JS类库 代码
2009/10/30 Javascript
javascript 函数使用说明
2010/04/07 Javascript
javascript smipleChart 简单图标类
2011/01/12 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
Python读写Redis数据库操作示例
2014/03/18 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
大学生个人求职信范文
2013/09/21 职场文书
四下基层实施方案
2014/03/28 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
2015年见习期工作总结
2014/12/12 职场文书
销售会议开幕词
2015/01/28 职场文书
同事欢送会致辞
2015/07/31 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python