前端:图片局部放大

电商平台中经常看到,鼠标移动至产品图片会出现局部放大功能,很显然,这是前端开发的职责,那它到底是如何实现的呢?
我们今天根据此需求,做一案例来了解,还是老规矩,先来理思路:
一、这种功能实现方式还是挺多的,本文主要围绕两个方向进行探讨:
1、动态修改图片位置:以前开发过程中拿两张图片来处理,根据鼠标在产品图中的移动位置,确定偏移数据,从而操作另一张图片的位置,从而实现功能
2、canvas图片绘制
如上两种方法均可实现此功能,第一种没什么可说的,思路基本已阐明,在此我们主要分享如何用canvas来实现,canvas思路跟第一者有些相似,不同是的,第一种方法需要渲染两张图片,而canvas,只需要渲染一张图片即可,来吧!逐步进行
A、创建两个canvas画布,第一个渲染图片,第二个承载局部放大后的图片
B、添加鼠标移动监听,渲染实时图片
C、添加图片平滑功能(此功能为附加,可不用)
先看效果(左侧为原图,右图为局部放大图,根据自己需求设置放大参数):
图片
源码在文章末尾,如果对你有用还望点赞、关注、赞赏,产品嘛!其实也挺不错,有需要者可以入手,童叟无欺,万分感谢
<!DOCTYPE html><html lang="en">
<head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>canvas局部放大</title></head>
<body>    <p>        <canvas id="canvas"></canvas>        <canvas id="zoom"></canvas>    <div>        <label for="smoothbtn">            <input type="checkbox" name="smoothbtn" checked="checked" id="smoothbtn" />            启用图像平滑        </label>    </div>    <input type="file" accept="image" id="file">

    </p>
</body><script>    const file = document.getElementById('file')    let url    file.addEventListener('change', e => {        url = URL.createObjectURL(e.target.files[0])        init()    })    function init() {        const img = new Image();        img.src = url        img.onload = function () {            draw(this);        };
        function draw(img) {            const canvas = document.getElementById("canvas");            canvas.width = 500            canvas.height = img.height            const ctx = canvas.getContext("2d");            ctx.drawImage(img, 0, 0);            img.style.display = "none";            const zoo = document.getElementById("zoom")            zoo.width = canvas.width            zoo.height = canvas.height            const zoomctx = zoo.getContext("2d");
            const smoothbtn = document.getElementById("smoothbtn");            const toggleSmoothing = function (event) {                zoomctx.imageSmoothingEnabled = this.checked;                zoomctx.mozImageSmoothingEnabled = this.checked;                zoomctx.webkitImageSmoothingEnabled = this.checked;                zoomctx.msImageSmoothingEnabled = this.checked;            };            smoothbtn.addEventListener("change", toggleSmoothing);
            const zoom = function (event) {                const x = event.layerX;                const y = event.layerY;                zoomctx.drawImage(                    canvas,                    Math.abs(x - 5),                    Math.abs(y - 5),                    10,                    10,                    0,                    0,                    canvas.width,                    canvas.height,                );            };
            canvas.addEventListener("mousemove", zoom);        }
    }</script>
</html>

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/88430.html

Like (0)
guozi的头像guozi
Previous 2024年6月3日 下午5:27
Next 2024年6月3日 下午5:28

相关推荐

  • 服务器托管一年的费用是多少?

    你是否曾经想过,如果要使用服务器托管服务,一年的费用会是多少?或许你对服务器托管这个概念还不太熟悉,但它却是网络安全加速行业中不可或缺的一环。那么什么是服务器托管?它又有哪些作用和…

    行业资讯 2024年4月20日
    0
  • 网站目录结构如何优化设计,网站目录结构图

    错误:您的网站目录中的链接数量不合理,要么太多,要么太少,这会影响您网站的用户体验和SEO效果。 解决方案:根据网站的大小和内容量合理设计链接数量,不要过多或过少。同时,您还应该注…

    行业资讯 2024年3月24日
    0
  • 梧州网站优化

    在当今数字化时代,网站已经成为企业宣传和推广的重要渠道。然而,仅仅拥有一个网站并不能保证吸引更多的客户和提升业务。这就需要进行网站优化来提升用户体验和搜索引擎排名。今天,我们将带您…

    行业资讯 2024年4月11日
    0
  • 太原网页制作

    云服务器行业的发展已经成为当今社会的一个热门话题,而在这个行业中,太原网页制作更是备受关注。它不仅仅是一个简单的网页制作过程,更蕴含着深远的意义和作用。那么,究竟太原网页制作有哪些…

    行业资讯 2024年3月20日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注