jQuery实现图片局部放大镜效果

yizhihongxing

首先,我们需要明确几个概念:放大镜效果,鼠标移动事件以及坐标计算。

放大镜效果指的是鼠标悬停在图片上时,在某一区域内看到放大后的图片效果。鼠标移动事件指的是鼠标从一个点移动到另一个点的事件,坐标计算则是指根据鼠标位置计算图片区域的位置和大小。

具体实现步骤如下:

  1. 引入jQuery库,并在HTML文档中添加一个div,用于展示放大后的图片效果。
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<div class="zoom"></div>
  1. 为图片添加鼠标悬停事件,并获取鼠标悬停时的位置。
<img src="image.png" alt="product" class="product-img">

<script>
$(".product-img").hover(function(event) {
  // 获取鼠标悬停位置
  var x = event.pageX - $(this).offset().left;
  var y = event.pageY - $(this).offset().top;
});
</script>
  1. 根据鼠标位置计算放大镜效果的位置和大小,并显示放大后的图片。
<!-- 放大镜效果容器 -->
<div class="zoom">
  <img src="image-large.png" alt="product">
</div>

<script>
$(".product-img").hover(function(event) {
  // 获取鼠标悬停位置
  var x = event.pageX - $(this).offset().left;
  var y = event.pageY - $(this).offset().top;

  // 计算放大镜效果的位置和大小
  var zoom_w = $(".zoom").width() / 2;
  var zoom_h = $(".zoom").height() / 2;
  var img_w = $(".product-img").width();
  var img_h = $(".product-img").height();
  var img_x = (img_w - zoom_w) / img_w * x;
  var img_y = (img_h - zoom_h) / img_h * y;

  // 设置放大镜效果位置和大小
  $(".zoom").css({
    left: x - zoom_w,
    top: y - zoom_h,
    backgroundPosition: -img_x + "px " + -img_y + "px"
  });

  // 显示放大后的图片
  $(".zoom").show();
}, function() {
  // 鼠标离开时隐藏放大镜效果
  $(".zoom").hide();
});
</script>

这样就实现了图片局部放大镜效果的功能。以下是两个示例说明:

示例1:用不同大小的图片实现局部放大

在HTML文档中添加两个图片,一个原图大小为200x200,另一个放大后的图片大小为400x400。然后在JavaScript代码中添加判断,当鼠标位置在原图的左半边时,显示原图,右半边时,显示放大后的图片。

<div>
  <img src="image.png" alt="product" class="product-img">
  <img src="image-large.png" alt="product" class="product-img-large" style="display:none">
  <div class="zoom"></div>
</div>

<script>
$(".product-img").hover(function(event) {
  var x = event.pageX - $(this).offset().left;
  var y = event.pageY - $(this).offset().top;

  var img_w = $(".product-img").width();
  if(x < img_w / 2) {
    $(".product-img").css("display", "block");
    $(".product-img-large").css("display", "none");
  } else {
    $(".product-img").css("display", "none");
    $(".product-img-large").css("display", "block");

    var zoom_w = $(".zoom").width() / 2;
    var zoom_h = $(".zoom").height() / 2;
    var img_w = $(".product-img-large").width();
    var img_h = $(".product-img-large").height();
    var img_x = (img_w - zoom_w) / img_w * x;
    var img_y = (img_h - zoom_h) / img_h * y;

    $(".zoom").css({
      left: x - zoom_w,
      top: y - zoom_h,
      backgroundPosition: -img_x + "px " + -img_y + "px"
    });
  }

  $(".zoom").show();
}, function() {
  $(".product-img").css("display", "block");
  $(".product-img-large").css("display", "none");
  $(".zoom").hide();
});
</script>

示例2:实现多张图片的局部放大

在HTML文档中添加多张图片,并将放大镜效果容器的class改为id,为每个图片添加一个data-zoom属性,用于指定对应的放大后的图片。

<div>
  <img src="image-1.png" alt="product" class="product-img" data-zoom="image-1-large.png">
  <img src="image-2.png" alt="product" class="product-img" data-zoom="image-2-large.png">
  <img src="image-3.png" alt="product" class="product-img" data-zoom="image-3-large.png">
  <div id="zoom"></div>
</div>

