当前位置:首页 > 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)';
});

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

相关文章

vue实现图片

vue实现图片

Vue 实现图片功能的方法 静态图片引入 在 Vue 项目中,可以通过 src 属性直接引入静态图片。图片通常放在 public 或 assets 目录下。 <template> &…

vue实现图片单选

vue实现图片单选

实现图片单选功能 在Vue中实现图片单选功能可以通过v-model绑定选中状态,结合CSS样式控制选中效果。以下是具体实现方式: 基础实现方案 <template> <div…

css网页制作漂浮图片

css网页制作漂浮图片

使用CSS实现漂浮图片效果 通过CSS的animation属性和@keyframes规则可以轻松实现图片漂浮效果。以下是几种常见实现方式: 基础漂浮动画 通过关键帧定义图片的垂直移动,模拟漂浮感:…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

jquery 图片

jquery 图片

jQuery 图片操作 jQuery 提供了多种方法来操作图片,包括加载、显示、隐藏、调整尺寸等。以下是一些常见的图片操作方法: 动态加载图片 使用 attr() 方法可以动态修改图片的 src 属…

h5实现图片压缩

h5实现图片压缩

使用Canvas API压缩图片 HTML5的Canvas API可以通过调整画布尺寸和图像质量来实现图片压缩。创建一个Canvas元素,将图片绘制到Canvas上,再通过toDataURL或toBl…