Js特效之放大镜(淘宝商品展示)

放大镜具体效果为:一张图片,鼠标移上去出现一个半透明的框,随着鼠标移动,半透明框随着鼠标移动,且鼠标始终处于半透明框的中间,同时在特定区域显示被半透明框覆盖图片部分的放大部分。如下图所示:

分析:要实现如图效果,需要处理两方面的事件。

问题一:要获取鼠标位置,并且鼠标始终处于半透明框的中心位置;且半透明框可以随鼠标移动而移动。

解决一:可以使用来获取鼠标的位置,并且处理兼容性问题,半透明框绝对定位,可以通过控制left和top值来控制它的移动,可以通过减法来使鼠标位置处于框的中心,并且可以通过最大最小left和top值来控制半透明框不能移除图片。

问题二:如何使下方出现图片并且可以显示不同区域。

解决二:下部设置两个DIV,大的包含在小的里面,设置图片为背景,小的overflow=hidden;通过控制它的scrollLeft和scrollTop值让他滚动。

问题三:如何将半透明框覆盖区域和div展示框显示同步并放大。

解决三:透明框/图片=展示框/放大后图片,并且展示框值得变化等于透明框值变化的N倍。N等于前面比例的倒数。

代码如下:

  1 <!DOCTYPE html>
  2 <html>
  3 <head lang="en">
  4     <meta charset="UTF-8">
  5     <title></title>
  6     <style type="text/css">
  7         *{
  8             padding: 0;
  9             margin: 0;
 10         }
 11         #photo{
 12             width: 400px;
 13             height: 225px;
 14             background: url("images/ico1.jpg") no-repeat;
 15             position: relative;
 16         }
 17         #drag{
 18             width: 80px;
 19             height: 45px;
 20             background: white;
 21             opacity: 0.5;
 22             position: absolute;
 23             left: 0;
 24             top: 0;
 25             display: none;
 26         }
 27         #show{
 28             margin-top: 20px;
 29             width: 400px;
 30             height: 225px;
 31             overflow: hidden;
 32             display: none;
 33         }
 34         #big{
 35             width: 2000px;
 36             height: 1125px;
 37             background: url("images/ico1.jpg") no-repeat;
 38             background-size: 100%;
 39         }
 40     </style>
 41 </head>
 42 <body>
 43 <div id="photo">
 44     <div id="drag">
 45     </div>
 46 </div>
 47 <div id="show">
 48     <div id="big">
 49     </div>
 50 </div>
 51 <script type="text/javascript">
 52     var photo=document.getElementById("photo");
 53     var drag=document.getElementById("drag");
 54     var show=document.getElementById("show");
 55     var big=document.getElementById("big");
 56     window.onmousemove=function(event){
 57         //兼容性处理
 58         var e=event||window.event;
 59         //为了使鼠标处于透明框的中心部位,需要用鼠标位置减去透明框宽度和高度的一半
 60         //x,y分别为经过处理后的鼠标横纵坐标
 61         var x= e.clientX-drag.offsetWidth/2;
 62         var y= e.clientY-drag.offsetHeight/2;
 63         //maxL,maxT分别为最大横向和最大纵向移动距离
 64         var maxL=photo.offsetWidth-drag.offsetWidth;
 65         var maxT=photo.offsetHeight-drag.offsetHeight;
 66         //如果横向坐标超过最大距离,使横向坐标等于最大距离
 67         if(x>=maxL){
 68             x=maxL;
 69         }
 70         //如果横向坐标小于最大距离,使横向坐标等于0
 71         if(x<=0){
 72             x=0;
 73         }
 74         //如果纵向坐标超过最大距离,使纵向坐标等于最大距离
 75         if(y>=maxT){
 76             y=maxT;
 77         }
 78         //如果纵向坐标小于0,使纵向坐标等0
 79         if(y<=0){
 80             y=0;
 81         }
 82         //控制透明框的位置
 83         drag.style.left=x+"px";
 84         drag.style.top=y+"px";
 85         //控制展示框显示的位置
 86         show.scrollLeft=5*x;
 87         show.scrollTop=5*y;
 88     }
 89     //图片的鼠标移入事件
 90     photo.onmouseover=function(){
 91         //透明框和展示框出现
 92         show.style.display="block";
 93         drag.style.display="block";
 94     }
 95     //图片的鼠标移出事件
 96     photo.onmouseout=function(){
 97         //透明框和展示框隐藏
 98         show.style.display="none";
 99         drag.style.display="none";
100     }
101 </script>
102 </body>
103 </html>

