原生js实现放大镜特效


Posted in Javascript onMarch 08, 2017

本文实例为大家分享了js实现放大镜特效的具体代码,供大家参考,具体内容如下

掌握页面元素定位和移动

放大镜关键原理:鼠标在小图片上移动时,通过捕捉鼠标在小图片上的位置定位大图片的相应位置

技术点:事件捕获、定位

offsetLeft与style.left的对比:
1)offsetLeft是与父级元素的距离,不包过滚动条的距离
2)style.left返回的是字符串,如30px,offsetLeft返回的是数值30
3)style.lft是可读写的,offsetLeft是只读的,所以要改变div的位置只能修改style.left
4)style.left的值需要事先定义,否则取到的值为空
难点:计算:如何让小图片的放大镜和大图片同步移动

距离定位图解:

原生js实现放大镜特效

具体代码:

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title></title>
</head>
<style type="text/css">
 *{
 margin: 0;
 padding: 0;
 }
 #demo{
 display: block;
 width: 400px;
 height: 255px;
 margin: 50px;
 position: relative;
 border: 1px solid #ccc;
 }
 #small-box{
 position: relative;
 z-index: 1;
 }
 #float-box{
 display: none;
 width: 160px;
 height: 120px;
 position: absolute;
 background: #ffffcc;
 border: 1px solid #ccc;
 filter: alpha(opacity=50);
 opacity: 0.5;
 }
 #mark{
 position: absolute;
 display: block;
 width: 400px;
 height: 255px;
 background-color: #fff;
 filter: alpha(opacity=0);
 opacity: 0;
 z-index: 10;
 }
 #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>
<script>
 window.onload=function(){
 var $=function(id){
  return document.getElementById(id);
 }
 var Demo = $("demo");
 var SmallBox = $("small-box");
 var Mark = $("mark");
 var FloatBox = $("float-box");
 var BigBox = $("big-box");
 var BigBoxImage = BigBox.getElementsByTagName("img")[0];
 Mark.onmouseover = function(){
  FloatBox.style.display = "block";
  BigBox.style.display = "block";
 }
 Mark.onmouseout = function(){
  FloatBox.style.display = "none";
  BigBox.style.display = "none";
 }
 Mark.onmousemove = function(e){
  var _event = e||window.event//兼容多个浏览器的参数模式
  var left = _event.clientX - Demo.offsetLeft - SmallBox.offsetLeft - FloatBox.offsetWidth/2;
  var top = _event.clientY - Demo.offsetTop - SmallBox.offsetTop - FloatBox.offsetHeight/2;
  if(left < 0){
  left = 0;
  }else if(left > Mark.offsetWidth - FloatBox.offsetWidth){
  left = Mark.offsetWidth - FloatBox.offsetWidth;
  }
  if(top < 0){
  top = 0;
  }else if(top > Mark.offsetHeight - FloatBox.offsetHeight){
  top = Mark.offsetHeight - FloatBox.offsetHeight;
  }
  FloatBox.style.left = left + 'px';
  FloatBox.style.top = top + 'px';
  var percentX = left / (Mark.offsetWidth - FloatBox.offsetWidth);
  var percentY = top / (Mark.offsetHeight - FloatBox.offsetHeight);
  BigBoxImage.style.left = -percentX * (BigBoxImage.offsetWidth - BigBox.offsetWidth)+'px';
  BigBoxImage.style.top = -percentY * (BigBoxImage.offsetHeight - BigBox.offsetHeight)+'px';
 }
 }
</script>
<body>
<div id="demo">
 <div id="small-box">
 <div id="mark"></div>
 <div id="float-box"></div>
 <img src="img/macbook-small.jpg" />
 </div>
 <div id="big-box">
 <img src="img/macbook-big.jpg" />
 </div>
</div>
</body>
</html>

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

Javascript 相关文章推荐
图片格式的JavaScript和CSS速查手册
Aug 20 Javascript
jQuery ui插件的使用方法代码实例
May 08 Javascript
jquery中选择块并改变属性值的方法
Jul 31 Javascript
js setTimeout()函数介绍及应用以倒计时为例
Dec 12 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
Jun 09 Javascript
理解JavaScript中worker事件api
Dec 25 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
Dec 25 Javascript
用jQuery实现优酷首页轮播图
Jan 09 Javascript
javascript实现下雨效果
Mar 27 Javascript
vue如何使用 Slot 分发内容实例详解
Sep 05 Javascript
JS删除String里某个字符的方法
Jan 06 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
Aug 28 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
Mar 08 #Javascript
正则 js分转元带千分符号详解
Mar 08 #Javascript
@ResponseBody 和 @RequestBody 注解的区别
Mar 08 #Javascript
js/jq仿window文件夹框选操作插件
Mar 08 #Javascript
js实现上下左右弹框划出效果
Mar 08 #Javascript
浅谈JavaScript正则表达式-非捕获性分组
Mar 08 #Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
Mar 08 #Javascript
You might like
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
跟我学Laravel之视图 &amp; Response
2014/10/15 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
如何基于python实现脚本加密
2019/12/28 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
大学毕业生自我鉴定
2013/11/05 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
世界红十字日活动总结
2015/02/10 职场文书
大学生就业意向书
2015/05/11 职场文书
2015年暑假生活总结
2015/07/13 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
班主任寄语2016
2015/12/04 职场文书
Python绘制分类图的方法
2021/04/20 Python
react antd实现动态增减表单
2021/06/03 Javascript