当前位置:首页 > JavaScript

js实现图片放大效果

2026-01-30 12:02:54JavaScript

使用 CSS transform 实现放大效果

通过 CSS 的 transform: scale() 属性配合过渡效果实现平滑放大。将以下代码添加到图片元素的样式或类中:

.img-zoom {
  transition: transform 0.3s ease;
}
.img-zoom:hover {
  transform: scale(1.5); /* 放大1.5倍 */
}

动态计算放大位置(跟随鼠标)

结合鼠标事件实现跟随光标位置的放大效果,需监听 mousemove 事件计算相对位置:

js实现图片放大效果

const img = document.querySelector('.zoom-img');
img.addEventListener('mousemove', (e) => {
  const { left, top, width, height } = e.target.getBoundingClientRect();
  const x = ((e.clientX - left) / width) * 100;
  const y = ((e.clientY - top) / height) * 100;
  img.style.transformOrigin = `${x}% ${y}%`;
  img.style.transform = 'scale(2)';
});
img.addEventListener('mouseleave', () => {
  img.style.transform = 'scale(1)';
});

使用第三方库(如 medium-zoom)

对于更复杂的场景,可使用现成的库快速实现。安装 medium-zoom 后:

import mediumZoom from 'medium-zoom';
mediumZoom('.zoomable-image', {
  margin: 24,
  background: 'rgba(0, 0, 0, 0.8)'
});

创建放大镜组件

通过绝对定位的浮动层实现局部放大效果,需计算鼠标位置与放大比例:

js实现图片放大效果

function createMagnifier(imgElement, zoom = 2) {
  const magnifier = document.createElement('div');
  magnifier.className = 'magnifier';
  document.body.appendChild(magnifier);

  imgElement.addEventListener('mousemove', (e) => {
    const { left, top, width, height } = imgElement.getBoundingClientRect();
    const x = e.clientX - left;
    const y = e.clientY - top;

    magnifier.style.display = 'block';
    magnifier.style.left = `${e.clientX + 20}px`;
    magnifier.style.top = `${e.clientY + 20}px`;
    magnifier.style.backgroundImage = `url(${imgElement.src})`;
    magnifier.style.backgroundSize = `${width * zoom}px ${height * zoom}px`;
    magnifier.style.backgroundPosition = `-${x * zoom}px -${y * zoom}px`;
  });

  imgElement.addEventListener('mouseleave', () => {
    magnifier.style.display = 'none';
  });
}

对应的 CSS 样式:

.magnifier {
  position: absolute;
  width: 150px;
  height: 150px;
  border-radius: 50%;
  border: 3px solid #fff;
  pointer-events: none;
  display: none;
  box-shadow: 0 0 10px rgba(0,0,0,0.5);
}

响应式处理

针对移动设备添加触摸事件支持:

imgElement.addEventListener('touchmove', (e) => {
  const touch = e.touches[0];
  const { left, top, width, height } = imgElement.getBoundingClientRect();
  const x = ((touch.clientX - left) / width) * 100;
  const y = ((touch.clientY - top) / height) * 100;
  imgElement.style.transformOrigin = `${x}% ${y}%`;
  imgElement.style.transform = 'scale(2)';
});

标签: 效果图片
分享给朋友:

相关文章

h5如何实现vr效果

h5如何实现vr效果

使用WebXR API实现VR效果 WebXR是浏览器中实现VR/AR的核心API,支持设备姿态追踪、渲染交互等功能。需在支持WebXR的设备(如Oculus、HTC Vive)或浏览器模拟环境中运行…

vue实现气泡效果

vue实现气泡效果

实现气泡效果的方法 在Vue中实现气泡效果可以通过CSS动画、第三方库或自定义组件完成。以下是几种常见方法: 使用纯CSS动画 通过CSS的@keyframes和transform属性创建气泡上升动…

vue实现预览效果

vue实现预览效果

实现预览效果的常见方法 在Vue中实现预览效果可以通过多种方式完成,以下列举几种典型场景和对应的实现方案: 图片/文件预览 使用<input type="file">结合FileRead…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…

实现图片旋转js

实现图片旋转js

使用CSS transform属性旋转图片 通过CSS的transform属性可以轻松实现图片旋转。以下是一个简单的示例代码: const image = document.getElement…

js实现图片拖拽

js实现图片拖拽

实现图片拖拽的基本步骤 HTML 结构需要包含可拖拽的图片元素,并设置 draggable 属性为 true: <img id="dragImage" src="image.jpg" drag…