图片懒加载

什么是图片懒加载?

实现图片懒加载

1. 使用Vue内置指令v-lazy

<img v-lazy="imageSrc" alt="描述">

2. 使用第三方库

<template>
  <img v-lazy="imageSrc" alt="描述">
</template>

<script>
import Vue from 'vue';
import VueLazyload from 'vue-lazyload';

Vue.use(VueLazyload);
</script>

3. 自定义指令

Vue.directive('lazy', {
  inserted: function(el, binding) {
    const imageSrc = binding.value;
    const img = new Image();
    img.src = imageSrc;
    img.onload = () => {
      el.src = imageSrc;
    };
  }
});
<img v-lazy="imageSrc" alt="描述">

放大镜效果

什么是放大镜效果?

实现放大镜效果

以下是一个使用Vue和CSS实现放大镜效果的示例:

<template>
  <div class="magnifier-container">
    <img :src="imageSrc" alt="描述" @mousemove="handleMouseMove" @mouseenter="handleMouseEnter" @mouseleave="handleMouseLeave">
    <div class="magnifier" :style="{ left: magnifierPosition.x + 'px', top: magnifierPosition.y + 'px' }"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      magnifierPosition: { x: 0, y: 0 },
      imageSrc: 'path/to/image.jpg',
    };
  },
  methods: {
    handleMouseMove(event) {
      const magnifier = event.target.nextElementSibling;
      const image = event.target;
      const rect = image.getBoundingClientRect();
      const magnifierRect = magnifier.getBoundingClientRect();
      const x = event.clientX - rect.left - magnifierRect.width / 2;
      const y = event.clientY - rect.top - magnifierRect.height / 2;
      this.magnifierPosition = { x, y };
    },
    handleMouseEnter() {
      this.$el.querySelector('.magnifier').style.display = 'block';
    },
    handleMouseLeave() {
      this.$el.querySelector('.magnifier').style.display = 'none';
    },
  },
};
</script>

<style>
.magnifier-container {
  position: relative;
  width: 300px;
  height: 300px;
}
.magnifier {
  position: absolute;
  display: none;
  width: 100px;
  height: 100px;
  background: url('path/to/enlarged-image.jpg') no-repeat;
  background-size: 600px 600px;
}
</style>

总结