Vue 实现图片监听鼠标滑轮滚动实现图片缩小放大功能

news2025/7/14 1:58:25

前言

其实想要实现功能很简单,就是在一张图片上监听鼠标滑轮滚动的事件,然后根据上滚还是下滚实现图片的缩放。

效果:

在这里插入图片描述
注:该配图使用《漫画|有趣的了解一下赋值、深浅拷贝》文章图片,不存在侵权问题。

实现思路

在js中,onmousewheel是鼠标滑轮滚动事件,可以通过这个事件触发来改变图片的大小,实现图片放大缩小功能。但是我们这里是vue所以使用的是:mousewheel。@mousewheel来监听鼠标滑轮滚动。

<div id="productDrawing">
    <div class="alert">温馨提示:查看图纸时滚动鼠标可以放大缩小</div>
    <div class="productDrawing_Img" @mousewheel="handerPictu">
      <img
        id="oImg"
        src="../images/1.png"
        alt=""
        :style="{ width: imgWidth, height: imgHeight }"
      />
    </div>
  </div>

然后就可以在里面编写自己的业务逻辑了。

  handerPictu(e) {
      const img = document.getElementById("oImg");
      this.imgWidth = img.offsetWidth || img.width || img.clientWidth;
      this.imgHeight = img.offsetHeight || img.height || img.clientHeight;
      if (e.deltaY > 0) {
        console.log("鼠标向下滚动,图片缩小");
        this.imgWidth = `${this.imgWidth - 10}px`;
        this.imgHeight = `${this.imgHeight - 10}px`;
      } else {
        console.log("鼠标向上滚动,图片放大");
        this.imgWidth = `${this.imgWidth + 10}px`;
        this.imgHeight = `${this.imgHeight + 10}px`;
      }
      //   this.imgWidth = `${this.imgWidth}px`;
      console.log(this.imgWidth, this.imgHeight, "hou");
    },
  },

当鼠标在这个图片滚动滑轮的时候就会被这个时间监听到,然后就可以写自己的逻辑代码了。
单纯的使图片缩小放大还不至于使用防抖和节流啥的,但是如果需要请求后台记得做好防抖。

全页面代码:

可作为组件使用:

<template>
  <div id="productDrawing">
    <div class="alert">温馨提示:查看图纸时滚动鼠标可以放大缩小</div>
    <div class="productDrawing_Img" @mousewheel="handerPictu">
      <img
        id="oImg"
        src="../images/1.png"
        alt=""
        :style="{ width: imgWidth, height: imgHeight }"
      />
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      imgWidth: "auto",
      imgHeight: "auto",
    };
  },
  mounted() {},
  methods: {
    handerPictu(e) {
      const img = document.getElementById("oImg");
      console.log(img.offsetWidth, img.width, img.clientWidth);
      this.imgWidth = img.offsetWidth || img.width || img.clientWidth;
      this.imgHeight = img.offsetHeight || img.height || img.clientHeight;
      if (e.deltaY > 0) {
        console.log("鼠标向下滚动,图片缩小");
        this.imgWidth = `${this.imgWidth - 10}px`;
        this.imgHeight = `${this.imgHeight - 10}px`;
      } else {
        console.log("鼠标向上滚动,图片放大");
        this.imgWidth = `${this.imgWidth + 10}px`;
        this.imgHeight = `${this.imgHeight + 10}px`;
      }
      //   this.imgWidth = `${this.imgWidth}px`;
      console.log(this.imgWidth, this.imgHeight, "hou");
    },
  },
};
</script>
<style scoped lang="scss">
#productDrawing {
  width: 580px;
  height: 480px;
  border: 1px solid #edf1f5;
  overflow: hidden;
  .alert {
    height: 30px;
    font-size: 12px;
    line-height: 30px;
    border-radius: 2px;
    color: #9e7700;
    text-align: center;
    background: linear-gradient(90deg, #ffffff 0%, #fff7d3 50%, #fcfcfc 100%);
  }
  .productDrawing_Img {
    width: 580px;
    height: 450px;
    overflow: hidden;
    display: table-cell;
    vertical-align: middle;
    text-align: center;
    img {
      max-width: 100%;
      max-height: 100%;
    }
  }
}
</style>

相关知识点分享

mousewheel

