当前位置:首页 > JavaScript

js原声实现缩放

2026-03-01 14:32:39JavaScript

使用 CSS transform 实现缩放

通过修改元素的 transform 属性实现缩放效果。这种方式不会影响页面布局,适合交互式缩放。

const element = document.getElementById('target');
element.style.transform = 'scale(1.5)'; // 放大1.5倍
element.style.transformOrigin = 'center center'; // 设置缩放中心点

修改元素尺寸实现缩放

直接改变元素的宽高属性实现缩放,会影响页面文档流。

const element = document.getElementById('target');
const originalWidth = element.offsetWidth;
const originalHeight = element.offsetHeight;

// 放大到150%
element.style.width = (originalWidth * 1.5) + 'px';
element.style.height = (originalHeight * 1.5) + 'px';

鼠标滚轮交互缩放

监听鼠标滚轮事件实现动态缩放效果。

const target = document.getElementById('target');
let scale = 1;

target.addEventListener('wheel', (e) => {
  e.preventDefault();
  scale += e.deltaY * -0.01;
  scale = Math.min(Math.max(0.1, scale), 4); // 限制缩放范围
  target.style.transform = `scale(${scale})`;
});

动画缓动缩放效果

使用 requestAnimationFrame 实现平滑的缩放动画。

function animateScale(element, targetScale, duration = 300) {
  const startScale = parseFloat(element.style.transform.replace('scale(', '')) || 1;
  const startTime = performance.now();

  function update(currentTime) {
    const elapsed = currentTime - startTime;
    const progress = Math.min(elapsed / duration, 1);
    const currentScale = startScale + (targetScale - startScale) * progress;

    element.style.transform = `scale(${currentScale})`;

    if (progress < 1) {
      requestAnimationFrame(update);
    }
  }

  requestAnimationFrame(update);
}

双指触摸缩放

处理触摸事件实现移动端双指缩放。

const target = document.getElementById('target');
let initialDistance = null;

target.addEventListener('touchstart', (e) => {
  if (e.touches.length === 2) {
    initialDistance = Math.hypot(
      e.touches[0].clientX - e.touches[1].clientX,
      e.touches[0].clientY - e.touches[1].clientY
    );
  }
});

target.addEventListener('touchmove', (e) => {
  if (e.touches.length === 2 && initialDistance) {
    e.preventDefault();
    const currentDistance = Math.hypot(
      e.touches[0].clientX - e.touches[1].clientX,
      e.touches[0].clientY - e.touches[1].clientY
    );
    const scale = currentDistance / initialDistance;
    target.style.transform = `scale(${scale})`;
  }
});

保持宽高比的缩放计算

在改变尺寸时保持元素原始宽高比。

js原声实现缩放

function scaleWithAspectRatio(element, scaleFactor) {
  const originalWidth = element.offsetWidth;
  const originalHeight = element.offsetHeight;
  const aspectRatio = originalWidth / originalHeight;

  if (aspectRatio > 1) { // 宽大于高
    element.style.width = (originalWidth * scaleFactor) + 'px';
    element.style.height = 'auto';
  } else { // 高大于宽
    element.style.height = (originalHeight * scaleFactor) + 'px';
    element.style.width = 'auto';
  }
}

标签: 缩放原声
分享给朋友:

相关文章

vue缩放组件实现

vue缩放组件实现

Vue 缩放组件实现方法 基于 CSS transform 实现缩放 通过 CSS 的 transform: scale() 属性实现基础缩放效果。在 Vue 中动态绑定 scale 值,结合鼠标事…

vue标签怎么实现缩放

vue标签怎么实现缩放

实现 Vue 标签缩放的常用方法 使用 CSS transform 属性 通过 CSS 的 transform: scale() 属性可以直接实现元素的缩放效果。在 Vue 中可以通过绑定样式或类名动…

uniapp 页面缩放

uniapp 页面缩放

uniapp 页面缩放实现方法 在uniapp中实现页面缩放功能,可以通过以下几种方式实现: 使用CSS transform属性 通过CSS的transform属性实现缩放效果,适用于静态页面或简单…

php实现图片缩放

php实现图片缩放

使用GD库实现图片缩放 PHP的GD库提供了多种函数用于图像处理,包括图片缩放功能。以下是使用GD库进行图片缩放的步骤: 获取原始图片信息并创建图像资源 $sourceImage = imagec…

vue 实现展开缩放

vue 实现展开缩放

在 Vue 中实现展开/缩放效果可以通过动态 CSS 类、过渡动画或第三方库实现。以下是几种常见方法: 使用动态 Class 控制高度 通过绑定 class 或 style 切换元素高度,结…

vue 实现页面缩放

vue 实现页面缩放

Vue 实现页面缩放的常用方法 使用 CSS transform 缩放 在 Vue 组件的样式中,通过 transform: scale() 控制整个页面的缩放比例。 示例代码: <t…