图片懒加载
什么是图片懒加载?
实现图片懒加载
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>