巧用工具,Vue 集成 medium-zoom 实现图片缩放

news2024/9/25 13:22:23

文章目录

    • 巧用工具,Vue 集成 medium-zoom 实现图片缩放
    • 介绍medium-zoom
    • Vue3集成 medium-zoom 示例
    • Vue2集成 medium-zoom 示例
    • 进阶 - 可选参数

巧用工具,Vue 集成 medium-zoom 实现图片缩放

在现代网页开发中,为用户提供良好的视觉体验至关重要。当涉及到展示图片时,一个能够实现图片缩放的功能可以极大地提升用户对内容的浏览感受。在 Vue 框架下,我们可以巧妙地集成 medium-zoom 这个强大的工具,为我们的项目带来流畅而便捷的图片缩放效果。无论你是 Vue3 还是 Vue2 的开发者,都能从本文中找到详细的集成方法和实用的示例。

介绍medium-zoom

一个用于缩放图像的 JavaScript 库,类似 Medium。

Medium Zoom是一个JavaScript库,可以与任何框架一起使用。

github地址是:medium-zoom

从github上看它能集成:

  1. React
  2. React Markdown
  3. Vue
  4. Svelte

我只用过Vue下面我用Vue2和Vue3对medium-zoom进行集成。

在这里插入图片描述

Vue3集成 medium-zoom 示例

1、安装medium-zoom

npm install medium-zoom

2、 创建 ImageZoom.vue 组件

<script setup lang="ts">
import { watch, ImgHTMLAttributes, ComponentPublicInstance } from 'vue'
import mediumZoom, { Zoom, ZoomOptions } from 'medium-zoom'



interface Props extends /* @vue-ignore */  ImgHTMLAttributes {
  options?: ZoomOptions;
}

const props = defineProps<Props>();

let zoom: Zoom | null = null

function getZoom() {
  if (zoom === null) {
    zoom = mediumZoom(props.options)
  }

  return zoom
}

function attachZoom(ref: Element | ComponentPublicInstance | null) {
  const image = ref as HTMLImageElement | null
  const zoom = getZoom()

  if (image) {
    zoom.attach(image)
  } else {
    zoom.detach()
  }
}

watch(() => props.options, (options) => {
  const zoom = getZoom()
  zoom.update(options || {})
})
</script>

<template>
  <img :ref="attachZoom" />
</template>

3、在你的主组件中使用 ImageZoom.vue

<template>
  <ImageZoom
      src="https://random.dog/d467a3b8-ade5-4d68-810a-95fbb32a3cfc.jpg"
      alt="dog img"
      class="dog-img"
  />
</template>

<script lang="ts" setup name="APP">
import ImageZoom from './components/ImageZoom.vue'

</script>

<style scoped>

.dog-img {
  max-width: 100%;
  max-height: 200px; /* 限制图片最大高度为400px */
  width: auto;
  height: auto;
  border-radius: 10px; /* 添加圆角样式 */
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* 添加阴影效果 */
  margin-bottom: 20px;
}

</style>

看下效果。

在这里插入图片描述

Vue2集成 medium-zoom 示例

Vue2的集成我是根据Vue3的集成示例写的。下面是具体的代码。

1、安装medium-zoom

npm install medium-zoom

2、 创建 ImageZoom.vue 组件

<template>
  <img :src="src" :alt="alt" ref="zoomableImage" class="zoomable" />
</template>

<script>
import mediumZoom from 'medium-zoom';

export default {
  props: {
    src: {
      type: String,
      required: true
    },
    alt: {
      type: String,
      default: ''
    },
    options: {
      type: Object,
      default: () => ({})
    }
  },
  mounted() {
    // 在组件挂载后初始化 mediumZoom
    mediumZoom(this.$refs.zoomableImage, this.options);
  }
};
</script>

<style scoped>
.zoomable {
  cursor: zoom-in;
  transition: transform 0.3s ease;
}
</style>

3、在你的主组件中使用 ImageZoom.vue

<template>
  <div class="container">
    <ImageZoom
          :src="dogImage"
          alt="Random Dog"
          class="dog-img"
      />
  </div>
</template>

<script>
import ImageZoom from './components/ImageZoom.vue';