mousewheel鼠标滚轮,显而易见动动鼠标滚轮就能触发事件,但是用光标拖拽滚动条就不能触发事件。
wheelDelta、wheelDeltaX和wheelDeltaY值
这属性值是一个抽象值,表示轮子转了多远。如果滚轮旋转远离用户,则为正,否则为负。这意味着增量值符号不同于DOM级别3事件的符号车轮。但是,这些值的数量在不同浏览器之间的意义并不相同。详情见以下解释。
IE和Opera (Presto)仅支持属性和do不支持水平滚动。
这wheelDeltaX属性值指示沿水平轴的属性值。当用户操作设备向右滚动时,该值为负。否则,也就是说,如果向左,则值为正。
这wheelDeltaY属性值指示沿垂直轴的属性值。值的符号与车轮三角洲属性值。
有火狐鼠标滚轮兼容问题。

onmousewheel

onmousewheel事件:会在鼠标滚轮滚动的时候被触发,对鼠标滚轮是否滚动进行判断,但是火狐浏览器不支持这个属性。DOMMouseScroll可以为火狐浏览器绑定滚动事件,它需要通过addEventListener函数来绑定。

event.wheelDellta:可以用来获取鼠标的滚动方向,对于得到的值,只看正负,往上滚是正值,往下滚是负值。火狐浏览器不支持这个方法,需要会用event.detail来获取滚轮的滚动方向,向上是负值,向下是正值。

在页面有滚动条的时候,滚动条会随着鼠标滚轮滚动而滚动,这是浏览器的默认行为,可用return false来取消浏览器的默认行为。
有火狐鼠标滚轮兼容问题。

参考链接:
https://blog.csdn.net/Fantasc/article/details/119619584
https://developer.mozilla.org/zh-CN/docs/Web/API/Element/mousewheel_event

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

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

相关文章

规划数据指标体系方法(下)——新海盗模型

前面已经跟大家分享了规划数据指标体系的两种方法—— OSM 和 UJM 模型&#xff0c;分别从目标-策略以及用户旅途的角度阐述了规划数据指标体系的过程。今天我来跟大家分享最后一种规划数据指标体系的方法——新海盗模型。 了解新海盗模型 海盗模型&#xff0c;即 AARRR 模型&…

脑机接口科普0014——大脑

本文禁止转载&#xff01;&#xff01;&#xff01;&#xff01; 在提到脑机接口的时候&#xff0c;不得不提到大脑。 在我们的思维意识中&#xff0c;植物是没有大脑的。这是正确的。 在我们的思维意识中&#xff0c;动物都是有大脑的。 但是很明显&#xff0c;动物都有大…

程序员看过都说好的资源网站,你值得拥有。

程序员必备的相关资源网站一.技术社区1.GitHub2.Gitee&#xff08;码云&#xff09;3.稀土掘金4.OSCHINA开源中国5.CSDN6.博客园7.SegmentFault&#xff08;思否&#xff09;8.Stack Overflow9.Golang中文社区10.ChinaUnix11.51CTO12.Ruby China二.技术教程1.Devdocs2.码农教程…

案例解读| 从集中告警平台发展趋势看城商行如何落地数字化转型(二)

上期我们以具体案例入手&#xff0c;分享了集中告警平台到底应该与集中监控平台解耦还是紧绑定等问题。这一期依旧从具体案例切入&#xff0c;跟大家一起探索下告警与服务台的对接过程&#xff0c;以及这个过程中可能产生的问题。上期内容&#xff0c;一键回顾不迷路→案例解读…

17万字 JUC 看这一篇就够了(二) (精华)

今天我们继续来学习并发编程 17万字 JUC 看这一篇就够了(一) (精华) 线程池 基本概述 线程池&#xff1a;一个容纳多个线程的容器&#xff0c;容器中的线程可以重复使用&#xff0c;省去了频繁创建和销毁线程对象的操作 线程池作用&#xff1a; 降低资源消耗&#xff0c;减…

网络工程师面试题(面试必看)(1)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.正题 1.TCP UDP协议的区别

YARN基本架构

主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成&#xff0c;如图所YA示。 ResourceManager&#xff08;RM&#xff09; RM是全局资源管理器&#xff0c;负责整个系统的资源管理和分配 主要由两个组件构成&#xff1a;Scheduler调度器和应用程序…

ZYNQ嵌入式学习(5)

UARTUART简介发送FIFO接收FIFO模式切换寄存器操作中断和状态寄存器发送数据轮询中断接收数据轮询中断实验&#xff1a;串口中断数据环回UART简介 不需要了解时序。 UART是全双工异步收发的&#xff0c;没有时钟。 UART的操作通过配置和模式寄存器控制。 UART由独立的接受和发送…

Vue计算属性Computed

