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

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

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

具体实现步骤如下:

  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日

相关文章

  • 日常收藏的jquery技巧

    下面我会详细讲解“日常收藏的jquery技巧”的完整攻略。 日常收藏的jquery技巧 选择器 基本选择器 在jQuery中,选择器可以帮助我们找到HTML页面中指定的元素。在使用选择器时,我们可以使用以下几个基本选择器: * (星号):选择所有元素 element:选择指定元素名的元素,例如p、h1、div #id:选择指定id的元素,例如#header …

    css 2023年6月11日
    00
  • CSS背景色镂空技术实际应用及进阶分享

    下面就是一份详细讲解“CSS背景色镂空技术实际应用及进阶分享”的完整攻略: 什么是CSS背景色镂空技术? CSS背景色镂空技术是一种CSS技术,可用于将页面元素的背景色创建为一个镂空区域,使之呈现出“透明”的效果,从而展示出底层元素的背景色或背景图片。要达到这种效果,常见的实现方法是使用伪元素(:before和:after),借助属性content和back…

    css 2023年6月9日
    00
  • href和src、link和@import的区别详解

    下面我会为您详细讲解“href和src、link和@import的区别详解”的完整攻略。 一、href和src的区别 1.1 href href 表示超文本引用,主要用于在 HTML 页面中在当前文档和外部资源之间建立关系,例如链接到 CSS、JavaScript、图像、样式表等。 下面是一个链接到外部样式表的例子: <link rel="s…

    css 2023年6月9日
    00
  • 实例讲解CSS3中的border-radius属性

    我来为你详细讲解如何使用CSS3中的border-radius属性来实现圆角效果。 什么是border-radius? border-radius是CSS3新增的属性,可以用来将元素的边框设置为圆角。可以设置每个角的圆角半径,也可以同时设置四个角的圆角半径。 语法格式如下: border-radius: 水平方向半径 垂直方向半径; border-radiu…

    css 2023年6月10日
    00
  • 举例详解CSS中的text-shadow文字阴影效果使用

    当需要让文本在视觉上有一些立体感、深度感时,你可以尝试给文本添加阴影效果。而CSS中的text-shadow属性能够很好地实现这一效果。 一、text-shadow的基本用法 text-shadow属性主要用于设置文本的阴影效果,其基本语法如下: text-shadow: h-shadow v-shadow blur-radius color; 其中,各参数…

    css 2023年6月10日
    00
  • 浅谈HTML文件引入外部CSS文件时路径的写法总结

    HTML文件引入外部CSS文件时路径的写法是一个常见的技术问题,很多人在刚开始学习前端开发时可能会遇到这个问题。下面将详细讲解HTML文件引入外部CSS文件的路径写法总结。 1. HTML文件引入外部CSS文件的基本语法 HTML文件引入外部CSS文件的基本语法如下: <head> <link href="css_file_pat…

    css 2023年6月9日
    00
  • css 列表菜单的设计

    关于“CSS 列表菜单的设计”的完整攻略,我给您提供以下几点建议: 1. 设计导航菜单的结构 在设计CSS列表菜单前,需要先设计出导航菜单的基础结构。通常情况下,导航菜单的结构分为两个部分,一个是顶部菜单栏,另一个是下拉菜单栏。常见的设计是,顶部菜单栏包含菜单项,每个菜单项对应于一个下拉菜单栏,里面又列出了子菜单项。在HTML中,通常使用<ul>…

    css 2023年6月9日
    00
  • JS弹出层遮罩,隐藏背景页面滚动条细节优化分析

    关于“JS弹出层遮罩,隐藏背景页面滚动条细节优化分析”的攻略,我会从以下几个方面进行详细讲解: JS弹出层遮罩的实现思路 隐藏背景页面滚动条的实现思路 细节优化分析 1. JS弹出层遮罩的实现思路 实现思路主要可以分为以下几个步骤: 1.1 创建遮罩层 首先需要创建一个遮罩层,用于遮住页面背景。创建遮罩层可以通过CSS设置来实现,样式如下: #mask { …

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