HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>放大镜效果</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<div id="box">
<div id="large-box">
<img src="data:images/1.jpg" id="large-img">
</div>
<div id="middle-box">
<img src="data:images/1.jpg" id="middle-img">
<div id="shadow"></div>
</div>
<div id="small-box">
<img src="data:images/1.jpg" class="active">
<img src="data:images/2.jpg">
<img src="data:images/3.jpg">
<img src="data:images/4.jpg">
</div>
</div>
<script src="index.js"></script>
</body>
</html>

  

 
CSS:
* {
margin: 0;
padding: 0;
} body {
background: #000;
} img {
vertical-align: bottom;
} #box {
position: relative;
margin: 10px;
padding: 10px;
width: 260px;
background: #fff;
}
#large-box {
display: none;
position: absolute;
top: 0;
left: 290px;
width: 260px;
height: 260px;
overflow: hidden;
}
#large-img {
position: absolute;
width: 520px;
height: 520px;
}
#middle-box {
position: relative;
}
#middle-img {
width: 100%;
}
#shadow {
display: none;
position: absolute;
left: 0;
top: 0;
width: 130px;
height: 130px;
background: rgba(255, 0, 0, .4);
cursor: move;
}
#small-box {
margin-top: 10px;
overflow: hidden;
}
#small-box img{
float: left;
width: 63px;
border: 1px solid #fff;
}
#small-box .active {
border-color: red;
}

  

js:
 
 
function $(id) {
return document.getElementById(id);
} var oBox = $('box');
var oSmallBox = $('small-box');
var aSmallImg = Array.from(oSmallBox.children);
var oMiddleBox = $('middle-box');
var oMiddleImg = $('middle-img');
console.log(oMiddleImg);
var oLargeBox = $('large-box');
var oLargeImg = $('large-img');
var oShadow = $('shadow'); // 给缩略图添加鼠标进入事件
aSmallImg.forEach( v => {
v.onmouseover = function () {
// 先去掉所有的class名
aSmallImg.forEach(v => v.className = ''); // 当前img添加class
this.className = 'active'; // 改变中型图片的地址
oMiddleImg.src = this.src; // 改变大型图片的地址
oLargeImg.src = this.src;
};
}); // 遮罩层最大的left和top值
var maxL = 0;
var maxT = 0;
// 大图片最大的left和top值
var maxLargeImgL = 0;
var maxLargeImgT = 0; // 鼠标进入middle-box
oMiddleBox.onmouseover = function () {
// 显示遮罩层
oShadow.style.display = 'block';
// 显示右侧的盒子
oLargeBox.style.display = 'block'; // 获取最大的left和top值
maxL = oMiddleBox.offsetWidth - oShadow.offsetWidth;
maxT = oMiddleBox.offsetHeight - oShadow.offsetHeight; maxLargeImgL = oLargeImg.offsetWidth - oLargeBox.offsetWidth;
maxLargeImgT = oLargeImg.offsetHeight - oLargeBox.offsetHeight;
}; // 鼠标离开middle-box
oMiddleBox.onmouseout = function () {
// 显示遮罩层
oShadow.style.display = 'none';
// 显示右侧的盒子
oLargeBox.style.display = 'none';
}; // 给middle-box添加移动事件
oMiddleBox.onmousemove = function (ev) {
var e = ev || window.event;
var iL = e.clientX - oShadow.offsetWidth / 2 - oMiddleBox.offsetLeft - oBox.offsetLeft;
var iT = e.clientY - oShadow.offsetHeight / 2 - oMiddleBox.offsetTop - oBox.offsetTop; // 限定左侧
if(iL < 0) {
iL = 0;
} // 限定上侧
if(iT < 0) {
iT = 0;
} // 限定右侧
if(iL > maxL) {
iL = maxL;
} // 限定下侧
if(iT > maxT) {
iT = maxT;
}
oShadow.style.left = iL + 'px';
oShadow.style.top = iT + 'px'; // 让大图移动
oLargeImg.style.left = - iL * maxLargeImgL / maxL + 'px';
oLargeImg.style.top = - iT * maxLargeImgT / maxT + 'px';
};
图片更换成自己的路径即可

