上例图:

 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
* {
margin: 0;
padding: 0;
} .box {
width: 350px;
height: 467px;
margin: 100px;
border: 1px solid #ccc;
position: relative;
/*overflow: hidden;*/
} .big {
width: 400px;
height: 400px;
position: absolute;
top: 0;
left: 360px;
border: 1px solid #ccc;
overflow: hidden;
/*display: none;*/
opacity: 0.1;
z-index: -1;
/*transform: translateX(-500px) scale(0);*/
transition: all .4s;
} .mask {
width: 175px;
height: 175px;
background: rgba(255, 255, 0, 0.4);
position: absolute;
top: 0px;
left: 0px;
cursor: move;
display: none;
} .small {
position: relative;
}
.box:hover .mask{
display: block;
}
.box:hover .big{
transform: translateX(0px) scale(1);
opacity: 1;
z-index: 1;
/*display: block;*/
}
</style>
</head>
<body>
<div class="box" id="box">
<div class="small"><!--小层-->
<img src="img/small2.jpg" width="350" alt=""/>
<div class="mask" id="mask"></div><!--遮挡层-->
</div>
<div class="big" id="big"><!--大层-->
<img src="img/big2.jpg" width="800" alt=""/><!--大图-->
</div>
</div>
</body>
</html>
<script>
/*以下注释的代码用CSS代替了*/
// var box = document.getElementById("box");
// var mask = document.getElementById("mask");
// var big = document.getElementById("big"); // box.onmouseover = function () {
// mask.style.display = "block";
// big.style.display = "block";
// }
// box.onmouseout = function () {
// mask.style.display = "none";
// big.style.display = "none";
// } /**
* 1.鼠标移上大分区,遮罩层和大图显示
* 2.鼠标移出大分区,遮罩层和大图隐藏
* 3.鼠标在大分区内移动的时候,遮罩层跟鼠标移动,大图也跟着移动
* */ var box = document.getElementById("box");
var mask = document.getElementById("mask");
var bigImg = document.getElementById("big").children[0];
box.onmousemove = function (event) {
var pageX = event.pageX;
var pageY = event.pageY;
// 数据有了,我们希望盒子跟着鼠标走
// 由于盒子是绝对定位,所以基于页面获取到的坐标要做处理
// 目标数据 = 鼠标在页面的坐标 - 大盒子距离页面的坐标
var boxOffsetLeft = box.offsetLeft ;
var boxOffsetTop = box.offsetTop;
var boxOffsetWidth = box.offsetWidth;
var boxOffsetHeight = box.offsetHeight; var maskOffsetWidth = mask.offsetWidth;
var maskOffseetHeight = mask.offsetHeight;
// 让鼠标在mask盒子中心拖拽移动
var mX = pageX - boxOffsetLeft -maskOffsetWidth/2;
var mY = pageY - boxOffsetTop - maskOffseetHeight/2;
// 以下判断mask盒子是否越出父盒子
if(mX < 0) {
mX = 0 ;
}
if(mY < 0) {
mY = 0 ;
}
if(mX > boxOffsetWidth - maskOffsetWidth) {
mX = boxOffsetWidth -maskOffsetWidth;
}
if(mY > boxOffsetHeight - maskOffseetHeight) {
mY = boxOffsetHeight - maskOffseetHeight;
}
// 设置mask盒子位置
mask.style.left = mX + "px";
mask.style.top = mY + "px";
// 获取比例设置大图等比例的位置
var bili = bigImg.offsetWidth/boxOffsetWidth;
bigImg.style.marginLeft = -mX*bili + "px";
bigImg.style.marginTop = -mY*bili + "px"; } </script>

