前端:图片局部放大

电商平台中经常看到,鼠标移动至产品图片会出现局部放大功能,很显然,这是前端开发的职责,那它到底是如何实现的呢?
我们今天根据此需求,做一案例来了解,还是老规矩,先来理思路:
一、这种功能实现方式还是挺多的,本文主要围绕两个方向进行探讨:
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

(0)
guozi's avatarguozi
上一篇 2024年6月3日 下午5:27
下一篇 2024年6月3日 下午5:28

相关推荐

  • 拍卖方式被哪些网站使用,拍卖网站被攻击的原因及防范措施怎么写

    当黑客通过大量错误请求向服务器发送数据,从而使服务器过载并导致其故障时,就会发生DDoS 攻击。这种攻击方法可以使网站瘫痪并导致用户无法访问。 为了防止上述攻击,拍卖网站必须采取一…

    行业资讯 2024年5月15日
    0
  • 南京专做seo,南京seo网站排名

    您听说过“南京SEO顾问”这个行业吗?或许这个词对于大多数人来说还是一个陌生的概念。那么,什么是SEO顾问,他们有什么作用和价值呢?如何选择靠谱的SEO顾问?SEO顾问需要哪些技能…

    行业资讯 2024年4月12日
    0
  • 绍兴seo

    SEO,是一门让人又爱又恨的技术。它可以让你的网站排名蹭蹭往上涨,也可能让你的网站被搜索引擎抛弃。那么在云服务器行业,SEO又扮演着怎样的角色呢?绍兴地区作为一个发展迅速的城市,其…

    行业资讯 2024年3月19日
    0
  • mom.exe初始化错误怎么办

    你是否曾经遇到过mom.exe初始化错误的问题?这个错误在网络行业中并不少见,但是却给很多人带来了困扰。究竟什么是mom.exe?它为什么会出现初始化错误?又该如何解决呢?本文将为…

    行业资讯 2024年3月20日
    0

发表回复

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