用js实现放大镜的效果的简单实例


Posted in Javascript onMay 23, 2016

第一次发博客,还有点小激动,本人现在正在天津上大学,希望以后从事前端这一行业,学习的时间不长,写博客为了记录自己的学习过程和收获,当然也算是巩固。可能写的东西不会像大牛那样高大上,只是一些基本的内容,当然我也会收藏一些我认为好的,不错的文章(其实最主要是我能看懂。。。。)。我相信以后自己也能够写出高大上的东西。加油!

废话说的有点多,说正事。前几天看了一段潭州教育的教学视频,其中的老师是用JQuery实现放大镜的效果(老师讲的是在是太慢,各种乱扯,跳着看的)。由于我还没有好好的学习过JQuery,但是那些基本的代码还是可以看懂的,所以就想拿现在正在学习的js练一下手,最后还是成功的实现了这个效果。

思路:先让move块和bimg块隐藏,当鼠标移动到box上时,使move块和bimg块显示,获取鼠标当前的位置,然后经过计算给与move块和bimg块适当的值实现放大镜效果(move块和bimg块的位置的计算后面有详细介绍)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>放大镜</title>
  <link href="css/bigimg.css" rel="stylesheet" />
  <script src="js/bigimg.js"></script>
</head>
<body onload="bigimg()">
  <div id="box">
    <img src="images/simg.jpg" alt="#">
    <div id="move"></div>
    <div id="bimg">
      <img id="b_bimg" src="images/bimg.jpg" alt="#">
    </div>
  </div>
</body>
</html>

css样式:

*{
  margin:0px;
  padding:0px;
}
#box{
  width:430px;
  height:430px;
  margin:100px;
  margin-left:17%;
  position:relative;//这里使用相对定位,好让其他的元素能依靠这个元素定位
}
#move{
  background-image:url(../images/move.png);
  width:220px;
  height:220px;
  position:absolute;
  left:0px;
  top:0px;
  display:none;//先让他隐藏,用js使其显示
}
#bimg{
  width:430px;
  height:430px;
  overflow:hidden;
  position:absolute;
  top:0px;
  left:450px;
  display:none;//先让他隐藏,用js使其显示
}
#bimg img{
  width:800px;
  height:800px;
  position:absolute;
  top:0px;
  left:0px;
}

Javascript:

function bigimg(){
  var bbox = document.getElementById("box");
  var bmove = document.getElementById("move");
  var bbimg = document.getElementById("bimg");
  var b_bimg = document.getElementById("b_bimg");
  bbox.onmouseover = function(){//鼠标移动到box上显示大图片和选框
    bbimg.style.display = "block";
    bmove.style.display="block";
  }
  bbox.onmouseout = function(){//鼠标移开box不显示大图片和选框
    bbimg.style.display = "none";
    bmove.style.display="none";
  }
  bbox.onmousemove = function(e){//获取鼠标位置
    var x = e.clientX;//鼠标相对于视口的位置
    var y = e.clientY;
    var t = bbox.offsetTop;//box相对于视口的位置
    var l = bbox.offsetLeft;
    var _left = x - l - bmove.offsetWidth/2;//计算move的位置
    var _top = y - t -bmove.offsetHeight/2;
    if(_top<=0)//滑到box的最顶部
      _top = 0;
    else if(_top>=bbox.offsetHeight-bmove.offsetHeight)//滑到box的最底部
      _top = bbox.offsetHeight-bmove.offsetHeight ;
    if(_left<=0)//滑到box的最左边
      _left=0;
    else if(_left>=bbox.offsetWidth-bmove.offsetWidth)//滑到box的最右边
      _left=bbox.offsetWidth-bmove.offsetWidth ;
    bmove.style.top = _top +"px";//设置move的位置
    bmove.style.left = _left + "px";
    var w = _left/(bbox.offsetWidth-bmove.offsetWidth);//计算移动的比例
    var h = _top/(bbox.offsetHeight-bmove.offsetHeight);
    var b_bimg_top = (b_bimg.offsetHeight-bbimg.offsetHeight)*h;//计算大图的位置
    var b_bimg_left = (b_bimg.offsetWidth-bbimg.offsetWidth)*w;
    b_bimg.style.top = -b_bimg_top + "px";//设置大图的位置信息
    b_bimg.style.left = -b_bimg_left + "px";
  }
    
}

效果图:

用js实现放大镜的效果的简单实例

1、move块的计算

用js实现放大镜的效果的简单实例

黑色箭头:

var x = e.clientX;//鼠标相对于视口的位置
var y = e.clientY;

红色箭头:

var t = bbox.offsetTop;//box相对于视口的位置
var l = bbox.offsetLeft;

橙色箭头:

var _left = x - l - bmove.offsetWidth/2;//计算move的位置
var _top = y - t -bmove.offsetHeight/2;

2、bimg块的计算

利用move块在可移动范围内的比例来设置大图的位置

move块的移动范围:

bbox.offsetWidth-bmove.offsetWidth

move块现在的坐标占可移动范围的比例:

var w = _left/(bbox.offsetWidth-bmove.offsetWidth);//计算移动的比例
var h = _top/(bbox.offsetHeight-bmove.offsetHeight);

bimg的移动范围:

b_bimg.offsetHeight-bbimg.offsetHeight

bimg的位置:

var b_bimg_top = (b_bimg.offsetHeight-bbimg.offsetHeight)*h;//计算大图的位置
var b_bimg_left = (b_bimg.offsetWidth-bbimg.offsetWidth)*w;

以上这篇用js实现放大镜的效果的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 事件属性绑定带参数的函数
Mar 13 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
Jul 04 Javascript
JavaScript数组对象赋值用法实例
Aug 04 Javascript
Bootstrap源码解读导航条(7)
Dec 23 Javascript
微信小程序 支付功能开发错误总结
Feb 21 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
Mar 09 Javascript
JavaScript中的return布尔值的用法和原理解析
Aug 14 Javascript
详解Node 定时器
Feb 26 Javascript
jQuery中常用动画效果函数知识点整理
Aug 19 jQuery
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
Jul 16 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
Sep 06 Javascript
js实现带有动画的返回顶部
Aug 09 Javascript
jQuery实现摸拟alert提示框
May 22 #Javascript
javascript实现标签切换代码示例
May 22 #Javascript
超实用的JavaScript代码段 附使用方法
May 22 #Javascript
JavaScript数组合并的多种方法
May 22 #Javascript
浅析JavaScript回调函数应用
May 22 #Javascript
为什么JavaScript没有块级作用域
May 22 #Javascript
全面解析Bootstrap中nav、collapse的使用方法
May 22 #Javascript
You might like
星际争霸秘籍
2020/03/04 星际争霸
收集的PHP中与数组相关的函数
2007/03/22 PHP
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
JavaScript版代码高亮
2006/06/26 Javascript
Prototype Number对象 学习
2009/07/19 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
详解EasyUi控件中的Datagrid
2017/08/23 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
vue实现图片上传功能
2020/05/28 Javascript
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
Python open()文件处理使用介绍
2014/11/30 Python
Python中一行和多行import模块问题
2018/04/01 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
董事长岗位职责
2013/11/30 职场文书
物业招聘计划书
2014/01/10 职场文书
回门宴新郎答谢词
2014/01/12 职场文书
幼儿教师工作感言
2014/02/14 职场文书
公司接待方案
2014/03/08 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
2015年劳动部工作总结
2015/05/23 职场文书