jQuery实现天猫商品放大镜效果

一、准备工作

  1. 引入jQuery库和相关CSS样式文件

在head标签中引入jQuery库jquery.min.js和放大镜样式文件zoom.css

<head>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <link rel="stylesheet" href="./zoom.css">
</head>
  1. 编写HTML结构

放大镜效果需要一个大图区域、一个小图区域和一个放大后的图区域,并将它们放置在一个容器中,容器的属性值设置为悬停(hover)时显示。在HTML代码中添加以下结构:

<div class="container">
  <div class="big-img">
    <img src="./img/1.jpg" alt="">
    <div class="mask"></div>
  </div>
  <div class="small-img">
    <img src="./img/1.jpg" alt="">
    <div class="small-mask"></div>
  </div>
  <div class="detail-img">
    <img src="./img/1.jpg" alt="">
  </div>
</div>

大图区域包含一张图片和一个遮罩层,小图区域和大图区域结构相同,只是图片大小不同。最后是用于显示放大后图像的详情区域。

二、编写JS代码

  1. 获取元素并获取相关参数

为了实现放大镜效果,我们需要获取元素,并获取相关参数。在JS代码中添加如下代码:

var $bigImg = $('.big-img');
var $smallImg = $('.small-img');
var $detailImg = $('.detail-img');

var bigImgWidth = $bigImg.width();
var bigImgHeight = $bigImg.height();
var smallImgWidth = $smallImg.width();
var smallImgHeight = $smallImg.height();
var detailImgWidth = $detailImg.width();
var detailImgHeight = $detailImg.height();
  1. 监听鼠标移动事件

当鼠标在小图区域内移动时,遮罩层和大图区域需要跟随鼠标移动。在JS代码中添加如下鼠标事件代码:

$smallImg.on('mousemove', function(ev) {
  var ev = ev || window.event;
  var x = ev.clientX - $smallImg.offset().left - $('.mask').width() / 2;
  var y = ev.clientY - $smallImg.offset().top - $('.mask').height() / 2;
  if(x < 0) {
    x = 0;
  }else if(x > smallImgWidth - $('.mask').width()) {
    x = smallImgWidth - $('.mask').width();
  }
  if(y < 0) {
    y = 0;
  }else if(y > smallImgHeight - $('.mask').height()) {
    y = smallImgHeight - $('.mask').height();
  }
  $('.mask').css({
    left: x + 'px',
    top: y + 'px'
  });
  var detailX = x * detailImgWidth / ($('.small-img').width() - $('.mask').width());
  var detailY = y * detailImgHeight / ($('.small-img').height() - $('.mask').height());
  $('.detail-img').css({
    left: -detailX + 'px',
    top: -detailY + 'px'
  });
});
  1. 悬停显示和隐藏

当鼠标移动到小图区域内时,放大镜效果显示,离开时隐藏。在JS代码中添加如下代码:

$smallImg.hover(function() {
  $('.mask').show();
  $('.detail-img').show();
}, function() {
  $('.mask').hide();
  $('.detail-img').hide();
});

三、完整示例

以下为完整示例代码:

HTML代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>jQuery实现天猫商品放大镜效果</title>

  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <link rel="stylesheet" href="./zoom.css">
  <style>
    .container {
      width: 600px;
      height: 400px;
      position: relative;
    }

    .big-img, .small-img {
      position: absolute;
      top: 0;
      left: 0;
    }

    .small-img {
      z-index: 2;
      overflow: hidden;
      width: 200px;
      height: 200px;
    }

    .big-img img, .small-img img {
      position: absolute;
    }

    .big-img {
      top: 0;
      left: 0;
      z-index: 1;
      overflow: hidden;
      width: 600px;
      height: 400px;
    }

    .detail-img {
      position: absolute;
      top: 0;
      left: 100%;
      overflow: hidden;
      width: 480px;
      height: 320px;
      z-index: 3;
      display: none;
    }

    .mask, .small-mask {
      position: absolute;
      width: 100px;
      height: 100px;
      background: #000;
      opacity: 0.4;
      cursor: move;
      z-index: 2;
      display: none;
    }

    .small-mask {
      top: 30px;
      left: 30px;
    }
  </style>