export default {
  components: {
    ImageZoom
  },
  data() {
    return {
      dogImage: '',
    };
  },
  mounted() {
    this.fetchRandomDogImage();
  },
  methods: {
    async fetchRandomDogImage(imageNumber) {
      const response = await fetch('https://random.dog/woof.json');
      const data = await response.json();
      this.dogImage= data.url;
    }
  }
};
</script>

<style scoped>

.dog-img {
  max-width: 100%;
  max-height: 400px; /* 限制图片最大高度为400px */
  width: auto;
  height: auto;
  border-radius: 10px; /* 添加圆角样式 */
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* 添加阴影效果 */
  margin-bottom: 20px;
}

</style>

效果如下:

当我点击图片时会放大,再次点击时又会恢复。注意:放大后的图片实际上在屏幕的正中间。
在这里插入图片描述

进阶 - 可选参数

这些选项允许自定义缩放。

财产类型默认描述
marginnumber0缩放图像外的空间
backgroundstring"#fff"叠加层的背景
scrollOffsetnumber40关闭缩放时需要滚动的像素数
containerstringHTMLElementobject
templatestringHTMLTemplateElementnull
 <ImageZoom
      :src="dogImage"
      alt="Random Dog"
      :options="zoomOptions"
    />

  data() {
    return {
      dogImage: '',
      zoomOptions: {
        margin: 200,
        background: '#BADA55',
        scrollOffset: 0
      }
    };
  },

当我设置了下面的参数时,再把图片调小一点,效果如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126183.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爬虫逆向学习(六):补环境过某数四代

声明&#xff1a;本篇文章内容是整理并分享在学习网上各位大佬的优秀知识后的实战与踩坑记录 引用博客&#xff1a; https://blog.csdn.net/shayuchaor/article/details/103629294 https://blog.csdn.net/qq_36291294/article/details/127699273 https://blog.csdn.net/weixin_…

vivo手机已删除的短信还能恢复吗?

虽然现在我们很少使用vivo手机的短信功能&#xff0c;但是我们偶尔还会通过vivo手机短信功能接收一些重要的信息。如果我们在清理垃圾短信的时候误删了vivo手机重要短信&#xff0c;该怎么恢复呢&#xff1f; 方法一&#xff1a;通过vivo云服务恢复 1、确保您已开启vivo云服务…

Go常用正则函数整理

前言 在Go语言中&#xff0c;标准库regexp提供了丰富的API来处理正则表达式&#xff0c;支持编译、匹配、查找、替换等操作。以下是一个Go标准库正则函数的常用大全教程及部分使用示例。 Go标准库常用正则函数 Compile&#xff1a;编译正则表达式&#xff0c;返回一个可用于…

Qt 构建报错 undefined reference to xxx

初次学习使用Qt&#xff0c;在构建时报错。这是个典型报错&#xff0c;熟练vs与c的朋友一眼就可以看出要么是库出问题了&#xff0c;要么是库链接出问题了。那么就可以按照相对明确的方向找问题。 1、确认库与项目配置是否一致。32位还是64位&#xff0c;debug还是release一定…

如何逆转Instagram账号流量减少?4个实用技巧分享

Instagram作为全球十大社媒之一&#xff0c;不仅是个人分享生活的平台&#xff0c;还是跨境卖家进行宣传推广和客户开发的关键工具。在运营Instagram的过程中&#xff0c;稍有不慎就容易出现账号被限流的情况&#xff0c;对于账号状态和运营工作的进行都十分不利。 一、如何判断…

new String(),toString()和Arrays.toString()的区别

