当前位置: 首页 > news >正文

Vue 鼠标滚轮缩放图片的实现

@wheel="handleZoom"      监听鼠标滚轮事件

event.deltaY < 0                  代表向上滚动 

event.deltaY > 0                  代表向下滚动 

使用computed处理scale比例的变化

const imageStyle = computed(() => ({

  transform: `translate(-50%, -50%) scale(${scale.value})`,

}));



  • 利用 computed 计算 scale:通过 scaleOffset 控制缩放比例,scale 由计算属性动态计算,避免了直接修改 scale 的值。
  • scalePercentage 动态计算:缩放百分比通过 computed 动态计算,实时反映当前缩放比例。
  • watch 监听 scale 的变化:使用 watch 来监听 scale 的变化,自动显示并在 1 秒后隐藏缩放百分比,减少了不必要的手动定时器管理。
<template><!-- 图片 --><div class="img_bigbox" @wheel="handleZoom"><img :style="imageStyle" src="/img/tibet-2.jpg" ref="image" /><div class="scale-indicator" v-if="show">{{ scalePercentage }}%</div></div>
</template><script setup>
import { ref, computed } from "vue";
const show = ref(false);
// 获取图片元素引用
const image = ref(null);
// 定义初始缩放比例
const scale = ref(1);// 设置缩放增量
const zoomIncrement = 0.07;// 计算图片的样式
const imageStyle = computed(() => ({transform: `translate(-50%, -50%) scale(${scale.value})`,
}));// 显示缩放比例(转换为百分比)
const scalePercentage = computed(() => Math.round(scale.value * 100));// 图片缩放处理函数
const handleZoom = (event) => {show.value = true;// 设置定时器setTimeout(() => {show.value = false;}, 1000);// 判断滚动方向并设置新的缩放比例if (event.deltaY < 0) {// 向上滚动scale.value += zoomIncrement;} else {// 向下滚动scale.value -= zoomIncrement;scale.value = Math.max(scale.value, 0.3); // 确保最小缩放比例为0.3}
};
</script><style scoped>
.img_bigbox img {height: 300px;position: absolute;left: 50%;top: 50%;transition: transform 0.2s ease; /* 平滑缩放 */
}.scale-indicator {position: absolute;bottom: 10px;left: 50%;transform: translateX(-50%);background-color: rgba(0, 0, 0, 0.7);color: white;padding: 5px 10px;border-radius: 3px;font-size: 14px;text-align: center;
}
</style>

http://www.lryc.cn/news/497867.html

相关文章:

  • 全景图 与 6面图转换
  • 深入浅出:PHP 文件操作
  • 116. UE5 GAS RPG 实现击杀掉落战利品功能
  • 【批处理脚本】更改Windows系统中的 hosts 解析文件
  • fastDFS
  • 【Linux】存储
  • hadoop单机安装
  • 产品批量分类设置——未来之窗行业应用跨平台架构
  • 2024年中国各省份碳相关投资分析:区域差异与未来趋势
  • 【六足机器人】03步态算法
  • 路由VueRouter的基本使用
  • Guiding a Diffusion Model with a Bad Version of Itself
  • 快速上手!低功耗Air724UG模组软件指南:FTP示例
  • GAMES101 完结篇(笔记和作业)
  • 3D Slicer与MONAI人工智能三维影像处理
  • NC65客开单据自定义项处理以及自定义项相关介绍(超级详细带图以及代码NC65自定义项大全)
  • 责任链模式的理解和实践
  • 【大模型-向量库】详解向量库管理:连接管理、集合管理、向量管理
  • MySQL书籍推荐
  • 常见的数据结构:
  • 快速、高效的数据处理:深入了解 Polars 库
  • 【LINUX】Linux 下打包与部署 Java 程序的全流程指南
  • Spark 计算总销量
  • 矩阵置零
  • Ai编程cursor + sealos + devBox实现登录以及用户管理增删改查(十三)
  • 深度解读:生产环境中的日志优化与大数据处理实践20241116
  • docker 搭建gitlab,亲测可用
  • SpringBoot 分层解耦
  • opencv复习
  • flask-socketio相关总结