Newer
Older
dxCard-admin / src / views / super / airag / aiapp / chat / components / ImageViewer.vue
YFJ on 23 Sep 1 KB 项目推送
<!--image放大封装-->
<template>
  <div class="amplify-image">
    <div class="img-preview-content" @click="hideImageClick" @mousewheel="handlePicMousewheel">
      <img :src="imageUrl" ref="imageRef" />
    </div>
  </div>
</template>

<script setup lang="ts">
  //图片地址
  import {onMounted, ref, unref} from 'vue';
  const props = defineProps(['imageUrl']);
  const emit = defineEmits(['register', 'hide']);
  //图片的ref
  const imageRef = ref();
  //缩放级别
  const scale = ref<number>(1);

  /**
   * 隐藏图片
   */
  function hideImageClick() {
    scale.value = 1;
    emit('hide')
  }

  /**
   * 鼠标滑轮滚动
   * @param event
   */
  function handlePicMousewheel(event) {
    event.preventDefault();
    // 判断是放大还是缩小
    const delta = event.deltaY > 0 ? -1 : 1;
    const scaleStep = 0.1;
    // 更新缩放级别
    scale.value = scale.value + delta * scaleStep
    imageRef.value.style.transform = `scale(${unref(scale)})`;
  }
</script>

<style scoped lang="less">
.amplify-image{
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1000;
  background: rgba(0, 0, 0, 0.5);
  .img-preview-content{
    display: flex;
    width: 100%;
    height: 100%;
    color: #fff;
    justify-content: center;
    align-items: center;
    touch-action: none;
    -webkit-user-drag: none;
    img{
      transition: transform 0.3s;
      background-position: center center;
      background-repeat: no-repeat;
      -webkit-background-size: cover;
      -moz-background-size: cover;
      background-size: cover;
    }
  }
}
</style>