vue3 预览图片内放大缩小功能+加鼠标滚动事件放大缩小

vue3 图片的放大缩小功能附加百分比输出

功能介绍

在做后台时组件图片预览功能,这个图片放大缩小感觉有点意思,自己就写了一个简易小demo。

下面是制作完毕的视频(样式随便写了写有点丑不要介意)

暂时只有放大缩小功能

实现思路

目前有两个方向实现
	1)通过css transform:scale(1); 控制图片的缩放比实现放大缩小功能。
	但是弊端是只能根据你自己设定的宽度去缩放。下面是实现代码:
<div class="previewImage">
       <!--图片父元素,再此添加溢出隐藏-->
       <p class="show" v-show="display">{{ percentage + "%" }}</p>
       <p class="hint" v-show="status == 1">不能再放大了!</p>
       <p class="hint" v-show="status == 2">不能再缩小了!</p>
	<div class="Exhibition" :style="{ transform: `scale(${w}, ${h})` }" v-for="item in ImgList"
         :key="item.id"
         v-show="
           preViewID == item.id ? (item.switch = true) : (item.switch = false)
         "><!--这里循环的是放置图片的数组-->
		 <img
		   :src="item.img"
		   alt=""
		 />
	</div>
</div>
<!-- 导航图标  (这里我用的本地图片你们可以切换为网络图片测试)-->
<div class="BigNav">
  <img src="../assets/u120.png" @click="change(true)" alt="" /><!--加号-->
  <img
    src="../assets/u110.png"
    @click="change(false)"
    alt=""
  /><!--减号-->
  <img src="../assets/u100.png" alt="" />
  <img src="../assets/u190.png" alt="" />
  <img src="../assets/u170.png" alt="" />
  <img src="../assets/u160.png" alt="" />
  <img src="../assets/u150.png" alt="" />
  <img src="../assets/u200.png" alt="" />
  <img src="../assets/u180.png" alt="" />
  <img src="../assets/u130.png" alt="" />
  <img src="../assets/u140.png" alt="" />
</div>
	js部分
const ImgList = ref([
      {
        img: "https://www.helloimg.com/images/2022/06/22/ZnxrhX.png",
        id: "1",
        switch: false,
      },
      {
        img: "https://s1.ax1x.com/2022/04/11/LVnutK.jpg",
        id: "2",
        switch: false,
      },
      {
        img: "https://s1.ax1x.com/2022/04/11/LVpkVJ.png",
        id: "3",
        switch: false,
      },
      {
        img: "https://s1.ax1x.com/2022/04/11/LVnutK.jpg",
        id: "4",
        switch: false,
      },
      {
        img: "https://s1.ax1x.com/2022/06/23/jPCkOs.png",
        id: "5",
        switch: false,
      },
      {
        img: "https://s1.ax1x.com/2022/06/23/jPZRyT.png",
        id: "6",
        switch: false,
      },
    ]); //图片数组
    
// 加减改变时 每次
    let timeout;
    const change = (state) => {
      timeout && clearTimeout(timeout);
      display.value = true;
      if (state) {
        percentage.value += 0.1 * 100;//计算百分比
        w.value += 0.1;
        h.value += 0.1;
      } else {
        if (percentage.value > 50) {
          percentage.value -= 0.1 * 100;
          w.value -= 0.1;
          h.value -= 0.1;
        } else {
          status.value = 2;
        }
      }

      timeout = setTimeout(() => {
        status.value = 0;
        display.value = false;
      }, 500);
    };
// 鼠标滚动监听
    function handleScroll() {
      window.addEventListener("mousewheel", (e) => {
        var delta = 0;
        if (!e) e = window.event;
        if (e.wheelDelta) {
          //IE、chrome浏览器使用的是wheelDelta,并且值为“正负120”
          delta = e.wheelDelta / 120;
          if (window.opener) delta = -delta; //因为IE、chrome等向下滚动是负值,FF是正值,为了处理一致性,在此取反处理
        } else if (e.detail) {
          //FF浏览器使用的是detail,其值为“正负3”
          delta = -e.detail / 3;
        }
        // if (delta) handle(delta);
        // console.log(e);
        let direction = delta < 0 ? false : true; //true是向上
        change(direction);
      });
    }
	css部分就把父级设置宽高图片自适应就可以

其他方案实现请查看下一篇vue3 预览图片放大缩小功能百分比输出+鼠标滚动事件放大缩小(2)

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Vue移动端中实现图片的双指放大缩小和拖拽,可以通过以下步骤进行操作。 首先,需要在Vue组件中引入相应的移动端手势库,比如AlloyFinger或是基于它封装的vue-alloyfinger插件。这些手势库可以监听移动端的触摸事件,方便实现手势操作。 其次,在组件的模板中需要渲染一张图片,并设置图片的初始宽度和高度。可以通过绑定样式属性的方式,将图片的宽度和高度与组件中的data数据绑定起来。 然后,需要为图片绑定手势事件,并在对应的方法中实现双指放大缩小和拖拽的逻辑。比如,可以监听双指缩放事件,在事件处理函数中根据手指的位置和缩放比例来更新图片的宽度和高度。可以监听拖拽事件,在事件处理函数中根据手指的移动距离来更新图片的位置。 最后,还可以添一些边界判断,比如设置图片的最大和最小缩放比例,防止图片过小或过大。还可以添过渡动画,使操作更平滑。 需要注意的是,双指放大缩小和拖拽的实现需要一定的数学计算,比如计算手指的距离和角度,或是计算图片的偏移量等。因此,在实现过程中需要对数学计算有一定的了解。 综上所述,通过Vue和移动端手势库,我们可以很方便地实现图片的双指放大缩小和拖拽功能。通过监听手势事件,并在事件处理函数中更新图片的属性和位置,可以实现用户友好的图片操作效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a-pei651

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值