用js制作淘宝放大镜效果


Posted in Javascript onOctober 28, 2020

本文实例为大家分享了js制作淘宝放大镜效果的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title></title>
  <style type="text/css">
   *{
    margin: 0;
    padding: 0;
   }
   img{
    width: 100%;
    height: 100%;
   }
   #content{
    width: auto;
    height: auto;
    margin-left: 200px;
    margin-top: 60px;
   }
   #content-left{
    position: relative;
    width: 420px;
    height: auto;
    float: left;
   }
   #middle{
    border: 1px solid #d2d2d2;
    width: 418px;
    height: 418px;
   }
   #small{
    width: 420px;
    height: auto;
   }
   #glass{
    position: absolute;
    width: 200px;
    height: 200px;
    background-color: pink;
    top: 0;
    opacity: 0.5;
    z-index: 1;
    display: none;
   }
   ul{
    width: inherit;
    height: 60px;
   }
   ul li{
    display: inline;
    height: 60px;
    list-style: none;
    float: left;
    margin: 10px;
   }
   #content-right{
    position: relative;
    width: 418px;
    height: 418px;
    border: 1px solid #ccc;
    float: left;
    margin-left: 10px;
    overflow: hidden;
    display: none;
   }
   #content-right img{
    position: absolute;
    width: 836px;
    height: 836px;
   }
  </style>
 </head>
 <body>
  <div id="content">
   <div id="content-left">
    <div id="middle">
     <div id="glass"></div>
     <img src="img/01.jpg"/>
    </div>
    <div id="small">
     <ul>
      <li><img src="img/1.jpg"/></li>
      <li><img src="img/2.jpg"/></li>
      <li><img src="img/3.jpg"/></li>
      <li><img src="img/4.jpg"/></li>
      <li><img src="img/5.jpg"/></li>
     </ul>
    </div>
   </div>
   <div id="content-right">
    <img src="img/001.jpg"/>
   </div>
  </div>
 </body>
 <script type="text/javascript">
  var smallLi = document.getElementById("small").getElementsByTagName("ul")[0].getElementsByTagName("li");
  var middle = document.getElementById("middle")
  var middleImg = middle.getElementsByTagName("img")[0]
  var contentRight = document.getElementById("content-right");
  var bigImg = contentRight.getElementsByTagName("img")[0]
  var glass = document.getElementById("glass");
  //获取放大镜大小
  var bigImgWidth = getStyle(bigImg,"width");
  var bigImgHeight = getStyle(bigImg,"height");
  var contentRightWidth = getStyle(contentRight,"width");
  var contentRightHeight = getStyle(contentRight,"height");
  var middleWidth = getStyle(middle,"width");
  var middleHeight = getStyle(middle,"height");
  var glassWidth = contentRightWidth/bigImgWidth*middleWidth;
  var glassHeight = contentRightHeight/bigImgHeight*middleHeight;
  var middleBorder = getStyle(middle,"border")
  glass.style.width = glassWidth + "px";
  glass.style.height = glassHeight + "px";
  for(var i =0;i<smallLi.length;i++){
   (function(index){
    smallLi[i].onmouseover = function(){
     middleImg.src = "img/0"+index+".jpg";
     bigImg.src = "img/00"+index+".jpg"
    }
   })((i+1));
  }
  middle.onmouseover = function(){
   contentRight.style.display = "block"
   glass.style.display = "block"
   middle.onmousemove = function(ev){
    var evt = ev||event
    var x = evt.x - content.offsetLeft -glass.offsetWidth/2 + window.scrollX - middleBorder
    var y = evt.y - content.offsetTop - glass.offsetHeight/2 + window.scrollY - middleBorder
    if(x<=middleBorder){
     x = middleBorder;
    }
    if(x>=middle.offsetWidth-glass.offsetWidth-middleBorder){
     x = middle.offsetWidth - glass.offsetWidth -middleBorder;
    }
    if(y<=middleBorder){
     y = middleBorder;
    }
    if(y>=middle.offsetHeight-glass.offsetHeight-middleBorder){
     y = middle.offsetHeight - glass.offsetHeight - middleBorder;
    }
    glass.style.left = x + "px"
    glass.style.top = y + "px"
    bigImg.style.left = -x*middleWidth/glassWidth + middleBorder*2 + "px"
    bigImg.style.top = -y*middleHeight/glassHeight + middleBorder*2 + "px"
    console.log(x)
    console.log(x*middleWidth/glassWidth)
   }
   middle.onmouseout = function(){
    contentRight.style.display = "none";
    glass.style.display = "none";
   }
  }
  function getStyle(obj,attr){//获取css属性
   return (obj.currentStyle)?parseInt(obj.currentStyle[attr]):parseInt(getComputedStyle(obj,false)[attr]);
  }
 </script>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ext for eclipse插件安装方法
Apr 27 Javascript
jQuery中:last选择器用法实例
Dec 30 Javascript
javascript实现随时变化着的背景颜色
Apr 02 Javascript
在Javascript中处理数组之toSource()方法的使用
Jun 09 Javascript
WEB 前端开发中防治重复提交的实现方法
Oct 26 Javascript
基于slideout.js实现移动端侧边栏滑动特效
Nov 28 Javascript
纯原生js实现table表格的增删
Jan 05 Javascript
thinkjs 文件上传功能实例代码
Nov 08 Javascript
详解微信小程序中组件通讯
Oct 30 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
Sep 23 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
Jun 17 Javascript
jQuery treeview树形结构应用
Mar 24 jQuery
js实现百度搜索提示框
Feb 05 #Javascript
jQuery.Form上传文件操作
Feb 05 #Javascript
jQuery实现最简单实用的分秒倒计时
Feb 05 #Javascript
用jquery的attr方法实现图片切换效果
Feb 05 #Javascript
JavaScript编写九九乘法表(两种任选)
Feb 04 #Javascript
JS动态生成年份和月份实例代码
Feb 04 #Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
Feb 04 #Javascript
You might like
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
PHP中设置时区方法小结
2012/06/03 PHP
php 如何获取数组第一个值
2013/08/06 PHP
php的一个简单加密解密代码
2014/01/14 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
php目录拷贝实现方法
2015/07/10 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
js 弹出菜单/窗口效果
2011/10/30 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
2018/08/10 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
python3连接MySQL数据库实例详解
2018/05/24 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
SteelSeries赛睿官网:游戏外设和配件的领先制造商(耳机、键盘、鼠标和鼠标垫)
2018/06/17 全球购物
在校生钳工实习自我鉴定
2013/09/19 职场文书
五年后的职业生涯规划
2014/03/04 职场文书
学习决心书
2014/03/11 职场文书
高中课程设置方案
2014/05/28 职场文书
委托书的格式
2014/08/01 职场文书
党员自我剖析材料
2014/08/31 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android