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

news/2024/10/20 17:30:32/

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.ppmy.cn/news/1506112.html

相关文章

Flink 开发语言选择 —— Java vs Scala

引言 Apache Flink 是一个用于处理无界和有界数据流的开源分布式计算框架。随着 Flink 的日益流行&#xff0c;越来越多的开发者开始考虑使用哪种编程语言来进行 Flink 应用程序的开发。本文将探讨在 Flink 中使用 Java 和 Scala 的优缺点&#xff0c;并帮助你做出更明智的选择…

Linux Vim教程

Linux Vim 教程 Vim&#xff08;Vi IMproved&#xff09;是一个强大的文本编辑器&#xff0c;广泛用于编程和系统管理。本文将带你全面了解 Vim 的基础使用、常用命令、高级功能等。 1. 安装 Vim 在大多数 Linux 发行版中&#xff0c;Vim 已经预装。如果没有&#xff0c;可以…

Linux系统使用Docker安装RStudio服务并实现任意浏览器远程访问

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE&#xff0c;并通过 Web 浏览器进行访问…

Javaweb项目|ssm基于java的健身房管理系统的设计与实现vue

收藏点赞不迷路 关注作者有好处 文末获取源码 一、系统展示 二、万字文档展示 基于ssm基于java的健身房管理系统的设计与实现vue 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringSpringMVCMyBatisVue 工具&#xff1a;IDEA/Ecilpse、Navicat、Mav…

谷粒商城实战笔记-125-全文检索-ElasticSearch-整合-SpringBoot整合high-level-client

文章目录 一&#xff0c;技术选型1. 通过 TCP 连接&#xff08;9300 端口&#xff09;2. 通过 HTTP 连接&#xff08;9200 端口&#xff09;3.最终选择 二&#xff0c;SpringBoot整合Elasticsearch-Rest-High-Level-Client1&#xff0c;新增模块gulimall-search1&#xff0c;添…

springboot在线图库网站-计算机毕业设计源码38597

基于SpringbootVue的在线图库网站的设计与实现 摘 要 本文基于Spring Boot作为后端框架&#xff0c;Vue作为前端框架&#xff0c;设计并实现了一个功能丰富的在线图库网站。该网站提供了注册、登录、普通用户功能和管理员功能等一系列功能&#xff0c;为用户提供了方便的浏览摄…

无人机的控制系统的组成!

无人机的控制系统主要由以下几个部分组成&#xff1a; 飞行控制系统&#xff08;Flight Control System, FCS&#xff09;&#xff1a; 功能&#xff1a;负责控制无人机的姿态、高度、速度和航向等飞行参数。 组成&#xff1a;通常由传感器、机载计算机和执行机构组成。传感…

Python 爬虫入门(九):Scrapy安装及使用「详细介绍」

Python 爬虫入门&#xff08;九&#xff09;&#xff1a;Scrapy安装及使用「详细介绍」 前言1. Scrapy 简介2. Scrapy 的安装2.1 环境准备2.2 安装 Scrapy 3. 创建 Scrapy 项目3.1 创建项目3.2 项目结构简介 4. 编写爬虫4.1 创建爬虫4.2 解析数据4.3 运行爬虫 5. 存储数据5.1 存…