Vue 3实现的移动端两指控制图片缩放功能

简介: Vue 3实现的移动端两指控制图片缩放功能

使用Vue 3的Composition API来实现的图片缩放功能。这是一个使用touch事件来实现的简单双指缩放图片的功能。

  1. 模板部分(Template)
  • <div>:这是一个相对定位的容器,同时设置overflow: hidden;以防止图片超出范围。这个元素监听了touchstarttouchmovetouchend事件。
  • <img>:这是要显示的图片,通过:style绑定动态的宽度。这个元素的引用被存储在image变量中,以便在脚本部分进行操作。
  1. 脚本部分(Script)
  • const image = ref(null);:创建一个引用(ref),用于存储图片元素的引用。
  • let initialDistance = 0;:初始化两个触摸点的初始距离。
  • let baseWidth = 100;:图片的初始宽度。
  • const imageWidth = ref(baseWidth);:创建一个引用,存储图片的宽度。
  • const onTouchStart = (event) => {...}:当双指触摸开始时,记录当前两个触摸点的距离。
  • const onTouchMove = (event) => {...}:当双指触摸移动时,计算当前两个触摸点的距离并与初始距离比较,根据比较结果调整图片的宽度。
  • const onTouchEnd = () => {...}:当双指触摸结束时,重置初始距离。

此代码示例在用户使用双指在屏幕上滑动时,会根据滑动的方向来放大或缩小图片的尺寸。其中,每次调整的幅度是10px,这个值可以根据实际需求进行调整。

<template>
  <div 
    style="position: relative; overflow: hidden;"
    @touchstart="onTouchStart"
    @touchmove="onTouchMove"
    @touchend="onTouchEnd"
  >
    <img 
      ref="image" 
      src="path_to_your_image.jpg" 
      alt="My Image" 
      :style="{ width: imageWidth + 'px' }"
    />
  </div>
</template>
<script setup>
import { ref } from 'vue';
const image = ref(null);
let initialDistance = 0;
let baseWidth = 100; // 初始宽度
const imageWidth = ref(baseWidth);
const onTouchStart = (event) => {
  if (event.touches.length === 2) {
    initialDistance = Math.hypot(
      event.touches[0].pageX - event.touches[1].pageX,
      event.touches[0].pageY - event.touches[1].pageY
    );
  }
};
const onTouchMove = (event) => {
  if (event.touches.length === 2) {
    const currentDistance = Math.hypot(
      event.touches[0].pageX - event.touches[1].pageX,
      event.touches[0].pageY - event.touches[1].pageY
    );
    if (currentDistance > initialDistance) {
      // 放大图片
      imageWidth.value += 10;
    } else if (currentDistance < initialDistance) {
      // 缩小图片,可添加边界条件判断防止过小
      imageWidth.value -= 10;
    }
    initialDistance = currentDistance;
  }
};
const onTouchEnd = () => {
  initialDistance = 0;
};
</script>
相关文章
|
7月前
|
JavaScript 前端开发 安全
Vue 3
Vue 3以组合式API、Proxy响应式系统和全面TypeScript支持,重构前端开发范式。性能优化与生态协同并进,兼顾易用性与工程化,引领Web开发迈向高效、可维护的新纪元。(238字)
954 139
|
7月前
|
缓存 JavaScript 算法
Vue 3性能优化
Vue 3 通过 Proxy 和编译优化提升性能,但仍需遵循最佳实践。合理使用 v-if、key、computed,避免深度监听,利用懒加载与虚拟列表,结合打包优化,方可充分发挥其性能优势。(239字)
525 1
|
8月前
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
872 11
|
7月前
|
JavaScript 安全
vue3使用ts传参教程
Vue 3结合TypeScript实现组件传参,提升类型安全与开发效率。涵盖Props、Emits、v-model双向绑定及useAttrs透传属性,建议明确声明类型,保障代码质量。
593 0
|
9月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
914 1
|
存储 JavaScript 网络架构
Vue3新增功能特性
Vue3相比Vue2更新技术点
|
8月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
675 2
|
7月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
575 137
|
11月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
1098 0
|
11月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能

热门文章

最新文章