JavaScript实现图片放大镜效果

下面我将为您详细讲解如何用JavaScript实现图片放大镜效果。

1. 需求分析

首先,我们需要分析一下需要实现的效果和要实现的功能。放大镜效果通常是这样的:当鼠标悬浮在图片上时,图片中心出现一个放大的镜头,显示鼠标所在位置周围的图像细节。因此,我们需要实现以下功能:

  1. 鼠标在图片上移动时,更新放大镜镜头的位置和内容;
  2. 根据鼠标位置,在放大镜镜头周围显示放大的图片区域。

2. HTML布局

我们需要在HTML中定义图片元素和放大镜镜头元素。示例代码如下:

<div class="container">
  <div class="img-container">
    <img src="image.jpg" alt="">
    <div class="zoom"></div>
  </div>
  <div class="zoomed">
    <img src="image.jpg" alt="">
  </div>
</div>

其中,img-container是包含图片和放大镜的容器,zoom是放大镜镜头元素,zoomed是显示放大图片的容器。

3. CSS样式

我们需要用CSS对上述HTML元素进行样式设置。示例代码如下:

.container {
  position: relative;
  width: 500px;
  height: 400px;
}
.img-container {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.zoom {
  position: absolute;
  width: 100px;
  height: 100px;
  border-radius: 50%;
  border: 2px solid #fff;
  opacity: 0;
  pointer-events: none;
}
.zoomed {
  position: absolute;
  width: 300px;
  height: 300px;
  overflow: hidden;
  top: 0;
  left: 520px;
  border: 2px solid #fff;
  border-radius: 5px;
  box-shadow: 0 0 5px 2px rgba(0,0,0,0.2);
}
.zoomed img {
  position: absolute;
  top: 0;
  left: 0;
}

其中,给图片容器设置overflow: hidden可以保证放大镜镜头显示在容器内,并隐藏周围的放大后图片区域;放大镜镜头设置opacity: 0可以使其一开始不可见;放大后图片容器通过position: absoluteleft属性进行定位。

4. JavaScript实现

接下来,我们需要用JavaScript对HTML元素进行操作,实现放大镜效果。示例代码如下:

var container = document.querySelector('.container');
var imgContainer = document.querySelector('.img-container');
var zoom = document.querySelector('.zoom');
var zoomed = document.querySelector('.zoomed');
var zoomedImg = document.querySelector('.zoomed img');
var imgWidth = imgContainer.offsetWidth;
var imgHeight = imgContainer.offsetHeight;
var zoomWidth = zoom.offsetWidth;
var zoomHeight = zoom.offsetHeight;
var zoomedWidth = zoomed.offsetWidth;
var zoomedHeight = zoomed.offsetHeight;

imgContainer.addEventListener('mousemove', function(e) {
  // 计算放大镜镜头位置
  var posX = e.pageX - container.offsetLeft;
  var posY = e.pageY - container.offsetTop;
  var xPercent = posX / imgWidth;
  var yPercent = posY / imgHeight;
  var zoomX = posX - zoomWidth / 2;
  var zoomY = posY - zoomHeight / 2;

  // 更新放大镜镜头位置和内容
  zoom.style.left = zoomX + 'px';
  zoom.style.top = zoomY + 'px';
  zoom.style.opacity = 1;
  zoomedImg.style.left = -xPercent * (zoomedWidth - zoomWidth) + 'px';
  zoomedImg.style.top = -yPercent * (zoomedHeight - zoomHeight) + 'px';
});

imgContainer.addEventListener('mouseleave', function(e) {
  // 鼠标离开图片容器时隐藏放大镜
  zoom.style.opacity = 0;
});

这段JavaScript代码实现了以下功能:

  1. 监听图片容器的mousemove事件,实时计算放大镜镜头位置,更新放大镜镜头和放大后的图片区域;
  2. 监听图片容器的mouseleave事件,隐藏放大镜。

5. 示例说明

下面,我们通过两个示例对这个图片放大镜效果进行演示。

示例一:木板样式

HTML代码:

<div class="container">
  <div class="img-container">
    <img src="https://i.ibb.co/Rp8LxnT/wood.jpg" alt="">
    <div class="zoom"></div>
  </div>
  <div class="zoomed">
    <img src="https://i.ibb.co/Rp8LxnT/wood.jpg" alt="">
  </div>
</div>

CSS代码:

.container {
  position: relative;
  width: 500px;
  height: 400px;
}
.img-container {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.zoom {
  position: absolute;
  width: 100px;
  height: 100px;
  border-radius: 50%;
  border: 2px solid #f5c299;
  opacity: 0;
  pointer-events: none;
}
.zoomed {
  position: absolute;
  width: 300px;
  height: 300px;
  overflow: hidden;
  top: 0;
  left: 520px;
  border: 2px solid #f5c299;
  border-radius: 5px;
  box-shadow: 0 0 5px 2px rgba(0,0,0,0.2);
}
.zoomed img {
  position: absolute;
  top: 0;
  left: 0;
}

效果演示:https://codepen.io/lovelykevin/pen/xxWZVXK

示例二:各类糖果

HTML代码:

<div class="container">
  <div class="img-container">
    <img src="https://i.ibb.co/RQ8G5Vt/candies.jpg" alt="">
    <div class="zoom"></div>
  </div>
  <div class="zoomed">
    <img src="https://i.ibb.co/RQ8G5Vt/candies.jpg" alt="">
  </div>
</div>

CSS代码:

.container {
  position: relative;
  width: 500px;
  height: 400px;
}
.img-container {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}
.zoom {
  position: absolute;
  width: 100px;
  height: 100px;
  border-radius: 50%;
  border: 2px solid #e6478b;
  opacity: 0;
  pointer-events: none;
}
.zoomed {
  position: absolute;
  width: 300px;
  height: 300px;
  overflow: hidden;
  top: 0;
  left: 520px;
  border: 2px solid #e6478b;
  border-radius: 5px;
  box-shadow: 0 0 5px 2px rgba(0,0,0,0.2);
}
.zoomed img {
  position: absolute;
  top: 0;
  left: 0;
}

效果演示:https://codepen.io/lovelykevin/pen/bGRaxeP

6. 结束语

通过以上的实现,我们成功地用JavaScript实现了图片放大镜效果,并在线上两个示例中展示了效果。随着一步步地理解,你也可以更好地掌握这个效果,根据自己的需求进行代码的调整和扩展。

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

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

相关文章

  • jquery 中多条件选择器,相对选择器,层次选择器的区别

    下面我来详细讲解 “jQuery 中多条件选择器、相对选择器、层次选择器的区别”。 1. 多条件选择器 多条件选择器可以根据多个条件来选择目标元素,使用逗号(,)分隔不同的条件。多条件选择器中,每个条件都可以使用任意一种选择器。 示例: <!– HTML 结构 –> <div> <p class="sample&q…

    css 2023年6月9日
    00
  • Bootstrap企业网站实战项目4

    Bootstrap企业网站实战项目4是一项基于Bootstrap框架的网站建设项目,适合于企业网站的建设或者其他类似场景的实际应用。其完整攻略包含以下几个步骤: 步骤1:准备 下载并安装Bootstrap框架; 创建一个新项目,并在项目中引入Bootstrap的资源文件,包括样式表、JavaScript文件和字体图标等; 在项目中创建所需的HTML和CSS文…

    css 2023年6月10日
    00
  • js页面滚动时层智能浮动定位实现(jQuery/MooTools)

    实现 js 页面滚动时层智能浮动定位,可以使用 jQuery 或 MooTools 这样的 JavaScript 库。下面是实现步骤的详细攻略: 步骤一:在 HTML 页面中添加需要浮动定位的层 首先,在你的 HTML 页面中添加需要浮动定位的层。例如,你的页面中有一个 <div> 容器,里面包含一个 <p> 标签和一张图片: &lt…

    css 2023年6月10日
    00
  • JS实现鼠标滑过链接改变网页背景颜色的方法

    要实现鼠标滑过链接改变网页背景颜色,可以通过JavaScript来实现。 首先,在HTML文件中添加一个链接,并给它一个id,例如: <a href="#" id="myLink">点击我</a> 在JavaScript文件中,获取这个链接的元素,并为它添加鼠标滑过事件监听器,例如: const…

    css 2023年6月9日
    00
  • 基于jQuery实现以手风琴方式展开和折叠导航菜单

    实现手风琴方式展开和折叠导航菜单的基本思路是利用jQuery控制CSS属性,以此来控制导航菜单的展开与折叠。具体方法如下: 1. 确定HTML结构 首先需要在HTML中编写出具有手风琴效果的导航菜单的基本结构,一般情况下,导航菜单的HTML结构如下: <ul class="accordion-menu"> <li cla…

    css 2023年6月9日
    00
  • JS+CSS实现的拖动分页效果实例

    下面我将为您详细介绍JS+CSS实现的拖动分页效果的完整攻略。 1. 拖动分页效果的原理及实现思路 拖动分页效果是指,当鼠标拖动页面时,页面会随着鼠标的移动而移动,形成一个拖动的视觉效果。实现这样的效果,需要用到JS和CSS。 具体实现的思路如下: 首先,在CSS中确定页面的基本样式,包括页面的大小、颜色、边框等; 然后,在JS中监听鼠标的移动事件,并获取鼠…

    css 2023年6月10日
    00
  • jQuery给元素添加样式的方法详解

    下面我将为你详细讲解 “jQuery给元素添加样式的方法详解”,包含以下内容: 一、几种jQuery给元素添加样式的方法详解 1. 使用css方法 通过css()方法可以给元素设置CSS样式,示例代码如下: $("#test").css("color", "red"); 上述代码的含义是设置id为”…

    css 2023年6月10日
    00
  • 轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码

    轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码 slideBox是一个基于jQuery的轻量级焦点图插件,可以实现带底栏轮播的效果,非常适合用于网站首页的广告位展示。 以下是slideBox的使用攻略: 1. 引入jQuery库和slideBox插件库 在head标签中引入jQuery库和slideBox插件库的js和css文件: &lt…

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