用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 XMLHttpRequest对象全面剖析
Apr 24 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
Jul 03 Javascript
jquery的父子兄弟节点查找示例代码
Mar 03 Javascript
node.js中的fs.writeFile方法使用说明
Dec 14 Javascript
ionic组件ion-tabs选项卡切换效果实例
Aug 27 Javascript
Javascript中return的使用与闭包详解
Jan 11 Javascript
Web 开发中Ajax的Session 超时处理方法
Jan 19 Javascript
浅谈javascript的url参数parse和build函数
Mar 04 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
js使用swiper实现层叠轮播效果实例代码
Dec 12 Javascript
JS基于对象的链表实现与使用方法示例
Jan 31 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
php遍历目录方法小结
2015/03/10 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
thinkphp分页实现效果
2016/10/13 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
IE和Firefox下event事件杂谈
2009/12/18 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
调试Python程序代码的几种方法总结
2015/04/28 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
python3爬虫之设计签名小程序
2018/06/19 Python
python3使用pandas获取股票数据的方法
2018/12/22 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
Python requests设置代理的方法步骤
2020/02/23 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
大学社团活动策划书
2014/01/26 职场文书
教师业务培训方案
2014/05/01 职场文书
经管应届生求职信范文
2014/05/18 职场文书
护理专业求职信
2014/06/15 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA