js 图片缩放特效代码

下面是详细讲解“js 图片缩放特效代码”的完整攻略:

什么是图片缩放特效

图片缩放特效指的是使用 JavaScript 对图片进行放大、缩小、旋转、移动等视觉特效处理,以增强用户对页面的交互感和体验。常见的应用场景有图片轮播、幻灯片展示、相册浏览等。

如何实现图片缩放特效

实现图片缩放特效需要使用 JavaScript 和 CSS,具体实现过程如下:

  1. 定义 HTML 结构

首先在 HTML 页面中的任意位置插入一个包含图片的 div 容器,如下所示:

<div class="img-container">
  <img src="image.jpg" alt="image">
</div>
  1. 添加 CSS 样式

为图片容器和图片添加 CSS 样式,包括宽、高、位置、边框、背景等,如下所示:

.img-container {
  position: relative;
  width: 300px;
  height: 300px;
  margin: 0 auto;
  border: 1px solid #ccc;
}

.img-container img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover; /* 图片保持比例并填满容器 */
}
  1. 编写 JavaScript 代码

编写 JavaScript 代码实现对图片的缩放特效,其中需要监听鼠标事件和计算图片的缩放比例等,具体代码如下:

// 获取图片容器和图片对象
const imgContainer = document.querySelector('.img-container');
const img = imgContainer.querySelector('img');

// 定义缩放比例和最大缩放倍数
const scaleRatio = 0.1; // 缩放比例(10%)
const maxScale = 2; // 最大缩放倍数

// 监听鼠标滚轮事件
imgContainer.addEventListener('wheel', (event) => {
  // 取消默认行为(禁止页面滚动)
  event.preventDefault();

  // 获取当前缩放倍数
  const currentScale = getScale(img);

  // 计算缩放倍数的变化量
  const delta = event.deltaY > 0 ? -1 : 1;

  // 计算缩放后的大小
  const newScale = currentScale + delta * scaleRatio;
  const newWidth = img.naturalWidth * newScale;
  const newHeight = img.naturalHeight * newScale;

  // 根据缩放后的大小调整图片位置
  const xOffset = (newWidth - imgContainer.offsetWidth) / 2;
  const yOffset = (newHeight - imgContainer.offsetHeight) / 2;
  const left = Math.min(0, Math.max(-xOffset, -delta * scaleRatio * imgContainer.offsetWidth / 2));
  const top = Math.min(0, Math.max(-yOffset, -delta * scaleRatio * imgContainer.offsetHeight / 2));

  // 判断是否超过最大缩放倍数
  if (newScale <= 1 || newScale > maxScale) {
    return;
  }

  // 缩放图片
  img.style.width = newWidth + 'px';
  img.style.height = newHeight + 'px';
  img.style.left = left + 'px';
  img.style.top = top + 'px';
});

// 计算当前缩放倍数
function getScale(img) {
  const width = parseInt(img.style.width);
  const height = parseInt(img.style.height);
  const scaleX = width / img.naturalWidth;
  const scaleY = height / img.naturalHeight;
  return Math.min(scaleX, scaleY);
}
  1. 运行代码

将以上代码复制粘贴到 HTML 页面的 script 标签或外部 JS 文件中,并在浏览器中打开该页面,即可看到图片的缩放特效。

示例说明

下面是两条示例说明:

示例一

实现一个图片放大镜特效,当鼠标悬停在图片上时,图片被放大并在放大区域内显示,移动鼠标时显示放大区域内的不同部分,代码如下:

<div class="img-container">
  <div class="zoom-container"></div>
  <img src="image.jpg" alt="image">
</div>
.img-container {
  position: relative;
  width: 400px;
  height: 400px;
  margin: 0 auto;
  border: 1px solid #ccc;
}

.zoom-container {
  position: absolute;
  top: 0;
  left: 0;
  width: 200px;
  height: 200px;
  border: 1px solid #000;
  visibility: hidden;
  pointer-events: none;
}

.img-container:hover .zoom-container {
  visibility: visible;
}

.img-container img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
// 获取图片和放大区域
const imgContainer = document.querySelector('.img-container');
const img = imgContainer.querySelector('img');
const zoomContainer = imgContainer.querySelector('.zoom-container');

// 监听鼠标移动事件
imgContainer.addEventListener('mousemove', (event) => {
  // 计算鼠标在图片中的位置
  const rect = img.getBoundingClientRect();
  const x = event.clientX - rect.left;
  const y = event.clientY - rect.top;

  // 计算放大区域的偏移量
  const zoomX = x / img.width * zoomContainer.offsetWidth - zoomContainer.offsetWidth / 2;
  const zoomY = y / img.height * zoomContainer.offsetHeight - zoomContainer.offsetHeight / 2;

  // 显示放大区域
  zoomContainer.style.backgroundImage = `url(${img.src})`;
  zoomContainer.style.backgroundSize = `${img.width * 100 / zoomContainer.offsetWidth}% ${img.height * 100 / zoomContainer.offsetHeight}%`;
  zoomContainer.style.backgroundPosition = `-${zoomX}px -${zoomY}px`;
});

示例二

