一、使用CSS实现图片缩放

1.1 基本原理

1.2 代码示例

<template>
  <div>
    <img :style="{ transform: 'scale(' + scale + ')' }" src="example.jpg" alt="Example Image">
    <input type="range" min="0.5" max="2" step="0.1" v-model="scale">
  </div>
</template>

<script>
export default {
  data() {
    return {
      scale: 1
    };
  }
};
</script>

二、使用JavaScript实现图片缩放

2.1 基本原理

2.2 代码示例

<template>
  <div>
    <img ref="image" @mousedown="startDrag" src="example.jpg" alt="Example Image">
  </div>
</template>

<script>
export default {
  data() {
    return {
      isDragging: false,
      offsetX: 0,
      offsetY: 0
    };
  },
  methods: {
    startDrag(event) {
      this.isDragging = true;
      this.offsetX = event.clientX - this.$refs.image.getBoundingClientRect().left;
      this.offsetY = event.clientY - this.$refs.image.getBoundingClientRect().top;
      document.addEventListener('mousemove', this.drag);
      document.addEventListener('mouseup', this.endDrag);
    },
    drag(event) {
      if (this.isDragging) {
        let x = event.clientX - this.offsetX;
        let y = event.clientY - this.offsetY;
        this.$refs.image.style.left = x + 'px';
        this.$refs.image.style.top = y + 'px';
      }
    },
    endDrag() {
      this.isDragging = false;
      document.removeEventListener('mousemove', this.drag);
      document.removeEventListener('mouseup', this.endDrag);
    }
  }
};
</script>

三、集成第三方插件

3.1 使用v-viewer插件

3.1.1 安装

npm install v-viewer --save

3.1.2 使用

main.js中引入并使用v-viewer插件:

import 'viewerjs/dist/viewer.css';
import Viewer from 'v-viewer';
Vue.use(Viewer);

在页面中使用v-viewer标签:

<template>
  <div>
    <viewer :images="images">
      <img v-for="(image, index) in images" :key="index" :src="image.src" alt="Image">
    </viewer>
  </div>
</template>

<script>
export default {
  data() {
    return {
      images: [
        { src: 'example1.jpg' },
        { src: 'example2.jpg' }
      ]
    };
  }
};
</script>

3.2 使用medium-zoom插件

3.2.1 安装

npm install medium-zoom --save

3.2.2 使用

在Vue组件中引入medium-zoom并使用:

import { MediumZoom } from 'medium-zoom';

export default {
  mounted() {
    this.zoom = new MediumZoom(this.$el);
  },
  beforeDestroy() {
    this.zoom.destroy();
  }
};
</script>

<template>
  <div ref="zoomable">
    <img src="example.jpg" alt="Example Image">
  </div>
</template>

四、总结