</head>
<body>

  <div class="container">
    <div class="big-img">
      <img src="./img/1.jpg" alt="">
      <div class="mask"></div>
    </div>
    <div class="small-img">
      <img src="./img/1.jpg" alt="">
      <div class="small-mask"></div>
    </div>
    <div class="detail-img">
      <img src="./img/1.jpg" alt="">
    </div>
  </div>

  <script src="./zoom.js"></script>
</body>
</html>

JS代码:

var $bigImg = $('.big-img');
var $smallImg = $('.small-img');
var $detailImg = $('.detail-img');

var bigImgWidth = $bigImg.width();
var bigImgHeight = $bigImg.height();
var smallImgWidth = $smallImg.width();
var smallImgHeight = $smallImg.height();
var detailImgWidth = $detailImg.width();
var detailImgHeight = $detailImg.height();

$smallImg.hover(function() {
  $('.mask').show();
  $('.small-mask').show();
  $('.detail-img').show();
}, function() {
  $('.mask').hide();
  $('.small-mask').hide();
  $('.detail-img').hide();
});

$smallImg.on('mousemove', function(ev) {
  var ev = ev || window.event;
  var x = ev.clientX - $smallImg.offset().left - $('.mask').width() / 2;
  var y = ev.clientY - $smallImg.offset().top - $('.mask').height() / 2;
  if(x < 0) {
    x = 0;
  }else if(x > smallImgWidth - $('.mask').width()) {
    x = smallImgWidth - $('.mask').width();
  }
  if(y < 0) {
    y = 0;
  }else if(y > smallImgHeight - $('.mask').height()) {
    y = smallImgHeight - $('.mask').height();
  }
  $('.mask').css({
    left: x + 'px',
    top: y + 'px'
  });
  $('.small-mask').css({
    left: x + 'px',
    top: y + 'px'
  });
  var detailX = x * detailImgWidth / ($('.small-img').width() - $('.mask').width());
  var detailY = y * detailImgHeight / ($('.small-img').height() - $('.mask').height());
  $('.detail-img').css({
    left: -detailX + 'px',
    top: -detailY + 'px'
  });
});

其中的zoom.css样式文件如下:

.container {
  margin: 100px auto;
}

另外提供一条以jQuery库为基础的函数实现方法的示例:

$.fn.zoom = function() {
  var $this = $(this);
  var $smallImg = $this.find('.small-img');
  var $bigImg = $this.find('.big-img');
  var $mask = $this.find('.mask');
  var $detailImg = $this.find('.detail-img');

  var bigImgWidth = $bigImg.width();
  var bigImgHeight = $bigImg.height();
  var smallImgWidth = $smallImg.width();
  var smallImgHeight = $smallImg.height();
  var detailImgWidth = $detailImg.width();
  var detailImgHeight = $detailImg.height();

  $smallImg.hover(function() {
    $mask.show();
    $detailImg.show();
  }, function() {
    $mask.hide();
    $detailImg.hide();
  });

  $smallImg.on('mousemove', function(ev) {
    var ev = ev || window.event;
    var x = ev.clientX - $smallImg.offset().left - $mask.width() / 2;
    var y = ev.clientY - $smallImg.offset().top - $mask.height() / 2;
    if(x < 0) {
      x = 0;
    }else if(x > smallImgWidth - $mask.width()) {
      x = smallImgWidth - $mask.width();
    }
    if(y < 0) {
      y = 0;
    }else if(y > smallImgHeight - $mask.height()) {
      y = smallImgHeight - $mask.height();
    }
    $mask.css({
      left: x + 'px',
      top: y + 'px'
    });
    var detailX = x * detailImgWidth / (smallImgWidth - $mask.width());
    var detailY = y * detailImgHeight / (smallImgHeight - $mask.height());
    $detailImg.css({
      left: -detailX + 'px',
      top: -detailY + 'px'
    });
  });

  return this;
}