布局说明:透明框的大小为图片的1/5,展示框的大小为放大后图片的1/5,展示框大小可变,但宽高按比例约束。

时间: 2024-08-24 10:26:47

Js特效之放大镜(淘宝商品展示)的相关文章

原生JS实现简单的淘宝放大镜效果

大家经常去淘宝买东西会发现,淘宝上的放大镜效果挺有意思的,这里简单的实现了下,代码中的图片地址 亲们可以自行更换; <!DOCTYPE html> <html> <head> <title>放大镜</title> <meta charset="utf-8" /> <style type="text/css"> *{ margin: 0; padding: 0; } body{ hei

新手学js的效果图1---( 淘宝等商城货物查看特效)

本人结合之前所学一起写了,多个特效,只是新手自己瞎鼓捣的,思路清晰,具体实现的货物放大镜等,替换当中的img地址就可以查看特效 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>卖娃娃</title> 6 <style> 7 #big{width:420px;height:3

淘宝——移动端页面终端适配

注:本文参考自:http://www.cnblogs.com/xianyulaodi/p/5533201.html 阅读目录 适配的要求 适配的方法,3个步骤 适配中背景图片的处理 适配的原理解析 摘要:在进行移动端界面的书写的时候,如果把宽度高度或者字体大小全部写死的话,那么在所有手机上看到的大小都一样,存在的问题就是同样大小的字体,或者一个盒子模型, 在大屏幕手机上看起来会有点偏小.比如iphone6PLUS.如果是做成适配的话,就很好的解决了这个问题,大屏幕显示的内容大一点,小屏幕显示的小

前端 抓取淘宝的产品 上架到拼多多

这里只是简单实现,因为时间比较急. 主要解决的问题是,淘宝的那款产品分类很多,拼多多一个一个添加分类太累了,受不了. 还有就是拼多多要求每个分类都必须有图片,这也是坑的一笔. 主要是js实现 抓取淘宝的分类 得到淘宝的分类数组: var arr = []; $("ul.J_TSaleProp li a span").each(function (index) { var item = $("ul.J_TSaleProp li a span")[index]; var

淘宝放大镜效果

淘宝放大镜效果,其实就是一张小图片,还有一张大图片.鼠标移动,按比例显示大图的一部分,在大图的父元素上设置overflow:hidden,就OK了.这里面需要注意换算好大小图的比例. 代码地址:https://github.com/peng666/blogs/tree/gh-pages/floats 在线测试地址:http://peng666.github.io/blogs/floats/

手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染

系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取 老规矩,爬之前首先感谢淘宝公布出这么多有价值的数据,才让我们这些爬虫们有东西可以搜集啊,不过淘宝就不用我来安利了 广大剁手党相信睡觉的时候都能把网址打出来吧. 工欲善其事,必先利其器,先上工具: 1.神箭手云爬虫,2.Chrome浏览器 3.Chrome的插件XpathHelper 不知道是干嘛的同学请移步第一课

JS淘宝商品广告效果

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JS淘宝商品广告效果</title> <style> ul{ margin: 0; padding: 0; } li{ list-style: none; } #ad{ width: 298px; height: 208px; border: 1

Java实现HMacMD5加密,用于淘宝客JS 组件 API 调用时生成 sign 的签名

原文:Java实现HMacMD5加密,用于淘宝客JS 组件 API 调用时生成 sign 的签名 源代码下载地址:http://www.zuidaima.com/share/1550463397874688.htm HMacMD5 加密纯 Java 实现,用于淘宝客 JS 组件 API 调用时生成 sign 的签名 另外:给大家贴一段淘宝客组件 API (JS API) 调用时,生成签名的核心代码. 另外:从事淘宝客开发的童鞋,碰到啥问题可以找我交流!!! String timestamp =

js实现淘宝首页图片轮播效果

原文:http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=10585 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>淘宝首页图片轮播效果</title> <style> <!-- * {margin: 0;padding:0;} body