js 图片缩放特效代码

yizhihongxing

下面是详细讲解“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日

相关文章

  • vue项目打包优化的方法实战记录

    为了优化Vue项目的打包体积和加载速度,我们可以采取以下几个方法: 1. 拆分第三方库和业务代码 在项目开发过程中,我们经常会使用一些第三方库,如lodash、moment等,这些库往往会占用较大的文件体积。为了减小打包体积,可以将它们拆分到不同的chunk中,例如使用webpack的SplitChunksPlugin插件进行拆分。除此之外,我们还可以将业务…

    JavaScript 2023年6月11日
    00
  • 原生JS封装animate运动框架的实例

    当我们需要进行网页中的动画操作,很多时候会涉及到DOM元素的运动,比如移动、旋转、透明度变化等等。这时候,JavaScript的animate函数封装可以帮助我们更加方便地实现动画效果。 以下是原生JS封装animate运动框架的实例的完整攻略: 1. 利用JavaScript封装animate运动框架 我们首先需要使用JavaScript来封装animat…

    JavaScript 2023年6月10日
    00
  • 使用C# 的webBrowser写模拟器时的javascript脚本调用问题

    使用 C# 的 WebBrowser 写模拟器时,常常涉及到对 JavaScript 脚本的调用。以下是一个完整的攻略,详细讲解如何在 C# 的 WebBrowser 中调用 JavaScript 脚本。 1. 步骤一:向 WebBrowser 添加加载完成事件 首先需要向 WebBrowser 添加加载完成事件,确保在页面加载完成后再执行 JavaScri…

    JavaScript 2023年6月10日
    00
  • 解析如何利用iframe标签以及js制作时钟

    当我们需要在网页上显示时钟时,可以使用iframe标签和JS来实现。本文将详细介绍如何利用iframe标签和JS制作时钟。 步骤1:创建HTML网页 首先,在你的HTML文件中,创建一个标签,在其中指定一个id,以便在后面的JavaScript代码中引用。 <!DOCTYPE html> <html> <head> &lt…

    JavaScript 2023年6月10日
    00
  • JavaScript 异步调用框架 (Part 2 – 用例设计)

    JavaScript异步调用框架 (Part 2 – 用例设计) 什么是异步调用? JavaScript是一种单线程的语言,所以同一时间只能执行一个任务。当一个任务阻塞了线程时,其他任务只能等待。由于JavaScript常用于web编程中,用户期望网页能够立即响应他们的操作。如果JavaScript因为执行某些长时间运行的函数而阻塞了线程,网页将会出现卡顿的…

    JavaScript 2023年5月28日
    00
  • 关于导入excel时js转换时间的正确方式

    针对“关于导入Excel时JS转换时间的正确方式”的问题,我准备提供以下攻略: 标准日期格式 在Excel中,日期一般使用“yyyy-mm-dd”或“yyyy/mm/dd”的格式表示,如果以文本形式存储的话,在JS中转换日期时会出现错误。因此,在将Excel表格中的日期数据导入时,需要对日期进行预处理,将其按照标准的日期格式进行存储。这里推荐使用xlsx或e…

    JavaScript 2023年5月27日
    00
  • 如何在wxml中直接写js代码(wxs)

    下面是如何在wxml中直接写js代码(wxs)的攻略: 编写wxs文件 首先需要编写wxs文件,在wxs文件中可以编写js代码。在wxml中可以通过< wxs >标签引入wxs文件,引入后可以直接使用wxs中的变量或函数。 示例代码如下: // test.wxs module.exports.add = function (a, b) { ret…

    JavaScript 2023年6月11日
    00
  • Javascript执行流程细节原理解析

    Javascript执行流程细节原理解析 在进行 Javascript 开发时,我们经常需要关注程序的执行流程,特别是当代码复杂时,错误一般发生在执行时的细节中。本文将深入讲解 Javascript 执行流程的细节原理。 Javascript 执行基础 Javascript 代码的执行流程遵循单线程、事件驱动的基本原则。单线程指的是 Javascript 引…

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