vue实现PC端图片放大缩小可鼠标拖动,鼠标滚轮控制放大缩小完整代码付效果图

news2024/12/25 12:18:46

vue实现图片放大缩小可鼠标拖动,鼠标滚轮控制放大缩小完整代码付效果图

效果图:

创建一个ImageViewer 组件,并且在当前页面引用完整代码如下:

代码引用:

<template>
  <view>
    <image-viewer :imageUrl="imageUrl" />
  </view>
</template>

<script>
import ImageViewer from '@/components/image-viewer.vue';

export default {
  components: {
    ImageViewer,
  },
  data() {
    return {
      imageUrl: 'https://profile-avatar.csdnimg.cn/2c10a3762fec44aea81f7c8fc58921af_qq_35713752.jpg!1', // 替换为你的图片地址
    };
  },
};
</script>

组件代码:

<template>
	<view class="container">
		<view class="movable-area" id="movableArea" @mousedown="startDrag" @mousemove="onDrag" @mouseup="endDrag" @mouseleave="endDrag">
			<image :src="imageUrl" class="image" :style="{
          transform: `translate(${translateX}px, ${translateY}px) scale(${scale})`,
          cursor: dragging ? 'grabbing' : 'grab'
        }" />
		</view>
		<view class="controls">
			<button @click="setScale(5)">放大5倍</button>
			<button @click="setScale(10)">放大10倍</button>
			<button @click="setScale(20)">放大20倍</button>
			<button @click="setScale(30)">放大30倍</button>
			<button @click="incrementScale(0.5)">放大</button>
			<button @click="incrementScale(-0.5)">缩小</button>
		</view>
	</view>
</template>

<script>
	export default {
		props: {
			imageUrl: {
				type: String,
				required: true,
			},
		},
		data() {
			return {
				scale: 1,
				maxScale: 30,
				translateX: 0,
				translateY: 0,
				dragging: false,
				startX: 0,
				startY: 0,
				initialX: 0,
				initialY: 0,
			};
		},
		mounted() {
			// 监听滚轮事件
			this.movableArea = document.getElementById('movableArea');
			this.movableArea.addEventListener('wheel', this.onWheel);
		},
		beforeDestroy() {
			// 组件销毁前移除监听器
			this.movableArea.removeEventListener('wheel', this.onWheel);
		},
		methods: {
			onWheel(event) {
				const delta = event.deltaY > 0 ? -0.5 : 0.5;
				console.log('delta', event.deltaY);
				this.incrementScale(delta);
			},
			setScale(value) {
				this.scale = value;
			},
			incrementScale(value) {
				this.scale = Math.min(Math.max(this.scale + value, 1), this.maxScale);
			},
			startDrag(event) {
				this.dragging = true;
				this.startX = event.clientX;
				this.startY = event.clientY;
				this.initialX = this.translateX;
				this.initialY = this.translateY;
				document.addEventListener('mousemove', this.onDrag);
				document.addEventListener('mouseup', this.endDrag);
			},
			onDrag(event) {
				console.log('鼠标移动', this.dragging, event);
				if (this.dragging) {
					const deltaX = event.clientX - this.startX;
					const deltaY = event.clientY - this.startY;
					this.translateX = this.initialX + deltaX;
					this.translateY = this.initialY + deltaY;
				}
			},
			endDrag() {
				this.dragging = false;
				document.removeEventListener('mousemove', this.onDrag);
				document.removeEventListener('mouseup', this.endDrag);
			},
		},
	};
</script>

<style scoped>
	.container {
		display: flex;
		flex-direction: column;
		align-items: center;
	}

	.movable-area {
		width: 100%;
		height: 400px;
		position: relative;
		overflow: hidden;
		border: 1px solid #ddd;
	}

	.image {
		user-select: none;
		width: 100px;
		height: 100px;
	}

	.controls {
		margin-top: 20px;
		display: flex;
		flex-direction: row;
		justify-content: space-around;
		width: 100%;
	}

	button {
		padding: 10px;
		margin: 0 5px;
	}
</style>

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

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

相关文章

大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

SOMEIP_ETS_022:echoStaticUINT8Array_One_Dimensional

测试目的&#xff1a; 确保DUT能够正确处理一维静态UINT8数组参数&#xff0c;并且在发送和接收过程中保持参数值和顺序不变。 描述 本测试用例将验证DUT在处理包含一维静态UINT8数组参数的SOME/IP消息时&#xff0c;是否能够准确地发送和接收这些参数&#xff0c;确保返回的…

[数据结构] 万字解析排序算法

文章目录 快速排序双指针法整体排序过程整理选择基准值&#xff08;Pivot&#xff09;单趟划分&#xff08;Partitioning&#xff09;递归分治&#xff08;Divide and Conquer&#xff09;终止条件合并 整体代码实现为什么相遇位置一定是小值&#xff1f;情况 1: 右指针j找到了…

HexView 刷写文件脚本处理工具-基本功能介绍(七)-导出VBF/GM/GM-FBL

导出Ford VBF数据容器 VBF文件格式是Ford和Volvo Cars使用的多功能二进制格式。此文件的输出基于“Versatile Binary Format”规范,版本从2.2至2.5。在对话框中输入的所有值将被写入INI文件。INI文件也可以用于命令行选项,以在不需要用户输入的情况下生成输出。 导出GM数据…

网卡与Linux网络结构(中)

1 socket数据结构 socket源码 socket结构体是操作系统网络编程接口的一个核心组件。在操作系统中&#xff0c;socket结构体定义了一个网络连接的抽象&#xff0c;包括文件描述符、地址信息、连接状态等。 socket结构体代码位于<include/linux/net.h> struct socket { s…

