大家经常逛淘宝、天猫、京东这类网站的时候往往会看到一些图片展示的效果,例如:把鼠标放在图片上右侧会出现一个放大的预览区域,这就是所谓放大镜效果。今天闲着没事干,就打算复习一下JavaScript基础,用一下基础知识制作一个类似于淘宝的放大镜效果。

先说一下这个效果需要用到的一些基础知识:

css相对定位:position:absolute;

鼠标移入移出以及移动事件:onmouseover、onmouseout、onmousemove,记住这些事件一般不会单个出现

获取鼠标点击坐标:X轴:clientX,Y轴:clientY

当前元素相对于父元素的左位移:offsetLeft

当前元素相对于父元素的上位移:offsetTop

当前元素的实际高、宽度(不包括滚动条):offsetWidth、offsetHeight

球当前元素的最小值,最大值:Math.min()、Math.max();

话不多说直接上代码吧!

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>放大镜效果</title>
<style type="text/css">
*{
padding: 0;
margin: 0;
}
#demo{
display: block;
width: 400px;
height: 255px;
margin: 50px;
position: relative;
border: 1px solid #ccc;
}
#float-box{
position: relative;
z-index: 1;
}
#small-box{
display: none;
width: 160px;
height: 120px;
position: absolute;
background: #ffffcc;
border: 1px solid #ccc;
filter: alpha(opacity=50);
opacity: 0.5;
cursor: move;
}
#big-box{
display: none;
position: absolute;
top: 0;
left: 460px;
width: 400px;
height: 300px;
overflow: hidden;
border: 1px solid #ccc;
z-index: 1;}
#big-box img{
position: absolute;
z-index: 5;
}</style>
</head>
<body>
<div id="demo">
<div id="float-box">
<div id="small-box"></div>
<img src="../images/macbook-small.jpg">
</div>
<div id="big-box">
<img src="../images/macbook-big.jpg">
</div>
</div>
<script type="text/javascript">
window.onload = function(){//获取到需要的元素
var demo = document.getElementById('demo');
var smallBbox = document.getElementById('small-box');
var floatBox = document.getElementById('float-box');
var bigBox = document.getElementById('big-box');
var bigBoxImg = bigBox.getElementsByTagName('img')[0];floatBox.onmouseover = function(){
smallBbox.style.display = "block";
bigBox.style.display = "block";
}
floatBox.onmouseout = function(){
smallBbox.style.display = "none";
bigBox.style.display = "none";
}
floatBox.onmousemove = function(e){
var _event = e || event;
console.log(_event.clientY);
var l = _event.clientX - demo.offsetLeft - floatBox.offsetLeft - smallBbox.offsetWidth/2;//除2是因为让鼠标点出现在放大遮罩的中心位置
var t = _event.clientY - demo.offsetTop  - floatBox.offsetTop  - smallBbox.offsetHeight/2;var demoWidth = demo.offsetWidth;
var demoHeight = demo.offsetHeight;var smallBboxWidth = smallBbox.offsetWidth;
var smallBboxHeight = smallBbox.offsetHeight;
//鼠标可以移动的最大XY的距离
var maxX = demoWidth - smallBboxWidth;
var maxY = demoHeight - smallBboxHeight;l = Math.min(maxX,Math.max(0,l));
t = Math.min(maxY,Math.max(0,t));
smallBbox.style.left = l +"px";
smallBbox.style.top = t +"px";var percentX = l / (floatBox.offsetWidth - smallBboxWidth);//求出小图遮罩的坐标占可移动区域的比例
var percentY = t / (floatBox.offsetHeight - smallBboxHeight);bigBoxImg.style.left = -percentX *(bigBoxImg.offsetWidth - bigBox.offsetWidth) +"px";//大图对的移动方向和小图遮罩的移动方向相反
bigBoxImg.style.top  = -percentY*(bigBoxImg.offsetHeight - bigBox.offsetHeight)+"px";}
}
</script>
</body>
</html>

想要获得更多资料的  请微信搜索公众号 【热血科技】,关注一下即可。

