文章目录

  • 效果
  • 引用组件
  • 实现原理
    • CSS部分
    • React JS部分
    • 参考文章
    • Github源码

效果

引用组件

import React from 'react';
import ImageMagnifier from "./ImageMagnifier";
class ImgDemo extends React.Component{constructor(props) {super(props);this.state={// 略缩图:minImg:"./small.jpg",// 高清图maxImg:"./large.jpg",}}render(){const {minImg,maxImg} = this.state;return(<ImageMagnifier minImg={minImg} maxImg={maxImg}/>)}
}
export default ImgDemo;

实现原理

在左边的盒子中放入图片的缩略图,右边的盒子只有在鼠标放上去时显示,并且放置的是对应图片的大图,这个大图只在右边盒子中显示出局部。

鼠标放在左边缩略图的时候,会出现一个遮罩层(mask),这个mask覆盖缩率图的位置会在右边的盒子中“局部放大”显示。(只显示右边图片的局部)。

遮罩层大小 / 缩略图大小 = 放大部分 / 图片原始大小

当鼠标在左边缩略图中移动时,会带着这个遮罩层移动。获取遮罩层(mask)在小图中的位置,然后改变对应大图在右边盒子中局部显示的位置。

当遮罩层向下移动的时候,这个大图向上等比例移动。只需要把溢出的部分隐藏(overflow:hidden)即可达到放大效果。

大图宽度/缩略图显示的宽度 = 图片移动的距离 / mask移动的距离

CSS部分

注意事项:

遮罩层和图片放大镜容器应该设置为 绝对定位absolute 而且起始是 隐藏的, 父元素相对定位 relative,这样遮罩层可以在父元素中移动。

关于css position可以看阮一峰的css定位详解

React JS部分

获取mask在盒子中的坐标:

  1. 获取鼠标在整个页面的位置;
  2. 获取盒子在浏览器左上角的位置;
  3. 鼠标在缩略图区域的坐标(localX & localY)= 鼠标在整个页面的位置 - 盒子在浏览器左上角的位置
  4. 再用localXlocalY减去mask宽高的一半,即为遮罩层左上角的坐标。

然后把遮罩层加到页面上,但需要判断是否溢出——即mask左上角坐标是否在盒子中,如果溢出,就改变左上角坐标使得盒子与边界部分重叠。——到达边界时,鼠标可以在遮罩层的靠近边界区域随意移动,而遮罩层不动

最后进行等比例移动大图。

