用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 showModalDialog 多层模态窗口实现页面提交及刷新的代码
Nov 28 Javascript
javascript 获取页面的高度及滚动条的位置的代码
May 06 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
Jan 27 Javascript
EasyUI加载完Html内容样式渲染完成后显示
Jul 25 Javascript
js实现登录框鼠标拖拽效果
Mar 09 Javascript
详解Vue 非父子组件通信方法(非Vuex)
May 24 Javascript
JavaScript实现的搜索及高亮显示功能示例
Aug 14 Javascript
如何编写一个完整的Angular4 FormText 组件
Nov 18 Javascript
jQuery 改变P标签文本值方法
Feb 24 jQuery
解决vue单页路由跳转后scrollTop的问题
Sep 03 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
Dec 07 Javascript
vue data有值,但是页面{{}} 取不到值的解决
Nov 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
PHP函数getenv简介和使用实例
2014/05/12 PHP
浅谈php扩展imagick
2014/06/02 PHP
php文件操作相关类实例
2015/06/18 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
python插入数据到列表的方法
2015/04/30 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
Python实现快速计算词频功能示例
2018/06/25 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
英国女性时尚品牌:Apricot
2018/12/04 全球购物
个人简历自我评价
2014/01/06 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
法人授权委托书
2014/09/16 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
地雷战观后感
2015/06/09 职场文书
信息技术课教学反思
2016/02/23 职场文书
商业计划书范文
2019/04/24 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
spring boot实现文件上传
2022/08/14 Java/Android