用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 相关文章推荐
一个XML格式数据转换为图表的例子
Feb 09 Javascript
JQuery中的ready函数冲突的解决方法
May 17 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
Aug 07 Javascript
jQuery让控件左右移动的三种实现方法
Sep 08 Javascript
Node.js+Express配置入门教程详解
May 19 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
Jul 07 Javascript
ES6新特性七:数组的扩充详解
Apr 21 Javascript
详解vue.js 开发环境搭建最简单攻略
Jun 12 Javascript
JavaScript偏函数与柯里化实例详解
Mar 27 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
Sep 11 Javascript
Vue中使用better-scroll实现轮播图组件
Mar 07 Javascript
基于JavaScript实现贪吃蛇游戏
Mar 16 Javascript
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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
php 短链接算法收集与分析
2011/12/30 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
php自定义时间转换函数示例
2016/12/07 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
解决vue-cli输入命令vue ui没效果的问题
2020/11/17 Javascript
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
string = null 和string = ''的区别
2013/04/28 面试题
银行见习期自我鉴定
2014/01/29 职场文书
简历上的自我评价
2014/02/03 职场文书
创业女性典型材料
2014/05/02 职场文书
销售类求职信
2014/06/13 职场文书
老兵退伍标语
2014/10/07 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
如何用python绘制雷达图
2021/04/24 Python
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
python程序的组织结构详解
2021/12/06 Python