前端小技巧:学会通过CSS Hover和JS实现图片放大镜效果

这篇具有很好参考价值的文章主要介绍了前端小技巧:学会通过CSS Hover和JS实现图片放大镜效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据来源:ChatGPT

今天,我们来看一个鼠标悬停出现图片放大镜效果,这是一个比较实用且炫酷的纯CSS和JS实现的页面效果。

HTML

HTML代码非常简单,我们只需要一个div容器,内部嵌入一张图片,再添加一个用来显示放大镜的div元素。

<div class="container">
  <img src="https://picsum.photos/id/237/200/300" alt="">
  <div class="magnifier hide"></div>
</div>

CSS

CSS代码是实现放大镜效果的重要部分,我们需要设置容器、图片、放大镜的样式。同时,使用CSS的:hover伪类,控制鼠标悬停时的样式变化。

.container {
  position: relative;
  width: 200px;
  height: 300px;
}

.container img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.magnifier {
  position: absolute;
  width: 120px;
  height: 120px;
  border: 3px solid #fff;
  border-radius: 60px;
  background-repeat: no-repeat;
  background-size: 400% 400%;
  z-index: 10;
}

.container:hover img {
  transform: scale(1.2);
}

.container:hover .magnifier {
  background-image: url(https://picsum.photos/id/237/800/1200);
  background-position: center;
  background-size: cover;
  top: -30px;
  left: calc(50% - 60px);
  transition: all 0.3s ease;
}

.hide {
  display: none;
}

JS

最后,在JS代码中,我们监听container容器的mousemove和mouseleave事件,根据鼠标在容器上的位置,实现放大镜的效果。

const container = document.querySelector('.container');
const magnifier = document.querySelector('.magnifier');

container.addEventListener('mousemove', e => {
  magnifier.classList.remove('hide');
  const { left: containerX, top: containerY } = container.getBoundingClientRect();
  const x = e.pageX - containerX;
  const y = e.pageY - containerY;
  magnifier.style.backgroundPosition = `-${x * 2}px -${y * 2}px`;
  magnifier.style.left = `${x - 60}px`;
  magnifier.style.top = `${y - 60}px`;
});

container.addEventListener('mouseleave', () => {
  magnifier.classList.add('hide');
});

当鼠标在容器上移动时,计算鼠标在容器上的位置(x,y),并将放大镜样式修改为对应位置上的图片所显示的区域。为了更好地实现放大镜的效果,我们需要用CSS实现放大镜区域。

最后,为了更好地表现界面效果,我们添加了过渡效果,使界面呈现更加平滑。

这样就完成了这个实用的页面效果。通过纯CSS和JS的实现,我们可以实现更加灵活的交互效果,同时还可以方便地应用于网页中,增加了用户体验感。

总的来说,通过这个案例,我们不仅了解了如何使用纯CSS和JS实现鼠标悬停出现图片放大镜效果,还理解了如何通过CSS的:hover伪类,控制样式变化,如何使用JS监听鼠标移动事件,在容器中实现放大镜效果,并且过渡效果可以使我们的页面效果展示的更加平滑。

如果我们需要在设计中展示具有实用价值和炫酷效果的UI交互,这个鼠标悬停出现图片放大镜效果是一个非常不错的选择,同时也更加符合人们对于高质量用户体验的追求。

完整代码

<!DOCTYPE html>
<html lang="zh-cn">

<head>
  <meta charset="UTF-8" />
  <title>3D立方体切换动画</title>
  <style>
    .container {
      position: relative;
      width: 200px;
      height: 300px;
    }

    .container img {
      width: 100%;
      height: 100%;
      object-fit: cover;
    }

    /* 放大镜 */
    .magnifier {
      position: absolute;
      width: 120px;
      height: 120px;
      border: 3px solid #fff;
      border-radius: 60px;
      background-repeat: no-repeat;
      background-size: 400% 400%;
      z-index: 10;
    }

    /* 图片悬停时的样式 */
    .container:hover img {
      transform: scale(1.2);
    }

    .container:hover .magnifier {
      background-image: url(https://picsum.photos/id/237/800/1200);
      background-position: center;
      background-size: cover;
      top: -30px;
      left: calc(50% - 60px);
      transition: all 0.3s ease;
    }

    /* 隐藏放大镜 */
    .hide {
      display: none;
    }
  </style>
</head>

<body>
  <div class="container">
    <img src="https://picsum.photos/id/237/200/300" alt="">
    <div class="magnifier hide"></div>
  </div>
</body>
<script>
  const container = document.querySelector('.container');
  const magnifier = document.querySelector('.magnifier');

  container.addEventListener('mousemove', e => {
    magnifier.classList.remove('hide');
    const { left: containerX, top: containerY } = container.getBoundingClientRect();
    const x = e.pageX - containerX;
    const y = e.pageY - containerY;
    magnifier.style.backgroundPosition = `-${x * 2}px -${y * 2}px`;
    magnifier.style.left = `${x - 60}px`;
    magnifier.style.top = `${y - 60}px`;
  });

  container.addEventListener('mouseleave', () => {
    magnifier.classList.add('hide');
  });
</script>

</html>

效果图

只有一张图片前端如何实现放大镜效果,CSS3  ,css,前端,javascript

 文章来源地址https://www.toymoban.com/news/detail-786845.html

到了这里,关于前端小技巧:学会通过CSS Hover和JS实现图片放大镜效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端:运用html+css+js模仿京东上商品图片区域放大特效

    1. 前言 最近在网页端浏览京东上的商品时,觉得上面的那张gif图片上实现的特效不错,于是自己打算使用html+css+js技术来实现一下上述特效效果,我的实效果如下: 2. 前端界面 主要使用到浮动、绝对定位、相对定位等知识,不了解这部分知识点的读者可以先去了解了解,再

    2024年02月16日
    浏览(47)
  • CSS 实现鼠标hover 展示内容

    👏 CSS 实现鼠标hover 展示内容,速速来Get吧~ 🥇 文末分享源代码。记得点赞+关注+收藏! 定义一个宽高为300px的父容器 父容器中添加一张图片,与父容器大小一致 为父容器添加伪元素,宽高与父元素一致,背景色为50%的白色,基于父容器left为0,top为0,默认opacity设置为0,即

    2024年02月09日
    浏览(34)
  • 前端:纯css实现图片轮播(自动+手动)

    目录 1.图片自动轮播 2.图片手动轮播 3.补充内容 创建2个盒子,一个盒子进行轮播图展示,一个盒子用来承载图片 CSS重置reset.css normalize.css,在写页面时,由于HTML标签自带一些CSS属性,导致在调试样式的时候会出现各种奇怪的问题,为了大概率避免这些问题,在写CSS之前可以

    2024年02月04日
    浏览(46)
  • CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透

    一、什么是scoped 在vue文件中的style标签上,有一个特殊的属性:scoped。 当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,通过该属性,可以使得组件之间的样式不互相污染。 二、scoped的原理 为组件实例生成一个唯一标识,给组件中的每个标签对应的d

    2024年04月10日
    浏览(44)
  • 前端使用scale属性结合CSS动态样式实现动态的图片缩放效果

    废话不多说,直接上代码: 示例一,使用css动态样式结合scale进行src图片的缩放。 示例二,使用css动态样式结合scale进行background背景图图片的缩放。

    2024年01月15日
    浏览(50)
  • html+css+js实现微信和支付宝扫码支付前端

    本章教程,主要利用html+css+js技术实现微信和支付宝扫码支付前端页面。 目录 一、效果图预览  (1)支付宝扫码支付 (2)微信扫码支付 二、项目部分源码文件 (1)目录结构 (2)alipay.html (3)wxpay.html 三、项目完整源码下载 下载地址:html+css+js实现微信和支付宝扫码支付

    2024年02月11日
    浏览(71)
  • 记录--js小练习(弹幕、 电梯导航、 倒计时、 随机点名、 购物放大镜)

    弹幕 电梯导航 倒计时 随机点名 购物放大镜 效果预览 功能:输入弹幕内容,按下回车显示一条弹幕(弹幕颜色、字体随机生成) 思路:设置按钮抬起事件,在事件中判断如果按下的是回车键则将输入框中替换掉敏感词的数据追加到标签中,字体的颜色、大小、位置按照生成

    2024年02月04日
    浏览(53)
  • 前端三大件html,css,js原生实现学生信息管理系统(课程设计)

      目录结构如该图所示,只要将文件命名成图上三种。代码即可正常运行。分别有三个文件,一个是app.js,放学生信息删除添加查询主要逻辑代码。login.html放登录页面样式以及相关逻辑。studentList.html 放置学生管理的页面。 运行效果图:   代码:  app.js login页面 studentList.

    2024年02月04日
    浏览(54)
  • 【前端技巧】CSS常用技巧碎片(一)

    CSS常用技巧碎片(一) 尺寸体系:内在尺寸:fit-content、min-content、max-content,尺寸表现和内容有关;外在尺寸:stretch、available、fill-available,尺寸表现和上下文有关。 可以用 inset: 0; 实现 left: 0; top: 0; right: 0; bottom: 0; 的效果。 渐变边框实现圆角效果可以用 clip-path: inset(0 ro

    2024年02月13日
    浏览(43)
  • 【前端技巧】CSS常用技巧碎片(二)

    CSS常用知识碎片(二) 常规渐变和CSS渐变角度方位关系对比表 角度 常规渐变 CSS渐变 0度 向右 向上 正角度 逆时针 顺时针 关于渐变断点,如 linear-gradient(30deg, red 50%, skyblue 50%); ,不同颜色位于同一断点位置时,两个颜色连接处可能会有明显的锯齿。可以在颜色连接处留1px的

    2024年02月12日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包