 calculationBlock(offsetx,offsety){let cssStyle = JSON.parse(JSON.stringify(this.state.cssStyle))let offsetX =  offsetx - 50;  // 鼠标在盒子中的位置 - mask宽的一半let offsetY = offsety - 50; // 鼠标在盒子中的位置 - mask高的一半/*block position*/// 防止鼠标移动过快导致计算失误,只要小于或大于对应值,直接设置偏移量等于最小或最大值// left 取值为 大于 0, 小于 盒子的宽 - mask的宽if(offsetX < 0){offsetX = 0;}if(offsetX > 350){offsetX = 350;}// top 取值为 大于0 ,小于 盒子的高 - mask的高if(offsetY< 0){offsetY = 0;}if(offsetY > 350){offsetY = 350;}// 移动maskcssStyle.mouseBlock.left = parseFloat(offsetX) +"px";cssStyle.mouseBlock.top = parseFloat(offsetY ) + "px";/*计算图片放大位置*/// 右侧大图片,等比例移动// 大图片走的距离 / mask 走的距离 = 大图片 / 小图片let  bigImg = document.querySelector(".big img")// <img  className={'small img'} style={cssStyle.imgStyle} src={minImg}/> let smallImg = document.querySelector('.small img')let ratio = bigImg.offsetWidth / smallImg.offsetWidth;cssStyle.imgStyle2.left = - parseFloat( (offsetX) * ratio) +"px";cssStyle.imgStyle2.top = - parseFloat((offsetY) *ratio) + "px";this.setState({cssStyle:cssStyle,});}

参考文章

放大器组件
react写一个仿淘宝图片放大器

Github源码

源码地址

使用react完成图片放大功能(淘宝放大镜)相关推荐

  1. java下载图片到本地,例如从网上下载图片,下载淘宝图片,下载百度图片等

    java下载图片到本地,例如从网上下载图片,下载淘宝图片,下载百度图片. 直接上代码如下: public static void download(String url,String saveFile ...

  2. jQuery插件Magnify放大镜实现javascript图片放大功能

    jQuery插件Magnify放大镜实现javascript图片放大功能 博客所有文章均属原创作品,如有转载,请注明作者:biuuu,来源:http://www.biuuu.com/?p=459 有时 ...

  3. h5 - PhotoSwipe图片放大功能集成和使用

    说明: PhotoSwipe图片放大功能的简单demo.          重要代码: 1.html中引入js和css文件,和一段固定的代码 <!-- PhotoSwipe styles --& ...

  4. vue仿淘宝放大镜插件 vue-piczoom的使用问题

    vue仿淘宝放大镜插件 vue-piczoom npm install vue-piczoom--save //下载放大镜插件 使用的话就是直接引入 import picZoom from 'vue- ...

  5. 用iSee图片专家制作淘宝店标教程

    普通的淘宝店铺都会有店标.店标都显示在店铺首页的显现位置,买家在逛淘宝店的时候,一眼都会瞄到店标.因此,如果可以制作一个专属于自己店铺的店标,可以吸引买家的眼光,也更好地宣传了店铺. 下面就用iSee ...

  6. angular仿微信图片放大功能

    近期要写一个移动端两个手指图片放大的功能,由于我们项目是angular框架.一时间没有思路只能百度找一些angualr的文档,果然一下就出来了,而且非常实用.我用根据自己的需求改动了一下,最后完成的效 ...

  7. html css3不拉伸图片显示效果,类似淘宝的

    1.利用transform属性不拉伸显示图片,(路径问题需要按需求修改): html: <div id="surface-div1"> <img :src=&qu ...

  8. winform窗体上图片放大功能

    今天遇到点击图片,所点部位实现放大的功能,网上也有很多资料,记录下自己写的. 窗体上放置两个pictureBox控件,第一个添加image,属性SizeMode设置为StretchImage.可以开始 ...

  9. 小程序富文本图片放大功能

    // 富文本图片放大 function richImg(txt) {//txt 指的是接口返回的富文本// 主要代码let imgarr = [];let regex = new RegExp(/&l ...

最新文章

  1. (原创)JAVA注解应用——实现属性的自动检测
  2. 不完全恢复分类与命令
  3. 新装WINDOWS XP系统 必须安装的十大高危漏洞补丁
  4. php 去掉url中的index.php,php 去掉url中的index.php
  5. [导入]存储过程-分隔符号-多条件查询
  6. 60-170-040-使用-Time-Flink时间系统系列之实例讲解-如何做定时输出
  7. 如何在Android中设置铃声+震动
  8. CentOS Bash 命令补全增强软件包 bash-completion
  9. 22个开源的PHP框架
  10. vi编辑文件时如何批量替换字符串
  11. linux超出频率限制黑屏,linux suse 超出频率限制 问题
  12. 教育培训机构拼团招生小程序公众号
  13. 这一年,我“生病”了
  14. C语言绘图示例-调色板
  15. 《小猫猫大课堂》1——小喵是如何开启敲代码之路的?
  16. LLVM中的pass及其管理机制
  17. matlab两条曲线方程求交点_帮忙matlab求两条曲线交点程序,不知问题出在哪里。...
  18. vsCode好用插件记录
  19. 《算法之美》-- 读书笔记(4)-- 2019
  20. 百度Sugar BI 数据可视化里的标签页组件如何实现

热门文章

  1. 打印机服务器ip修改,打印机服务器ip设置
  2. 《具体数学》部分习题解答4
  3. 百度关键词分析工具_【轰炸类】关键词百度首页分析【澳门XXX】【实战分析】...
  4. 四棱锥和三棱锥重叠求面数
  5. 网页搜索指定网站内容site
  6. 3DMAX软件可以运用到哪些行业?次世代游戏建模怎么样?
  7. MySQL--新手必备SQL基础知识、事务ACID及隔离级别
  8. 基于threejs的商品VR展示平台的设计与实现思路
  9. 【机房重构】一步一步往上爬——数据库设计
  10. ABP VNext学习日记14