用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 相关文章推荐
jQuery实现返回顶部功能适合不支持js的浏览器
Aug 19 Javascript
JavaScript基本语法讲解
Jun 03 Javascript
基于jQuery实现搜索关键字自动匹配功能
Mar 26 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
Dec 04 Javascript
js表单验证实例讲解
Mar 31 Javascript
下一代Bootstrap的5个特点 超酷炫!
Jun 17 Javascript
微信小程序自定义导航隐藏和显示功能
Jun 13 Javascript
浅谈angular4生命周期钩子
Sep 05 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
JS实现换肤功能的方法实例详解
Jan 30 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
Apr 17 Javascript
JavaScript手写数组的常用函数总结
Nov 22 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脚本的10个技巧(3)
2006/10/09 PHP
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
五一服装活动方案
2014/01/11 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
Python机器学习之逻辑回归
2021/05/11 Python