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

文章目录

    • 巧用工具,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 = nullfunction getZoom() {if (zoom === null) {zoom = mediumZoom(props.options)}return zoom
}function attachZoom(ref: Element | ComponentPublicInstance | null) {const image = ref as HTMLImageElement | nullconst 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><ImageZoomsrc="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() {// 在组件挂载后初始化 mediumZoommediumZoom(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.rhkb.cn/news/420949.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K-Means聚类

聚类的作用&#xff1a; 知识发现 发现事物之间的潜在关系 异常值检测 特征提取 数据压缩的例子 有监督和无监督学习&#xff1a; 有监督&#xff1a; 给定训练集 X 和 标签Y 选择模型 学习&#xff08;目标函数的最优化&#xff09; 生成模型&#xff08;本质上是一组参…

RocketMQ异步报错:No route info of this topic

在SpringBoot中发送RocketMQ异步消息的时候报错了&#xff0c;提示org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, testTopic1 这里给出具体的解决方案 一、Broker模块不支持自动创建topic&#xff0c;并且topic没有被手动创建过 R…

OpenCV 与 YoloV3的结合使用:目标实时跟踪

目录 代码分析 1. YOLO 模型加载 2. 视频加载与初始化 3. 视频帧处理 4. 物体检测 5. 处理检测结果 6. 边界框和类别显示 7. 帧率&#xff08;FPS&#xff09;计算 8. 结果显示与退出 9. 资源释放 整体代码 效果展示 总结 代码分析 这段代码使用 YOLO&#xff08…

Linxu系统:kill命令

1、命令详解&#xff1a; kill命令是用于向进程发送信号&#xff0c;通常用来终止某个指定PID服务进程&#xff0c;kill命令可以发送不同的信号给目标进程&#xff0c;来实现不同的操作&#xff0c;如果不指定信号&#xff0c;默认会发送 TERM 信号&#xff08;15&#xff09;&…

ubuntu 和windows用samba服务器实现数据传输

1&#xff0c;linux安装samba服务器 sudo apt-get install samba samba-common 2&#xff0c;linux 配置权限&#xff0c;修改目录权限&#xff0c;linux下共享的文件权限设置。 sudo chmod 777 /home/lark -R 3. 添加samba用户 sudo smbpasswd -a lark 4&#xff0c;配置共享…

小程序页面整体执行顺序

首先执行 App.onLaunch -> App.onShow其次执行 Component.created -> Component.attached再执行 Page.onLoad -> Page.onShow最后 执行 Component.ready -> Page.onReady 你不知道的小程序系列之生命周期执行顺序

828华为云征文 | Flexus X实例与Harbor私有镜像仓库的完美结合

需要了解 本文章主要讲述在 华为云Flexus X 实例上搭建自己的企业级私有镜像仓库 Harbor&#xff0c;一键部署、搭建高可用安全可靠的容器镜像仓库选择合适的云服务器&#xff1a; 本文采用的是 华为云服务器 Flexus X 实例&#xff08;推荐使用&#xff09;连接方式&#xff1…

ctfshow-PHP特性

web89 <?php include("flag.php"); highlight_file(_FILE_);if(isset($_GET[num])){$num$_GET[num];if(preg_match("/[0-9]/",$num)){die("no no no"); #结束脚本呢执行输出指定信息}if(intval($num)){#把参数转换整数类型echo $flag;} } pr…

用面向对象的方法进行数据分析

项目从两个不同类型的文件&#xff08;文本文件和 JSON 文件&#xff09;读取销售数据&#xff0c;将其封装为 Record 对象&#xff0c;合并数据后&#xff0c;统计每天的销售总额&#xff0c;并通过 pyecharts 库生成一个包含每日销售额的柱状图&#xff08;Bar chart&#xf…

无线感知会议系列【1】【增强无线感知应用的鲁棒性】

前言&#xff1a; 这个是2021年 泛在可信智能感知论坛&#xff0c;汤战勇 &#xff08;西北大学物联网研究院 )教授的 一个讲座《wireless signals like WiFi, RFID and (ultra) sound as a powerful modality for ubiquitous sensing》 参考连接&#xff1a; 4.见微知萌—…

ollama 本地部署

ollama 本地模型部署 下载安装: [link](https://ollama.com/download)下载说明 部署使用在终端查看ollama是否安装完成终端查看ollama 命令说明查看当前支持下载的模型启动对话模式默认情况下&#xff0c;ollama启动了server 的api访问功能 外部 api访问使用postman网页版本for…

什么是Aware注入?

Spring容器可以在Bean初始化的时候&#xff0c;自动注入一些特定信息&#xff08;如beanfactory&#xff09;,使得bean可以轻松的访问其他Bean的实例&#xff0c;简化代码&#xff0c;避免了显式的注入。 Spring提供了很多Aware的接口,如下&#xff1a; 拿其中的BeanFactoryAwa…

全频段覆盖的卫星通信模块-灵活应对多应用场景

LoRa1121是采用SEMTECH的LR1121芯片&#xff0c;这是一款超低功耗、远程LoRa收发器&#xff0c;支持Sub-GHz和全球2.4GHz频谱中的地面ISM频段通信&#xff0c;且支持用于卫星连接的S频段。LoRa1121支持LoRa&#xff0c;(G)FSK调制&#xff0c;Sigfox协议&#xff0c;以及&#…

SRS流媒体服务器从入门到精通(其一,环境搭建)

欢迎诸位来阅读在下的博文~ 在这里&#xff0c;在下会不定期发表一些浅薄的知识和经验&#xff0c;望诸位能与在下多多交流&#xff0c;共同努力! 江山如画&#xff0c;客心如若&#xff0c;欢迎到访&#xff0c;一展风采 文章目录 一、SRS简介二、SRS的应用场景三、环境搭建…

Leetcode - 周赛414

目录 一&#xff0c;3280. 将日期转换为二进制表示 二&#xff0c;3281. 范围内整数的最大得分 三&#xff0c;3282. 到达数组末尾的最大得分 四&#xff0c;3283. 吃掉所有兵需要的最多移动次数 一&#xff0c;3280. 将日期转换为二进制表示 本题就是简单的字符串和整数之…

爆改YOLOv8|利用yolov9的ADown改进卷积Conv-轻量化

1&#xff0c;本文介绍 本文将利用YOLOv9的ADown模块改进卷积。 关于ADown的详细介绍可以看论文&#xff1a;https://arxiv.org/abs/2402.13616 本文将讲解如何将ADown融合进yolov8 话不多说&#xff0c;上代码&#xff01; 2&#xff0c; 将ADown融合进yolov8 2.1 步骤一…

【高中物理】用代码缩写胡克定律公式原理图

用代码缩写胡克定律公式原理图 代码实现了以下功能&#xff1a; 交互式滑块&#xff1a;用户可以通过滑块调整弹簧的弹性系数&#xff08;k&#xff09;、拉力大小&#xff08;F&#xff09;和弹簧的原长&#xff08;l0&#xff09;&#xff0c;实时观察弹簧的伸长和受力变化。…

在VB.net中,TimeSpan有什么属性与方法

标题 在VB.net中&#xff0c;TimeSpan有什么属性与方法 正文 在 VB.NET 中&#xff0c;TimeSpan 结构表示时间间隔&#xff0c;即一段时间&#xff0c;而不表示特定的时间点。TimeSpan 提供了多种属性来获取时间间隔的各个组成部分&#xff0c;以及一些方法来操作这些时间间隔。…

【观察者】设计模式:构建灵活且响应式的软件系统

引言 在软件开发中&#xff0c;我们经常面临需要在多个对象之间进行通信的挑战。特别是当一个对象的状态发生变化时&#xff0c;我们希望所有依赖于这个状态的对象都能自动更新。这就是观察者设计模式大显身手的地方。 简介 观察者模式是一种行为设计模式&#xff0c;它定义…

基于vue框架的城市交通管理系统的设计与实现9fcck(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,区域,车站信息,公交线路 开题报告内容 基于Vue框架的城市交通管理系统的设计与实现开题报告 一、研究背景与意义 1.1 研究背景 随着城市化进程的加速&#xff0c;城市交通问题日益严峻&#xff0c;包括交通拥堵、交通事故频发、…