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日

相关文章

  • CSS中使用clearfix清除浮动的方法

    在CSS中,float属性可以使元素脱离文档流并浮动在页面中。当浮动元素比包含其的容器短时,容器的高度会发生塌陷。而clearfix是一种常用的清除浮动方法,可以避免这种情况的发生。 什么是clearfix clearfix是一种清除浮动的方法,其实现方式是在浮动元素的上方和下方插入空元素,并对空元素设置特定的CSS样式。 示例代码 .clearfix:af…

    css 2023年6月10日
    00
  • CSS网页布局教程:绝对定位和相对定位

    CSS网页布局教程:绝对定位和相对定位攻略 CSS绝对定位和相对定位是CSS布局中的一种重要方法。它可以让我们更灵活地将内容定位到页面上的任何位置,并且让页面响应式布局更加容易实现。 概述 绝对定位和相对定位是将HTML元素放置在网页上的方法,通过指定元素的位置来控制它的位置。 相对定位(relative)会按照元素本身在文档流中的位置移动,而绝对定位(ab…

    css 2023年6月9日
    00
  • AngularJS中实现动画效果的方法

    AngularJS中实现动画效果的方法有多种,以下是一些常用的方式: 方式一:使用ngAnimate模块 使用ngAnimate模块是AngularJS中实现动画效果的最常用方式。ngAnimate模块通过添加一些CSS样式和类来实现动画效果,可以用于实现一些简单的过渡效果,例如滑动、淡入淡出等。 步骤 引入ngAnimate模块 “` “` 注册ngA…

    css 2023年6月11日
    00
  • 使用HTML+CSS实现鼠标划过的二级菜单栏的示例

    下面是详细讲解”使用HTML+CSS实现鼠标划过的二级菜单栏的示例”的完整攻略: 构建HTML结构 我们可以使用ul和li标签来构建有序列表(ol标签同理),然后使用a标签来创建菜单中的链接。我们需要考虑一下HTML结构,它将被用作CSS样式的基础。 下面是HTML结构示例: <nav> <ul> <li><a hr…

    css 2023年6月10日
    00
  • Web标准中的特殊字符

    Web标准中的特殊字符指的是在HTML代码中使用的一些特殊字符,它们无法直接写入HTML文本中,需要使用HTML实体来代替。 HTML实体以”&”符号开头,以”;”符号结束,它可以让浏览器正确渲染出各种特殊字符。以下是几种常用的HTML实体: “<” 和 “>”:分别表示小于符号”<“和大于符号”>”,它们主要用于HTML代码…

    css 2023年6月10日
    00
  • 详解css加载会造成阻塞吗

    当浏览器加载网页时,它需要依次处理页面上的HTML、CSS和JavaScript文件,如果这些文件中的某个文件加载时阻塞,那么浏览器将无法继续加载其他资源,从而导致页面卡顿或加载时间延长。因此,我们需要了解每个文件是如何影响页面加载时间的。 CSS加载会造成阻塞吗? 在加载网页时,浏览器会将HTML文档与对应的CSS样式表结合起来,生成外观和布局,这就是渲染…

    css 2023年6月10日
    00
  • 调整CSS类型的顺序改变链接翻滚效果

    要调整CSS类型的顺序以改变链接翻转效果,需要先理解翻转效果是如何实现的。一般情况下,可以使用CSS3的transform属性实现翻转,具体实现方法如下: 1.将需要翻转的元素设置为position:relative 2.设置翻转元素的transform-origin属性,表示翻转的中心点,一般默认为中心点。 3.使用CSS3的transform属性,配合t…

    css 2023年6月9日
    00
  • 浅谈Flex布局与缩放比例计算

    浅谈Flex布局与缩放比例计算 Flex布局是CSS3中新增的一种布局模式,旨在解决传统布局模式的一些问题。在这种布局模式下,容器可以将其子元素按照特定的比例进行排列和分配空间,从而实现自适应布局的效果。同时,通过计算缩放比例可以让Flex布局更加灵活。 一、Flex布局 1.1 容器和子元素 在Flex布局中,需要设置一个容器来包裹子元素,然后为容器设置f…

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