<script>
$(".product-img").hover(function(event) {
  var x = event.pageX - $(this).offset().left;
  var y = event.pageY - $(this).offset().top;

  var zoom_w = $("#zoom").width() / 2;
  var zoom_h = $("#zoom").height() / 2;
  var img_w = $(this).width();
  var img_h = $(this).height();
  var img_x = (img_w - zoom_w) / img_w * x;
  var img_y = (img_h - zoom_h) / img_h * y;

  $("#zoom").css({
    left: x - zoom_w,
    top: y - zoom_h,
    background: "url("+$(this).data("zoom")+") no-repeat -"+img_x+"px -"+img_y+"px"
  });

  $("#zoom").show();
}, function() {
  $("#zoom").hide();
});
</script>

这样就可以实现多张图片的局部放大效果了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery实现图片局部放大镜效果 - Python技术站

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

相关文章

  • Css和JS实现下划线动效的方法示例

    下面我将详细讲解如何通过CSS和JS实现下划线动效的方法。在这个攻略中,我会给出两个实现下划线动效的示例。 简单实现下划线动效的CSS方法 首先,HTML需要包裹一个文本,例如一个h1标题或者p段落。 <h1>Hello World</h1> 在CSS文件中添加下列代码块。 h1 { position: relative; } h1:…

    css 2023年6月10日
    00
  • 基于jquery的bankInput银行卡账号格式化

    基于jquery的bankInput银行卡账号格式化 简介 本攻略介绍了基于jquery的bankInput银行卡账号格式化,帮助网站开发者快速实现银行卡号的格式化功能。 环境准备 在使用bankInput之前,需要引入jquery库和bankInput库。 引入jquery库 <script src="//cdn.bootcss.com/j…

    css 2023年6月10日
    00
  • 真正了解CSS3背景下的@font face规则

    以下是关于“真正了解CSS3背景下的@font face规则”的完整攻略: 1. 了解@font-face规则 @font-face规则是CSS3中用来定义自定义字体的方法。它允许我们将自定义字体加载到网页上,而不必决定与用户计算机上预安装的字体的权衡。@font-face允许我们使用网络上的字体,并将它们应用于我们的网站中。 下面是@font-face规则…

    css 2023年6月9日
    00
  • 使你的网站快速跑起来

    下面是针对网站优化的攻略,使你的网站快速跑起来。 1. 压缩和缩小代码 减少代码的大小和数量可以大大减少加载时间。压缩和缩小(minify)代码是一种优化技术,能够减少文件的大小和数量,从而提高网站的加载速度。可以使用工具,如UglifyJS、Google Closure Compiler、CSS Minifier等来压缩和缩小JavaScript、CSS和…

    css 2023年6月9日
    00
  • PhpStorm利用快捷键提高编码效率

    当使用PhpStorm编辑器时,掌握一些快捷键可以提高编码效率并让我们更快地完成代码编写。以下是几个重要的快捷键和如何在PhpStorm中使用它们的完整攻略: 1. 快速复制粘贴一行或多行代码 要快速复制和粘贴一行或多行代码,可以使用以下快捷键: 复制一行代码:选中一行代码,按下Ctrl+C或Cmd+C。 粘贴代码:在要粘贴代码的位置上,按下Ctrl+V或C…

    css 2023年6月10日
    00
  • layui 设置table 行的高度方法

    下面是关于“layui 设置table 行的高度方法”的完整攻略: 一、给表格的样式加上 ID 或 class 首先给需要设置行高的表格加上一个 ID 或 class,示例代码如下: <table id="mytable" class="layui-table"> <thead> <tr&…

    css 2023年6月10日
    00
  • css教程之css设置字体颜色

    下面是“CSS教程之CSS设置字体颜色”的完整攻略: 1. CSS设置字体颜色的语法和属性 在CSS中,可以使用 color 属性来设置文字的颜色。该属性可以取值为: 单词颜色名称:例如 red、green、blue 等; 十六进制颜色值:例如 #ff0000 代表红色; RGB颜色值:例如 rgb(255, 0, 0) 也代表红色。 下面是一个语法示例: …

    css 2023年6月9日
    00
  • css语法结构

    下面是关于CSS语法结构的详细讲解,希望能够帮到您。 CSS语法结构 CSS是一种用于描述网页上样式和布局的语言。它使用一种名为“CSS规则”的结构来定义样式。每个CSS规则由选择器和一组声明块组成。 CSS规则的基本结构 一个典型的CSS规则由三部分组成: selector { property: value; } 其中,selector表示一组元素需要设…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部