原生javaScript实现淘宝放大镜效果相关推荐

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

    大家经常去淘宝买东西会发现,淘宝上的放大镜效果挺有意思的,这里简单的实现了下,代码中的图片地址 亲们可以自行更换; <!DOCTYPE html> <html> <hea ...

  2. 如何用源生js做出淘宝放大镜效果?

    如何用源生js写出淘宝的放大镜效果~? 1,先写出静态界面,分别是两个div,一个div放小图片,另一个div放大图片.(当然这两张图片是一样的,只是大小不一样.) 2.大的那张图片要用backgro ...

  3. js实现淘宝放大镜效果

    记得很久以前,小编就准备写个放大镜,但是种种原因导致,一直没有完成这个愿望,下面,让我们一起来实现这个常见的功能吧.不懂的同学,可能认为这很难细实现,觉得它很博大精深的样子,其实真了解他了,你会发现原 ...

  4. JavaScript仿淘宝京东放大镜效果(鼠标事件)------JavaScript学习之路10

    JavaScript仿淘宝京东放大镜效果 注意 一定计算好放大比例,本程序放大5倍,具体放大倍数,自定 效果 完整源码 <!DOCTYPE html> <html lang=&quo ...

  5. 【每日一练】原生js仿淘宝主图放大镜功能,附学习源码

    在我们的项目中,经常会遇到各种功能效果的实现,对于每一项功能的实现方式,都有很多种,这些实现方式没有好坏之分,只有适合与否,但是我个人建议,如果项目急就选择自己擅长的方式实现,比较完成工作更加重要嘛. ...

  6. JavaScript仿淘宝智能浮动

    JavaScript仿淘宝智能浮动 我们经常在淘宝网看到这样的特效,商品列表特别长,而商品列名称始终保持在最顶端.如果你把滚动条滚动至最上边了,那么它会自动判断是否到顶端了,然后一直置顶从而不怕遮挡. ...

  7. vue仿淘宝放大镜插件 vue-piczoom的使用问题

    vue仿淘宝放大镜插件 vue-piczoom npm install vue-piczoom--save //下载放大镜插件 使用的话就是直接引入 import picZoom from 'vue- ...

  8. 12月原生APP的淘宝客+代理系统完整前后端带完整安装教程

    csdn下载地址: https://download.csdn.net/download/dujiangdu123/13211764 源码是原生APP的淘宝客,UI很漂亮,内含安卓和苹果IOS前端.详 ...

  9. 弘辽科技:淘宝推广效果不好?是由哪些原因造成的?该如何解决?

    原标题<弘辽科技:淘宝推广效果不好?是由哪些原因造成的?该如何解决?> 毋庸置疑,使用推广工具对整体提高店铺数据有很大的帮助,效果也会更好.但有些淘宝卖家担心自己没有使用过推广工具,没有相 ...

最新文章

  1. 利用RMAN检测数据库坏块的脚本
  2. Oracle中启动和关闭的各种方式
  3. C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)...
  4. 【最近公共祖先】[COCI]STOGOVI
  5. 04/28/2010 类,对象,变量
  6. 令牌验证 token
  7. 百度图床带数据库版本源码支持获取外链
  8. Python学习入门基础:注释、变量基本使用、变量的命名
  9. .NET库和向后兼容的技巧——第3部分
  10. mysql for centos下载_CentOS下载mysql哪个版本
  11. 2023最新彩虹易支付源码免授权2.0版前台模板美化/用户中心美化
  12. Unity3D游戏中隐藏鼠标光标
  13. 基于模糊PID的柴油机调速系统
  14. Android OpenCV(三十二):霍夫直线检测
  15. Ansible-大总结(六)
  16. 低代码平台会取代COTS吗
  17. Window 下载安装 Kafka
  18. 老男孩培训学习心得分享,最真实的评价!
  19. 笔记本一插入U盘,就卡死,界面和鼠标不能动了问题?终于找到解决办法了
  20. Problem A: 小蛮腰

热门文章

  1. photoshop(ps) cs4中文版
  2. asp功放怎么装_功放音响怎么安装 安装功放音响方法介绍【详解】
  3. 2022年质量团队发展规划(软件测试方向)
  4. 故障艺术中的jpg数据格式使用
  5. 打造安全可信的通信服务,阿里云云通信发布《短信服务安全白皮书》
  6. android精品源码,跑马灯图片浏览器归属地下载!
  7. 我在 Greasy Fork 发布了第一个原创 JS 脚本(可搭配油猴安装使用)
  8. 前后端分离的在线考试系统
  9. CamWorks 铣削曲面
  10. 云GIS+数字孪生+微服务”技术的二三维一体化地理信息平台