前端放大镜效果实现

这篇具有很好参考价值的文章主要介绍了前端放大镜效果实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

放大镜效果实现

放大图片的需求,一般是在原有的渲染之上,额外添加一个放大框,当鼠标在原图上移动,放大框内就以当前的鼠标为中心,局部放大一定范围,在淘宝商城中是常有的实现。下面将用两种实现。

1、使用div + img 标签,原理是放大框中有一个图片,这个图片是放大后的,放大框大小固定,图片超出的部分隐层overflow: hidden,只需要调整图片的位置即可

2、使用两个canvas 其中一个用于渲染原图,另外一个做放大框,通过找到鼠标在原图位置,再选择出需要放大的范围,通过canvas方法渲染到放大框中

原图:这个可以下载下来去测试代码

前端放大镜效果实现

效果图: 红色框是手动标注,如果需要可以额外实现,左边的框是原图,右边的框是放大后的图,这里放大的倍数 代码里面抽离出去用一个变量zoom 控制,免得难缠的产品经理对放大的大小有意见,切来切去也方便

1、div img实现放大镜

  1. 初始化:初始化放大倍数zoom、原图canvas1、放大图canvas2

  2. 加载图片:引入放大的图片,在图片加载成功后获取宽高,依次设置原图canvas1宽高并渲染、放大图canvas2宽高、鼠标监听事件

  3. 开始监听:监听鼠标在原图canvas1中的相对于左上角的位置,再计算出需要放大的范围,在放大图canvas2中渲染,注意每次渲染新的放大图要把画布清空,否则在边界的时候会出现重影

  4. 效果图:前端放大镜效果实现

// html
    <canvas id="canvas1"></canvas>
    <canvas id="canvas2" style="background: #eee;"></canvas>
// js
  // 1、初始化
  let zoom = 2
  let canvas1 = document.querySelector("#canvas1");
  let ctx1 = canvas1.getContext("2d");
  let canvas2 = document.querySelector("#canvas2");
  let ctx2 = canvas2.getContext("2d");

  // 2、加载图片
  let img = new Image();
  img.src = "./good.png";
  img.onload = () => {
    let { width, height } = img
    //设置原图 
    canvas1.width = width
    canvas1.height = height
    ctx1.drawImage(img, 0, 0, width, height);
    // 设置放大图
    canvas2.width = width
    canvas2.height = height
    // 开起鼠标监听,移动的时候放大图片
    canvas1.addEventListener("mousemove", mouseHandler)
  }

  // 3、放大图片
  function mouseHandler(e) {
    let x = e.clientX
    let y = e.clientY
    // 每次清空整个画布
    let { width, height } = canvas2
    ctx2.clearRect(0, 0, canvas2.width, canvas2.height);
    ctx2.drawImage(img, x-width/2/zoom, y-height/2/zoom, width/zoom, height/zoom, 0, 0, width, height);
    // 第1个参数 确定原图
    // 第2、3个参数 确定鼠标所在放大范围左上角
    // 第4、5个参数 确定裁剪的大小,为放大范围
    // 第6、7、8、9个参数 确定绘制的位置和大小
  }

2、canvas 实现放大镜

  1. 初始化:初始化放大倍数zoom、原图img1、放大图盒子img2Box、放大图img2

  2. 加载图片:获取图片的大小后,设置dom大小,开起鼠标监听

  3. 放大图片:通过放大倍数计算放大的范围,计算相对位置移动放大图到指定位置

  4. 效果图:前端放大镜效果实现文章来源地址https://www.toymoban.com/news/detail-479573.html

//html
    <img id="img1" src="./good.png" alt="">
    <div id="img2-box">
      <img id="img2" src="./good.png" alt="">
    </div>
//js
  // 1、初始化
  let zoom = 3
  let img1 = document.querySelector("#img1");
  let img2Box = document.querySelector("#img2-box");
  let img2 = document.querySelector("#img2");
  
  // 2、加载图片
  let img = new Image();
  img.src = "./good.png";
  img.onload = () => {
    let { width, height } = img
    img1.width = width
    img1.height = height
    img2Box.style.width = width
    img2Box.style.height = height
    img2.width = width * zoom
    img2.height = height * zoom
    // 开起鼠标监听,移动的时候放大图片
    img1.addEventListener("mousemove", mouseHandler)
  }

  // 3、放大图片
  function mouseHandler(e) {
    let { width, height } = img
    let x = e.clientX
    let y = e.clientY
    img2.style.left = -x*zoom + width/2
    img2.style.top = -y*zoom + height/2
  }