JavaScript--放大镜的更多相关文章

  1. javascript放大镜效果

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

  2. JavaScript之放大镜效果

    在网上也浏览过许多关于JavaScript放大镜效果的文章,有的代码解释得些隐晦难懂,看的我头有点晕晕的╮(╯﹏╰)╭,我的心情是这样的: 吐槽完了,我们动动小鼠标,当鼠标经过下面这张美女图片时就实现 ...

  3. 【JavaScript】放大镜效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. [原创] JavaScript 图片放大镜插件 enlarge.js 以及移动版 enlarge.touch.js

    拖拖拉拉准本了一个月,终于把网站做好了.也终于可以分享这两个插件了.这两个插件,一个是 jQuery 版本,适合鼠标使用的,另一个是原生 JavaScript 制作,适合触摸屏使用(touch 事件) ...

  5. JavaScript之放大镜效果2

    在放大图片效果的同时,我们怎么原图和放大窗体增加间隔呢? 我们只需应用一个table就行了: 源码上: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML ...

  6. 原生javascript实现图片放大镜效果

    当我们在电商网站上购买商品时,经常会看到这样一种效果,当我们把鼠标放到我们浏览的商品图片上时,会出现类似放大镜一样的一定区域的放大效果,方便消费者观察商品.今天我对这一技术,进行简单实现,实现图片放大 ...

  7. 从零开始学习前端JAVASCRIPT — 11、JavaScript运动模型及轮播图效果、放大镜效果、自适应瀑布流

    未完待续...... 一.运动原理 通过连续不断的改变物体的位置,而发生移动变化. 使用setInterval实现. 匀速运动:速度值一直保持不变. 多物体同时运动:将定时器绑设置为对象的一个属性. ...

  8. javascript 实现图片放大镜功能

    淘宝上经常用到的一个功能是利用图片的放大镜功能来查看商品的细节 下面我们来实现这样一个功能吧,原理很简单: 实现一个可以随鼠标移动的虚框 在另外一个块中对应显示虚框中的内容 实现思路: 虚框用css中 ...

  9. javascript图片放大镜效果展示

    javascript图片放大镜效果展示 <!DOCTYPE html> <html> <head lang="en"> <meta cha ...

  10. JavaScript仿淘宝实现放大镜效果的实例

    我们都知道放大镜效果一般都是用于一些商城中的,列如每当我们打开淘宝,天猫等pc端时,看到心仪的物品时,点击图片时,便呈现出放大镜的效果.在没有去理解分析它的原理时,感觉非常的神奇,当真正地去接触,也是 ...

随机推荐

  1. Ionic 分享功能(微博 微信 QQ)

    1.安装插件 cordova plugin add cordova-plugin-wechat --variable wechatappid=你申请微信appid cordova plugin add ...

  2. 历届试题_DNA比对

    脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子.它由4种主要的脱氧核苷酸(dAMP.dGMP.dCMT和dTMP)通过磷酸二酯键连接而成.这4种核苷酸可以分别记为:A.G.C.T.     ...

  3. 大牛就别进来了.npm --save-dev --save 的区别

    --save-dev 是你开发时候依赖的东西,--save 是你发布之后还依赖的东西. 比如,你写 ES6 代码,如果你想编译成 ES5 发布那么 babel 就是devDependencies.如果 ...

  4. 强制以32位ie运行程序

    最近被一个问题给郁闷住了.给电脑重装系统后,发现发布好的程序.或者VS2012总是以64位ie运行程序,这样的话skyline的三维控件无法显示.到现在我是确定ie64无法识别skyline的控件. ...

  5. spring cloud深入学习(十一)-----服务网关zuul

    前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服务集群配置中心,似乎一个 ...

  6. JDBC中DAO+service设计思想

    一.DAO设计思想 a) Data access Object(数据访问对象):前人总结出的一种固定模式的设计思想. 高可读性. 高复用性. 高扩展性. b) JDBC代码实现的增删改查操作是有复用需 ...

  7. react-native start停止在Loading dependency graph, done.

    在试验的过程中. 发现运行 react-native start会卡住,停留在Loading dependency graph, done. 原因大概是之前运行过 react-native run-a ...

  8. LA3882 And Then There Was One

    And Then There Was One https://vjudge.net/problem/UVALive-3882 题目大意:n个数编号1..n排成一圈,第一次删除m,后来每k个删除一个(下 ...

  9. Django项目:CRM(客户关系管理系统)--31--23PerfectCRM实现King_admin数据删除

    登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html # king_urls.py # ————————02PerfectCRM创建ADMIN页面—— ...

  10. 从零开始Android逆向教程(二)——什么是Xposed

    前言在阅读本文之前,假设你的手机已经root,并且已经成功安装好了 XposedInstaller. Xposed是什么?       Xposed 是一个 Android 平台上的动态劫持框架,通过 ...