用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 相关文章推荐
node.js中的定时器nextTick()和setImmediate()区别分析
Nov 26 Javascript
jQuery中next()方法用法实例
Jan 07 Javascript
JS中产生标识符方式的演变
Jun 12 Javascript
js实现创建删除html元素小结
Sep 30 Javascript
JS延时提示框实现方法详解
Nov 26 Javascript
jquery select2的使用心得(推荐)
Dec 04 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
Dec 09 Javascript
javascript 动态生成css代码的两种方法
Mar 17 Javascript
AngularJS实现表单元素值绑定操作示例
Oct 11 Javascript
利用jsonp解决js读取本地json跨域的问题
Dec 11 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
May 20 Javascript
react中的DOM操作实现
Jun 30 Javascript
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多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
smarty中常用方法实例总结
2015/08/07 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
2016/01/11 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
深入理解JavaScript定时机制
2016/10/27 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
vue如何搭建多页面多系统应用
2020/06/17 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
python中快速进行多个字符替换的方法小结
2016/12/15 Python
Python内建模块struct实例详解
2018/02/02 Python
深入理解Django-Signals信号量
2019/02/19 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
初三物理教学反思
2014/01/21 职场文书
开学典礼感言
2014/02/16 职场文书
水利公司纪检监察自我鉴定
2014/02/25 职场文书
开门红主持词
2014/04/02 职场文书
详解Python为什么不用设计模式
2021/06/24 Python
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android