js之放大镜效果的更多相关文章

  1. 原生js实现放大镜效果

    今天做任务的时候,有一个任务就是让实现电商网站常用的放大镜效果,类似于这样的效果,之前并没有做过这种放大镜效果,刚开始的思路是对图片进行裁剪,但是后来发现实在是难以实现,于是求助了万能的谷歌,发现一个 ...

  2. 使用js实现放大镜效果

    点击预览放大镜效果,图片比较大,因为需要精细的图片去凸显放大的效果,请耐心 可以通过滑轮控制放大倍数,由于图片太大 如果放大镜没有出现 可刷新一下网页

  3. JS实现放大镜效果(放大图片)

    注意:里边的两张图片(一大一小)可以自己添加,JQ采用jquery-1.11.3.js版,也可自行调换. HTML代码: <!DOCTYPE html> <html> < ...

  4. js实现放大镜效果

    原理: 鼠标在小图片上移动时,通过捕捉鼠标在小图片上的位置,定位大图片的相应位置: 放大镜的移动方向和大图片的移动方向:横向和纵向都是相反,才可以保证同步: 需要元素:大图和小图,存放大图和小图的容器 ...

  5. jquery+js实现鼠标位移放大镜效果

    jQuery实现仿某东商品详情页放大镜效果 用jquery+js实现放大镜效果,效果大概如下图! 效果是不是大家很感兴趣,放大镜查看细节,下边大家可以详细看一看具体是怎么实现的.下边直接看代码! HT ...

  6. javascript放大镜效果

    JS实现放大镜效果 首先我们先设想一下放大镜效果 1.当鼠标进入小盒子的时候,把大图片显示出来 2.当指定移动区域的时候,显示当前放大区域(放大效果) 3.鼠标移除我们让它消失 一.实现页面布局HTM ...

  7. 用js实现放大镜的效果

    第一次发博客,还有点小激动,本人现在正在天津上大学,希望以后从事前端这一行业,学习的时间不长,写博客为了记录自己的学习过程和收获,当然也算是巩固.可能写的东西不会像大牛那样高大上,只是一些基本的内容, ...

  8. Magnifier.js - 支持鼠标滚轮缩放的图片放大镜效果

    Magnifier.js 是一个 JavaScript 库,能够帮助你在图像上实现放大镜效果,支持使用鼠标滚轮放大/缩小功能.放大的图像可以显示在镜头本身或它的外部容器中.Magnifier.js 使 ...

  9. JS 文本输入框放大镜效果

    JS 文本输入框放大镜效果 今天下午研究了下 "文本输入框放大镜效果" 当然KISSY官网也有这种组件 请看kissy demo 其实这种效果 对于很多童鞋来说 应该并不陌生!我今 ...

随机推荐

  1. tomcat优化方案(转)

    1.内存设置(VM参数调优) (1).Windows环境下,是tomcat解压版(执行startup.bat启动tomcat) ,解决办法: 修改“%TOMCAT_HOME%\bin\catalina ...

  2. mysql索引的建立和使用

    转自[http://www.cnblogs.com/mywebname/articles/555696.html] 一.索引的概念        索引就是加快检索表中数据的方法.数据库的索引类似于书籍 ...

  3. spring boot2.1读取 apollo 配置中心1

    第一篇:搭建apollo配置中心 为什么选择apollo,我做了一些对比:   Diamond Disconf Apollo Spring Cloud Config 数据持久性 mysql mysql ...

  4. JVM与垃圾回收机制(GC)和类的生命周期

    JVM运行时数据区 GC(垃圾回收机制) 什么是垃圾回收机制: 在系统运行过程中,会产生一些无用的对象,这些对象占据着一定的内存,如果不对这些对象清理回收无用的是对象,可能会导致内存的耗尽,所以垃圾回 ...

  5. 通过spring整合activeMQ实现jms实例

    写的很详细 http://blog.csdn.net/leonardo9029/article/details/43154385

  6. C++11 auto类型说明符的使用

    编程的时候常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型.然而做到这一点很难,有时候根本做不到.为了解决这个问题.C++11新标准引入了auto类型说明符,用它就 能让编 ...

  7. 转载:Chrome 控制台不完全指南

    Chrome的开发者工具已经强大到没朋友的地步了,特别是其功能丰富界面友好的console,使用得当可以有如下功效: 更高「逼格」更快「开发调试」更强「进阶级的Frontender」 Bug无处遁形「 ...

  8. [洛谷P3811]【模板】乘法逆元

    P3811 [模板]乘法逆元 题意 求1-n所有整数在模p意义下的逆元. 分析 逆元 如果x满足\(ax=1(\%p)\)(其中a p是给定的数)那么称\(x\)是在\(%p\)意义下\(a\)的逆元 ...

  9. 使用XMLHttpRequest对象完成原生的AJAX请求

    1.大家眼中的Ajax 说到Ajax,只要有过前端开发经验的童鞋一定都不陌生,大都知道它就是一种与后端之间的通信技术,通过这个神奇的家伙,我们不用像传统表单那样填完信息一点提交就呼啦呼啦跳转了.Aja ...

  10. Python -- 使用pickle 和 CPickle对数据对象进行归档和解析

    经常遇到在Python程序运行中得到了一些字符串.列表.字典.对象等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据. 这个时候Pickle模块就派上用场了,它可以将对 ...