到了这里,关于前端放大镜效果实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Axure视频教程】放大镜效果

    今天教大家在Axure里如何制作放大镜效果的原型模板,鼠标移入小图后,会出现一个方框根跟随鼠标移动,右侧会放大显示该方框区域的内容,具体效果可以参考下方视频。该教程从0开始制作,手把手教学,无论是新手小白还是有一定基础的同学,都可以学习的哦。 【视频教

    2024年02月13日
    浏览(60)
  • 20230401----重返学习-冒泡相关事件-拖拽-放大镜

    mouseenter/mouseleave与mouseover/mouseout mouseover/mouseout 有冒泡,忽略层级之间的关系 mouseenter/mouseleave 没冒泡,不会忽略层级之间的关系 事件委托 事件委托: 也叫事件代理,将绑定的事件委托给祖先元素,祖先元素监听事件,并利用e.target来分配给当前元素 原理是: 事件冒泡机制 事

    2023年04月08日
    浏览(40)
  • 记录--js小练习(弹幕、 电梯导航、 倒计时、 随机点名、 购物放大镜)

    弹幕 电梯导航 倒计时 随机点名 购物放大镜 效果预览 功能:输入弹幕内容,按下回车显示一条弹幕(弹幕颜色、字体随机生成) 思路:设置按钮抬起事件,在事件中判断如果按下的是回车键则将输入框中替换掉敏感词的数据追加到标签中,字体的颜色、大小、位置按照生成

    2024年02月04日
    浏览(61)
  • HTML实现图片点击放大效果

    1.样式 2.图片和遮罩层 3.效果实现代码

    2024年02月11日
    浏览(55)
  • QGraphicsView 如何实现百度地图按照鼠标点进行放大缩小效果

    前段时间用了QGraphicsView做了一些工作,然而如何实现QGraphicsView的放大缩小的效果也很简单,照鼠标某一点进行缩放,仅靠以下代码对view进行缩放会导致view上的item在放大缩小的过程中跑偏了。 我们看一下仅靠以上代码实现的放大缩小的效果。 从下图中我们看到把图中小矩形

    2024年02月05日
    浏览(61)
  • 记录-JS简单实现购物车图片局部放大预览效果

    代码不多,先看一下 HTML 里面结构很简单,初始化 MagnifyingGlass 对象来关联一个 IMG 标签来实现放大。 再看一下 MagnifyingGlass 上面的就是全部逻辑,实现方法肯定不是最优的,但是其中可以联想到通过像素点的操作实现任意效果。 可以启动一个 node 本地服务,首先见一个

    2023年04月20日
    浏览(80)
  • el-upload使用http-request实现图片上传,回显,放大效果

            在项目开发中,为了实现上传文件的功能,我们需要用到el-upload这个组件,为了实现回显放大效果,就要用到el-image这个组件了。官方文档中介绍了上传的两种方法,一个是使用action,其参数必须要上传的地址;另一个是http-request,该方法覆盖默认的上传行为,可

    2024年02月08日
    浏览(64)
  • 前端Vue3+TS实现视频放大缩小,放大后实现视频的拖动+拖动边框限制

    最近实现了一个新的需求,大体内容是要对所播放的视频做一个放大缩小的处理,同时在视频放大的同时要实现视频的一个拖拽,拖拽的同时,要对视频拖动的范围作出一个限制,下面来看看我的一个实现的思路。 技术栈:Vue3.2 + TS 1.放大缩小采用的形式是什么? 2.拖动实现

    2024年01月25日
    浏览(43)
  • 前端实现水印效果的多种方案

    ❝ 前端开发不断创新,其中之一是实现水印效果。水印可以用于保护内容的版权,提供额外信息,或者美化页面。本文将深入探讨几种常见的前端水印方案,帮助大家更好地理解如何实现水印效果。 ❞ 使用CSS伪元素是一种简单而灵活的方式来添加水印,以下是一个示例:

    2024年02月04日
    浏览(46)
  • 怎么给你的vitepress添加图片放大预览效果

    基于markdown-it 可设置自定义属性的插件 效果预览地址传送 Step. 1: 安装依赖 Step. 2: 引入插件 Step. 3: 配置 vitepress config.js文件 Step. 4: 引入图片灯箱js和css文件 配置 .vitepress/config.js 文件 加入 head 配置 Step. 5: 渲染效果

    2024年02月14日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包