下面写了一段代码来展示结果 import javax.sound.midi.Soundbank; import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {String str "abc";System.out.println("str:"str);char[] chars st…

若楠带你初识OpenCV(7) -- 轮廓检测之银行卡号识别

文章目录 银行卡号识别详细流程一、设置参数二、函数准备三、具体步骤1. 得到每个数字的信息2. 银行卡处理3. 找到数字边框4. 模板匹配 总结 银行卡号识别 经过了几篇关于轮廓检测的学习&#xff0c;本篇我们来尝试完成对银行卡号的检测识别&#xff1a; 目标&#xff0c;识别…

获取时间,并将时间按一定的格式输出

一、时间函数 1.获取秒数 CTS 北京时间 2.转换为需要个格式 系统时间的获取: 1.time 获得秒数 time_t time(time_t *t); time_t 类型变量 第一种 准备一个变量 time_t tm; time(&tm) 第二种 tm time(NULL); 功能: 获得1970年到现在的秒数 第一步&#xff0c;先获得秒…

OpenHarmony鸿蒙( Beta5.0)RTSPServer实现播放视频详解

鸿蒙开发往期必看&#xff1a; 一分钟了解”纯血版&#xff01;鸿蒙HarmonyOS Next应用开发&#xff01; “非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; “一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路…

JavaScript基础语法(超详细!)

为什么学JS&#xff1f; 1.页面动态效果 2.表单验证 可以包含在文档中的任何地方&#xff0c;只要保证这些代码在被使用前已读取并加载到内存即可 <script>… </script>网页中引用JavaScript的方式&#xff1a; 1.使用<script>标签外部JS文件 <scrip…

层归一化(201607)

Layer Normalization 层归一化 https://arxiv.org/abs/1607.06450 Abstract Training state-of-the-art, deep neural networks is computationally expensive. One way to reduce the training time is to normalize the activities of the neurons. A recently introduced…

gdb 前端:kdbg 安装使用

文章目录 1. 前言2. kdbg 安装使用2.1 安装 kdbg2.2 使用 kdbg 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. kdbg 安装使用 2.1 安装 kdbg kdbg 是 gdb 的图形化界面的前端&#xff0c;在 …

2018年系统架构师案例分析试题五

目录 案例 【题目】 【问题 1】(7 分) 【问题 2】(12 分) 【问题 3】(6 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于 Web 系统设计的叙述&#xff0c;在答题纸上回答问题 1 至问题 3。 【题目】 某银行拟将以分行为主体…

多卡微调智谱glm-4-9b-chat

1 什么是微调&#xff1a; 大模型微调&#xff08;Fine-tuning of large models&#xff09;是一种通过对已经训练好的大规模预训练模型进行进一步训练的技术&#xff0c;以便让模型在特定任务或特定领域上表现得更好。微调通常是在已经有了一个通用的、经过大规模数据训练的基…

恐怖类游戏智能体————恐怖探险家

智能体名称&#xff1a;恐怖探险家 链接&#xff1a;文心智能体平台AgentBuilder | 想象即现实 (baidu.com)https://agents.baidu.com/center/agent/preview/MFhBvA0K9EXXVdjHCcUumadWmWesKvw2 角色与目标设定 &#x1f9d1;&#x1f3fb; 角色&#xff1a;恐怖探险家是一位…

2.快速部署一个Kubernetes集群

&#x1f482; 个人主页: Java程序鱼 &#x1f4ac; 如果文章对你有帮助&#xff0c;欢迎关注、点赞、收藏(一键三连)和订阅专栏 &#x1f464; 微信号&#xff1a;hzy1014211086&#xff0c;想加入技术交流群的小伙伴可以加我好友&#xff0c;群里会分享学习资料、学习方法…

Unity人工智能开发学习心得

在Unity中进行人工智能研究与应用主要集中在几个关键领域&#xff0c;包括使用Unity ML-Agents插件进行强化学习、利用神经网络技术和深度学习技术训练AI&#xff0c;以及基于行为树技术设计游戏人工智能。 ‌使用Unity ML-Agents插件进行强化学习‌&#xff1a;Unity ML-Agent…

网络安全 DVWA通关指南 DVWA Reflected Cross Site Scripting (反射型 XSS)

DVWA Reflected Cross Site Scripting (反射型 XSS) 文章目录 DVWA Reflected Cross Site Scripting (反射型 XSS)XSS跨站原理反射型 LowMediumHighImpossible 参考文献 WEB 安全靶场通关指南 XSS跨站原理 当应用程序发送给浏览器的页面中包含用户提交的数据&#xff0c;但没有…

Linux进阶命令-echodatealias

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 经过上一章Linux日志的讲解&#xff0c;我们对Linux系统自带的日志服务已经有了一些了解。我们接下来将讲解一些进阶命令&am…

自然语言处理系列六十九》搜索引擎项目实战》搜索框架技术选型

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十九搜索引擎项目实战》搜索框架技术选型搜索…