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

实现图片放大的效果

做这个之前需要会
事件对象.clientX     这个是X轴
事件对象.clientY     这个是Y轴

1.元素.offsetLeft     获取盒子距离浏览器的距离元素.

2.offsetTop     获取盒子距离浏览器顶部的距离

这两个都是谁有定位我就看谁;

1.元素.offsetWidth     获取盒子的宽度元

2.素.offsetHeight    获取盒子的高度

我们要实现这样的效果:

结构:

在做项目之前我们必须先知道哪些元素是需要获取的:

图片中我们可以看出 w是大盒子不需要获取,leftBox 是我们需要获取
黄盒子因为我们需要控制里面的盒子进行移动;
rightBox是放大后的盒子获取;
里面的img也需要获取,我们需要移动的是rightBox 里面的图片而不是rightBox

获取元素

第一步:鼠标进入显示

onmouseenter是鼠标进入的意思

当我鼠标进入的时候在修改tool(小黄盒子的display属性)和右边盒子让他进入就显示

第二步:鼠标离开的时候隐藏

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201120214428601.png#pic_center)

onmouseleave是鼠标离开的意思

同理当我们鼠标离开的时候吧tool和右边(rightBox)的大盒子给他隐藏掉.

第三步:鼠标在左盒子移动黄盒子和右图都要移动

onmousemove鼠标在事件中移动的时候

e是事件对象。

  • 先来看第一步。
  • e.clicentX clicent是针对于浏览器而言,X代表水平方向
  • e.clicentY 同理针对Y轴;

offsetLeft上面我们也说了。offsetLeft是针对有定位的属性的距离,因为父盒子是body 有属性position:state静态定位
offsetTop是距离上面的的距离 如果不减去会变成这样:

所以我们需要减去盒子距离左边和上面的距离;

减去后:变成了这样

接下来需要减去自身的一半就可以了

首先我们需要获取黄色盒子的宽和高
offsetHeight获取盒子的高度;
offsetWidth获取盒子宽度;
接着就是出去他们自身的一半 / 2;

鼠标就会在黄色盒子的中间显示;
但是则会不是我们想要的效果;
我们不希望黄色的盒子超出leftBox盒子
这个时候我们就需要使用if进行判断一下;

x < 0 来判断是否到达了最左边如果到达了最左边吧0赋给x;
但是这样我们右边又会超出去这个时候我们需要判断一下右边的最大值;
x > 左边盒子宽度➖黄色的盒子就可以得到他一共可以移动多少距离;

同理上下也是这样:

好了这样我们的左侧盒子就算做完了;
下面是实现右侧放大盒子;


就这么两行代码

首先我们要先设置他的样式,左侧图片大小正好是400px 右侧盒子是800px
我们看到当我们在移动鼠标的时候放大的图片是反方向移动的所以我们在这里要添加(-)号取反 在哪这个去×他的x,y轴就可以放大图片了

素材:

右侧图片

左侧图片

html代码:

<div class="w">
  <div class="fdj">
   <div class="leftBox" id="_leftBox">
    <!-- 小图 -->
    <img src="img/m.jpg" alt=""/>
    <!-- 小黄盒子 -->
    <div class="tool" id="_tool"></div>
   </div>
   <div class="rightBox" id="_rightBox">
    <img id="_bImg" src="img/b.jpg" alt=""/>
   </div>
  </div>
</div>

css代码

* {
 margin:0;
 padding:0;
}

.w {
 width: 1190px;
 margin: 0 auto;

}
.fdj {
 margin-top: 20px;
}

.fdj .leftBox {
 width: 400px;
 height: 400px;
 border: 1px solid #ccc;
 float: left;
 position: relative;
}

.fdj .tool {
 width: 250px;
 height: 250px;
 background:gold;
 opacity:.5;
 filter:alpha(opacity=50);
 position: absolute;
 top:0;
 left: 0;
 cursor: move;
 /* 默认隐藏 */
 display: none;

}
/* 给小黄加上active 就会显示 */
.fdj .tool.active {
 display: block;
}

.fdj .rightBox {
 width: 500px;
 height: 500px;
 border:1px solid #ccc;
 float: left;
 overflow: hidden;
 /* 隐藏 */
 display: none;
 position: relative;
}
/* 加上active表示显示 */
.fdj .rightBox.active {
 display: block;
}

.fdj .rightBox img {
 position: absolute;
}

js代码:

// 获取元素
var leftBox = document.getElementById('_leftBox')
var tool = document.getElementById('_tool');
var rightBox = document.getElementById('_rightBox');
var bImg = document.getElementById('_bImg');
// 1、鼠标进入显示
  leftBox.onmouseenter = function () {
   tool.style.display = 'block';
   rightBox.style.display = 'block';
  }


// 2、鼠标离开隐藏
leftBox.onmouseleave = function () {
   tool.style.display = 'none';
   rightBox.style.display = 'none';
  }


// 3、鼠标在左盒子移动黄盒子和右图都要移动
leftBox.onmousemove = function (e) {
   // 修改黄盒子和右图left和top
   // 把鼠标的位置给黄盒子、获取鼠标位置
   var x = e.pageX - leftBox.offsetLeft - tool.offsetWidth / 2;
   var y = e.pageY - leftBox.offsetTop - tool.offsetHeight / 2;
   
   // 判断距离
   if (x < 0) {
    x = 0;
   } else if (x > leftBox.offsetWidth - tool.offsetWidth) {
    x = leftBox.offsetWidth - tool.offsetWidth;
   }

 

   if (y < 0) {
    y = 0;
   } else if (y > leftBox.offsetHeight - tool.offsetHeight) {
    y = leftBox.offsetHeight - tool.offsetHeight;
   }
   
   // 设置给黄盒子
   tool.style.left = x   'px';
   tool.style.top = y   'px';

   // console.log(x, y);
   // // left和top
   bImg.style.left = -2 * x   'px';
   bImg.style.top = -2 * y   'px';

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

用webAPI实现图片放大镜效果的更多相关文章

  1. 利用JavaScript实现仿京东放大镜效果

    这篇文章主要为大家详细介绍了如何利用JavaScript实现仿京东放大镜特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. 用webAPI实现图片放大镜效果

    这篇文章主要为大家详细介绍了用webAPI实现图片放大镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Flutter开发之支持放大镜的输入框功能实现

    在Flutter开发时,有时为了优化用户输入体验,往往会需要输入框支持在移动光标过程中可以出现放大镜功能。本文将为大家介绍实现的方法,需要的可以参考一下

  4. jQuery实现放大镜案例

    这篇文章主要为大家详细介绍了jQuery实现放大镜案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. 图片放大镜效果代码

    图片放大效果[CtrlA全选注:引入外部Js需再刷新一下页面才能执行]

  6. javascript实现电商放大镜效果

    这篇文章主要为大家详细介绍了javascript实现电商放大镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. jquery实现放大镜简洁代码(推荐)

    这篇文章主要介绍了jquery实现放大镜简洁代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下

  8. 基于jquery编写的放大镜插件

    这篇文章主要为大家详细介绍了基于jquery编写的放大镜插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. JS实现京东放大镜效果

    这篇文章主要为大家详细介绍了JS实现京东放大镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. 使用JavaScript实现简单图像放大镜效果

    图像放大镜在很多网站中都扮演着重要的角色,大多数开发人员使用 jquery 来创建图像放大镜。在本教程中,我将向大家展示如何使用 HTML、CSS 和 JavaScript 制作一个简单的图像放大镜,需要的可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部