用webAPI实现图片放大镜效果


Posted in Javascript onNovember 23, 2020

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

实现图片放大的效果

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

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

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

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

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

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

我们要实现这样的效果:

结构:

用webAPI实现图片放大镜效果

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

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

用webAPI实现图片放大镜效果

第一步:鼠标进入显示

用webAPI实现图片放大镜效果

onmouseenter是鼠标进入的意思

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

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

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

onmouseleave是鼠标离开的意思

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

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

用webAPI实现图片放大镜效果

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

e是事件对象。

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

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

用webAPI实现图片放大镜效果

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

减去后:变成了这样

用webAPI实现图片放大镜效果

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

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

用webAPI实现图片放大镜效果

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

用webAPI实现图片放大镜效果

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

用webAPI实现图片放大镜效果

同理上下也是这样:

用webAPI实现图片放大镜效果

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

用webAPI实现图片放大镜效果

就这么两行代码

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

素材:

右侧图片

用webAPI实现图片放大镜效果

左侧图片

用webAPI实现图片放大镜效果

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';

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

Javascript 相关文章推荐
短信提示使用 特效
Jan 19 Javascript
js如何实现设计模式中的模板方法
Jul 23 Javascript
简介JavaScript中toUpperCase()方法的使用
Jun 06 Javascript
javascript数字验证的实例代码(推荐)
Aug 20 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
Apr 26 jQuery
简单谈谈React中的路由系统
Jul 25 Javascript
记录一篇关于redux-saga的基本使用过程
Aug 18 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
Dec 11 jQuery
微信小程序外卖选购页实现切换分类与数量加减功能案例
Jan 15 Javascript
详解express使用vue-router的history踩坑
Jun 05 Javascript
jquery插件开发模式实例详解
Jul 20 jQuery
vue中div禁止点击事件的实现
Apr 02 Vue.js
Vue 的 v-model用法实例
Nov 23 #Vue.js
JavaScript实现网页留言板功能
Nov 23 #Javascript
VUE+Element实现增删改查的示例源码
Nov 23 #Vue.js
js观察者模式的弹幕案例
Nov 23 #Javascript
js异步接口并发数量控制的方法示例
Nov 22 #Javascript
Vue实现购物小球抛物线的方法实例
Nov 22 #Vue.js
ES6学习教程之Promise用法详解
Nov 22 #Javascript
You might like
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python+django实现简单的文件上传
2016/08/17 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python3.4解释器用法简单示例
2019/03/22 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
贯彻学习两会心得体会范文
2014/03/17 职场文书
校企合作协议书
2014/04/16 职场文书
关于热爱祖国的演讲稿
2014/05/04 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
人民调解协议书
2016/03/21 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL