当前位置:首页 > JavaScript

js实现图片放大

2026-01-16 12:06:26JavaScript

使用 CSS transform 实现图片放大

通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。

const img = document.querySelector('img');
img.addEventListener('mouseenter', () => {
  img.style.transition = 'transform 0.3s ease';
  img.style.transform = 'scale(1.2)';
});
img.addEventListener('mouseleave', () => {
  img.style.transform = 'scale(1)';
});

使用 CSS zoom 属性

CSS 的 zoom 属性也可以实现简单的放大效果,但注意这个属性是非标准属性。

const img = document.querySelector('img');
img.addEventListener('mouseover', () => {
  img.style.zoom = '150%';
});
img.addEventListener('mouseout', () => {
  img.style.zoom = '100%';
});

创建放大镜效果

实现类似放大镜的效果,在鼠标位置显示放大后的图片区域。

const img = document.getElementById('zoom-img');
const lens = document.createElement('div');
lens.style.position = 'absolute';
lens.style.width = '100px';
lens.style.height = '100px';
lens.style.border = '1px solid #000';
lens.style.background = 'rgba(255, 255, 255, 0.3)';
lens.style.display = 'none';
document.body.appendChild(lens);

img.addEventListener('mousemove', (e) => {
  lens.style.display = 'block';
  lens.style.left = `${e.pageX - 50}px`;
  lens.style.top = `${e.pageY - 50}px`;

  const zoom = 2;
  const x = e.offsetX;
  const y = e.offsetY;
  img.style.transformOrigin = `${x}px ${y}px`;
  img.style.transform = `scale(${zoom})`;
});

img.addEventListener('mouseleave', () => {
  lens.style.display = 'none';
  img.style.transform = 'scale(1)';
});

使用第三方库实现高级放大

对于更复杂的放大效果,可以使用专门的 JavaScript 库如 zoomingmedium-zoom

安装 medium-zoom:

npm install medium-zoom

使用示例:

import mediumZoom from 'medium-zoom';

const zoom = mediumZoom('[data-zoomable]', {
  margin: 24,
  background: '#000',
  scrollOffset: 40,
});

响应式图片放大

确保放大效果在不同屏幕尺寸下都能正常工作。

function setupImageZoom() {
  const images = document.querySelectorAll('.zoomable');

  images.forEach(img => {
    const originalWidth = img.naturalWidth;
    const originalHeight = img.naturalHeight;

    img.addEventListener('click', () => {
      const scale = Math.min(
        window.innerWidth / originalWidth,
        window.innerHeight / originalHeight
      ) * 0.9;

      img.style.transform = `scale(${scale})`;
      img.style.transition = 'transform 0.3s ease';
    });
  });
}

window.addEventListener('resize', setupImageZoom);
window.addEventListener('load', setupImageZoom);

触摸设备支持

为移动设备添加触摸支持的双击放大功能。

js实现图片放大

const img = document.querySelector('img');
let lastTap = 0;

img.addEventListener('touchend', (e) => {
  const currentTime = new Date().getTime();
  const tapLength = currentTime - lastTap;

  if (tapLength < 300 && tapLength > 0) {
    if (img.style.transform === 'scale(2)') {
      img.style.transform = 'scale(1)';
    } else {
      img.style.transform = 'scale(2)';
    }
    e.preventDefault();
  }
  lastTap = currentTime;
});

标签: 图片js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

网页制作css图片切换

网页制作css图片切换

CSS图片切换的实现方法 使用CSS实现图片切换可以通过多种方式完成,以下是几种常见的方法: 纯CSS轮播图 通过CSS动画和关键帧实现自动轮播效果。定义一个容器,内部放置多个图片,利用anima…

vue实现图片打点

vue实现图片打点

实现图片打点的基本思路 图片打点功能通常指在图片上添加可交互的标记点,点击或悬停时显示相关信息。Vue实现该功能需要结合DOM操作和事件监听。 核心步骤 准备图片和容器 在Vue组件中设置一个相对定…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…