实现一个图片卡片翻转特效,当鼠标点击图片后,图片以翻转方式展开并显示介绍信息,再次点击时图片翻转回原来的状态,代码如下:

<div class="img-card">
  <div class="img-front">
    <img src="image.jpg" alt="image">
  </div>
  <div class="img-back">
    <h3>图片标题</h3>
    <p>图片介绍信息</p>
  </div>
</div>
.img-card {
  position: relative;
  width: 300px;
  height: 200px;
  margin: 0 auto;
  border: 1px solid #ccc;
  perspective: 1000px;
  transform-style: preserve-3d;
  cursor: pointer;
}

.img-front, .img-back {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  backface-visibility: hidden; /* 防止翻转时出现白色背景 */
}

.img-back {
  transform: rotateY(180deg);
}

.img-card.open .img-front {
  transform: rotateY(-180deg);
}

.img-card.open .img-back {
  transform: rotateY(0deg);
}
// 获取图片卡片
const imgCard = document.querySelector('.img-card');

// 监听点击事件
imgCard.addEventListener('click', (event) => {
  // 切换状态类
  imgCard.classList.toggle('open');
});

以上两条示例说明可以帮助你更好地理解和应用图片缩放特效技术。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js 图片缩放特效代码 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript—window对象使用示例

    下面就为大家详细讲解“JavaScript—window对象使用示例”的完整攻略。 什么是window对象 在javascript中,window对象是一个浏览器对象模型(Browser Object Model,BOM)的一部分,它代表了当前浏览器中的窗口或帧。所有的全局JavaScript对象都可以作为window对象的属性或方法被访问。下面我们来具体了…

    JavaScript 2023年5月27日
    00
  • JavaScript实现多文件下载方法解析

    JavaScript实现多文件下载方法解析 在前端开发中,我们可能会遇到需要同时下载多个文件的场景。如果只是下载单个文件,直接使用a标签即可;但是如果需要同时下载多个文件,就需要使用JavaScript来实现了。 1. 使用for循环下载多个文件 首先,我们可以通过for循环来实现多个文件的下载。下面是代码示例: function downloadFiles…

    JavaScript 2023年5月27日
    00
  • JavaScript如何动态监听DOM元素高度详解

    JavaScript如何动态监听DOM元素高度,可以通过以下步骤来完成: 步骤1:首先要获取需要监听高度的DOM元素,并给它设置高度的初始值,可以通过JavaScript代码来实现。 例如,获取ID为box的DOM元素,并设置它的高度初始值为400像素: var box = document.getElementById("box"); …

    JavaScript 2023年6月10日
    00
  • php+xml结合Ajax实现点赞功能完整实例

    这里是详细的“php+xml结合Ajax实现点赞功能完整实例”的攻略。 简介 在Web开发中,点赞功能是非常常见的需求。本攻略将使用PHP+XML+Ajax的组合,完成一个基本的点赞功能。其中,PHP用于处理请求,XML用于存储数据,Ajax用于异步更新网页。 处理请求 首先,需要在服务器端处理点赞请求。这里我们假设有一个like.php文件,用于接收请求并…

    JavaScript 2023年6月11日
    00
  • JavaScript实现时钟功能

    实现时钟功能是JavaScript中常见的任务之一,接下来我将分享一下实现时钟功能的完整攻略,包括代码和示例说明: 一、需求分析 实现一个时钟功能,需要具备以下基本需求: 能够显示当前时间 时间显示需要实时更新 时间格式需要符合常见的12小时制或24小时制的格式 二、实现步骤 HTML结构 在HTML中需要定义一个显示时间的DOM元素,用来展示时间。可以定义…

    JavaScript 2023年5月27日
    00
  • JavaScript仿flash遮罩动画效果

    下面是详细的“JavaScript仿flash遮罩动画效果”攻略: 1. 概述 遮罩效果是一种常见的动画效果,我们可以利用JavaScript实现类似Flash中的遮罩效果,通过遮罩来限制或显示要展示的内容,使得整个页面更加生动有趣。 2. 实现原理 JavaScript仿Flash遮罩动画的实现原理就是通过控制一个遮罩块的大小和位置,来限制或显示另一个块中…

    JavaScript 2023年6月10日
    00
  • 一个即时表单验证的javascript代码

    下面就为您详细讲解如何编写一个即时表单验证的 JavaScript 代码。 编写 JavaScript 表单验证代码的基本步骤 获取表单的各个输入项,如输入框、单选框、多选框等,并对每个输入项都定义一个监听事件(如 onblur、onkeyup 等),监听输入内容的改变。 在监听事件中编写检验函数,该函数应当返回布尔值来表示输入项是否符合要求。可以根据不同的…

    JavaScript 2023年6月10日
    00
  • javascript this用法小结

    当在JavaScript中调用函数时,常常使用this关键字来指向当前正在调用的函数。但this实际上有不同的使用方式,本篇文章将会对这些用法进行总结和说明。 1. 函数调用 当在函数内部直接使用this时,它将指向全局对象(浏览器中的window对象)。 function foo() { console.log(this); // window } foo…

    JavaScript 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部