使用方法:

$('.container').zoom();

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

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

相关文章

  • HTML技巧汇编

    HTML 技巧汇编攻略 什么是 HTML 技巧汇编? HTML 技巧汇编是一种用于实现网页特效的一系列技巧的集合,它通常包括各种 HTML 标签和 CSS 样式的组合使用,以及一些 JavaScript 等脚本的编写。通过这些技巧的使用,可以实现一些在 HTML 中比较难以实现的效果,比如动画效果、音视频播放、交互式操作等。 HTML 技巧汇编的基本原理 H…

    css 2023年6月9日
    00
  • 纯javascript移动优先的幻灯片效果

    下面是纯 JavaScript 移动优先的幻灯片效果的详细攻略。 第一步:HTML 结构 首先需要编写幻灯片的 HTML 结构。需要一个外层容器,内部包含多个幻灯片项: <div class="slider"> <div class="slider-item"> <img src=&quo…

    css 2023年6月10日
    00
  • Dreamweaver怎么在网页中显示一个圆角矩形?

    要在网页中显示一个圆角矩形,可以使用CSS中的border-radius属性来实现。下面是实现该效果的详细步骤: 步骤一:新建一个HTML文件 在Dreamweaver中新建一个HTML文件,命名为“index.html”。在文件中输入以下代码: <!DOCTYPE html> <html> <head> <titl…

    css 2023年6月10日
    00
  • React diff算法原理详细分析

    那么我将为您详细讲解”React diff算法原理详细分析”。 什么是React Diff算法? React中的Diff算法是一个优化策略,帮助我们减少页面重新渲染的次数。基于旧虚拟DOM,React会计算出新的虚拟DOM,通过比较两个虚拟DOM的不同,React会计算出最小化的操作,将更新反映到页面上。React为了提高性能,采用了一种叫做分层的优化策略。…

    css 2023年6月10日
    00
  • 如何用react优雅的书写CSS

    如何用React优雅地书写CSS React是一种流行的JavaScript库,用于构建用户界面。在React中,可以使用CSS来定义组件的样式。本攻略将详细讲解如何用React优雅地书写CSS,包括基本原理、制作方法和示例说明。 1. 基本原理 在React中,可以使用CSS模块、CSS-in-JS和CSS预处理器等技术来定义组件的样式。其中,CSS模块是…

    css 2023年5月18日
    00
  • jQuery中animate的几种用法与注意事项

    当使用jQuery来实现动画效果时,最常用的方法之一就是animate()函数。下面是jQuery中animate的几种用法与注意事项,希望能够帮助大家更好地使用animate()函数。 基础用法 animate()函数是jQuery中用来执行动画效果的函数,其基本用法如下: $(selector).animate(styles, duration, eas…

    css 2023年6月10日
    00
  • 分享一则JavaScript滚动条插件源码

    我为您详细讲解如何分享一则JavaScript滚动条插件源码的完整攻略。 步骤一:编写JavaScript滚动条插件源码 为了分享这个JavaScript滚动条插件源码,首先我们需要编写这个插件源码。下面是一个简单的示例: // Scrollbar Plugin (function($) { $.fn.scrollbar = function() { // …

    css 2023年6月11日
    00
  • html在线编辑器的更新[2006-05]

    HTML在线编辑器的更新[2006-05] 本次更新主要针对HTML在线编辑器进行改进,旨在让用户在编写HTML页面时更加方便和快捷。以下是本次更新的具体内容: 插入代码功能增强 在编辑HTML页面时,用户可以使用“插入代码”功能快速生成代码块,但该功能以前只支持部分基础HTML标签。为了让用户更灵活地使用该功能,我们对该功能进行了增强。现在,用户可以在“插…

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