android13 串口编号修改 串口名修改

总纲 android13 rom 开发总纲说明 目录 1.前言 2.技术分析 别名定义的语法规则 3.修改示例 使用别名 注意事项 4.不生效分析 5.编译查看 6.其他方法 7.彩蛋 1.前言 更改Android设备的串口编号涉及对系统深层次的配置进行修改,通常是为了解决硬件兼容性问题或满足特…

MySQL:约束

目录 1、约束 1.1 约束类型 2、非空约束 2.1 没有指定not null 2.2 指定not null 3、唯一约束 3.1 没有指定unique 3.2 指定unique 4、默认约束 5、主键约束 5.1 主键 5.2 主键自增类型 5.2.1 主键自增全列插入 5.2.2 主键自增指定列插入 5.3 复合主键 6、外键约…

探秘充电桩测试负载箱

随着电动汽车的普及&#xff0c;充电桩已经成为了城市中不可或缺的一部分。为了保证充电桩的质量和安全性&#xff0c;对其进行严格的测试是必不可少的。而在这个过程中&#xff0c;充电桩测试负载箱扮演着至关重要的角色。那么&#xff0c;什么是充电桩测试负载箱&#xff1f;…

【问题记录】Python中用yield实现打字机效果

用yield实现打字机效果 前言示例注意点 前言 在人工智能&#xff08;AI&#xff09;领域&#xff0c;yield 函数在处理大数据集和实现异步编程时非常重要。 异步编程是一种常见的编程模式&#xff0c;它可以提高程序的执行效率。yield 可以用于实现协程&#xff0c;使得程序在…

未来已来:人工智能如何重塑Facebook的用户体验?

在数字化时代的浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;正成为推动技术进步和用户体验优化的核心力量。Facebook&#xff08;现Meta Platforms&#xff09;作为全球领先的社交媒体平台&#xff0c;正在充分利用人工智能技术&#xff0c;以重塑用户体验&#xff0…

文档翻译免费软件有哪些?不容错过的5个翻译利器

大学生暑期生活日常都丰富多彩&#xff0c;充满了挑战与收获。 他们不仅沉浸在外语学习的海洋中&#xff0c;努力提升语言能力&#xff0c;还深入钻研各类论文文献&#xff0c;积极探索学术的无限可能。然而&#xff0c;在这个过程中&#xff0c;不同语言的资料往往成为他们求…

spring boot3.x快速入门

下一篇&#xff1a;Spring Boot 3.x gradle脚手架工程build.gradle详解 本教程将基于gradle项目构建工具来快速构建一个spring boot 3.x的最简单的web应用&#xff0c;其中涉及各种构建技巧和细节&#xff0c;希望能帮到初学者~ 文章目录 先决条件JDK17gradle全局配置 gradle项…

RAPTOR模型在长文档知识检索中的应用

人工智能咨询培训老师叶梓 转载标明出处 传统的检索增强型语言模型&#xff08;RALMs&#xff09;在检索时往往只关注短且连续的文本块&#xff0c;这限制了它们对整体文档上下文的全面理解。例如&#xff0c;在需要整合文本多个部分知识的主题性问题上&#xff0c;如理解整本书…

哈佛大学单细胞课程|笔记汇总 (六)

哈佛大学单细胞课程|笔记汇总 &#xff08;五&#xff09; 哈佛大学单细胞课程|笔记汇总 &#xff08;四&#xff09; &#xff08;六&#xff09;Single-cell RNA-seq clustering analysis: aligning cells across conditions 我们的数据集包含来自两个不同条件&#xff08…

Java JDK 国内外下载镜像地址及安装

Java JDK 国内下载镜像地址及安装 一、Java JDK 国内下载镜像地址及安装二、国外快速下载jdk 一、Java JDK 国内下载镜像地址及安装 各种JAVA JDK的镜像分发&#xff1a;https://www.injdk.cn/ 华为oracle jdk镜像&#xff1a;https://repo.huaweicloud.com/java/jdk/ 华为op…

python:VOC格式数据集转换为YOLO数据集格式

作者&#xff1a;CSDN _养乐多_ 本文将介绍如何将目标检测中常用的VOC格式数据集转换为YOLO数据集&#xff0c;并进行数据集比例划分&#xff0c;从而方便的进行YOLO目标检测。 如果不想分两步&#xff0c;可以直接看第三节代码。 文章目录 一、将VOC格式数据集转换为YOLO格…

司美格鲁肽,又名索玛鲁肽;Semaglutide;CAS号:910463-68-2

司美格鲁肽&#xff0c;又名索玛鲁肽&#xff1b;Semaglutide&#xff1b; CAS号&#xff1a;910463-68-2 分子量&#xff1a;4113.58 结构图&#xff1a; 司美格鲁肽&#xff0c;又名Semaglutide (上海楚肽生物科技有限提供&#xff09; 分子式&#xff1a;C187H291N45O59 …

nginx和php工具的使用

一、本地主机通过域名访问自己写的网页 1、开启phpstudy 2、找到phpstudy目录下的www文件夹&#xff0c;创建less01文件夹、index.html、web.php文件&#xff0c;进行配置&#xff0c;如下图&#xff1a; 3、重启一下phpstudy&#xff0c;然后访问网页 4、上面只能通过文件目录…

MIMO系统中差分空间调制解调matlab误码率仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 空间调制原理 4.2 发送端模型 4.3 接收端模型 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完…