30. Vue计算属性Computed 1. 定义 Computed属性是Vue中的一个计算属性&#xff0c;是一种基于其它属性值计算而来的属性值&#xff0c;具有缓存机制&#xff0c;在依赖的属性值发生变化时会重新计算。 使用computed属性可以避免在模板中书写过多的计算逻辑&#xff0c;提高代…

【敏捷开发】jenkins「CI持续集成 CD持续部署」- 部署vue和go项目 - 待定

文章目录前言一、安装jenkins1. 部署中的痛点2. 什么是jenkins3. jenkins的安装和配置&#xff08;1&#xff09;下载&#xff08;2&#xff09;安装二、上传到运行服务器1. jenkins构建服务器流程2. 安装jenkins常用插件3. 通过freestyle构建项目4. 将构建服务器上的代码上传到…

Mybatis工程升级到FlunetMybatis后引发的问题以及解决方法

0. 背景交代为了提高开发速度,我打算将公司原有Mybatis框架升级为FlunetMybatis。可是遇到了一系列问题&#xff0c;下面开始爬坑工程结构示意如下&#xff1a;src/ ├── main │ ├── java.com.demo │ │ ├── Application.java //S…

常见数据模型

目录 1.1两类数据模型 1.2概念模型 1.3数据模型的组成要素 1.4常见数据模型 层次模型 网状模型 关系模型 数据模型是对现实世界数据特征的抽象&#xff0c;也就是说数据模型是用来描述数据、组织数据和对数据进行操作的。数据模型是数据库系统的核心和基础。 1.1两类数…

ip地址的分类及地址范围

IP地址根据网络ID的不同分为5种类型&#xff0c;A类地址、B类地址、C类地址、D类地址和E类地址。1、A类IP地址一个A类IP地址是指&#xff0c; 在IP地址的四段号码中&#xff0c;第一段号码为网络号码&#xff0c;剩下的三段号码为本地计算机的号码。A类IP地址中网络的标识长度为…

一种用于智能建筑云辅助检测的快速传感器放置位置优化方法

随着健康意识的觉醒&#xff0c;人们对居住的建筑提出了一系列与健康相关的要求&#xff0c;以期改善居住条件。在此背景下&#xff0c;BIM&#xff08;Building Information Modeling&#xff09;充分利用健康、环境、信息技术等诸多领域的前沿理论和技术&#xff0c;为工程师…

低代码开发的优势是什么?

低代码开发的优势是什么?低代码开发这个概念这两年来经常出现在人们的视野中&#xff0c;市场对于低代码的需求也越来越庞大。 Gartner预测&#xff0c;到2025年&#xff0c;75%的大型企业将使用至少四种低代码/无代码开发工具&#xff0c;用于IT应用开发和公民开发计划。 可…

Java面试题--Spring事务失效

Spring事务失效概述 Spring对事务的管理和处理&#xff0c;是基于AOP和编程范式的。因此Spring事务失效的场景较为丰富&#xff0c;包括但不限于以下常见情况&#xff1a; 异常被吞掉&#xff1a;当事务管理中出现异常但没有被正确捕捉并处理时&#xff0c;事务就会失效。例如…

Sedona 简介

Sedona 可以做什么? 分布式空间数据集 Spatial RDD on SparkSpatial DataFrame/SQL on SparkSpatial DataStream on FlinkSpatial Table/SQL on Flink 处理复杂的空间类型 Vector geometries / trajectoriesRaster images with Map AlgebraVarious input formats: CSV, TSV…

Vue 项目如何迁移小程序

最近我们看到有开发者在社群里提出新的疑惑「我手头已经有一个成熟的 HTML5 项目了&#xff0c;这种项目可以转为小程序在 FinClip 环境中运行吗&#xff1f;」。 经过工作人员的沟通了解&#xff0c;开发者其实是想将已有的 Vue 项目转为小程序&#xff0c;在集成了 FinClip …

(蓝桥真题)扫描游戏(计算几何+线段树二分)

题目链接&#xff1a;P8777 [蓝桥杯 2022 省 A] 扫描游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例输入&#xff1a; 5 2 0 1 1 0 3 2 4 3 5 6 8 1 -51 -33 2 样例输出&#xff1a; 1 1 3 4 -1 分析&#xff1a;先考虑如何对物件进行排序&#xff0c;首先&…

【PSO-PID】使用粒子群算法整定PID参数控制起动机入口压力值

最近在学优化算法&#xff0c;接触到了经典寻优算法之粒子群PSO&#xff0c;然后就想使用PSO算法来调节PID参数&#xff0c;在试验成功之后将此控制算法应用到了空气起动系统上&#xff0c;同时与之前的控制器进行对比看看哪种控制效果最好。 0 引言 PID参数整定主要有两种&…