CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大

下面是CSS实现圆形放大镜狙击镜效果的攻略:

1. 使用CSS实现圆形放大镜狙击镜效果的基本步骤

1.1 HTML部分

首先,需要在HTML中创建图像容器以及用于显示放大结果的空间容器,例如:

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

在图片容器中,我们使用一个<img>标签来加载要放大的图片,同时,使用一个<div>标签来作为放大结果的容器。id="zoom-img"是我们指向图片元素的依据,class="image-container"class="zoom-container"是我们使用CSS样式对元素进行样式设置的依据。

1.2 CSS部分

接下来,使用CSS对HTML中的元素进行样式设置。具体步骤如下:

  • .image-container设置position: relative;,以便后续使用绝对定位(absolute)设置放大镜和放大框的位置,同时,设置宽度和高度,以适应图片尺寸。例如:.image-container { position: relative; width: 500px; height: 500px; }
  • .zoom-container设置position: absolute;,以便将其置于图像容器的上层,并设置宽度和高度,作为放大效果的容器。例如:.zoom-container { position: absolute; width: 200px; height: 200px; }
  • 通过设置圆角半径border-radius属性为50%来将zoom-container变成圆形。例如:.zoom-container { border-radius: 50%; }
  • 将放大框(即圆形)隐藏起来并设置其border和box-shadow属性以生成放大镜的效果。例如:.zoom-container { display: none; border: 5px solid #ccc; box-shadow: 0 0 5px rgba(0,0,0,0.5); }
  • 为放大镜绑定相应的事件。对鼠标移动的响应事件,放大镜会根据鼠标坐标变化而移动;对鼠标按下和松开的相应事件,放大框会出现和消失。例如:
.image-container:hover .zoom-container { display: block; }
.image-container:hover img { opacity: 0.3; }
.zoom-container { pointer-events: none; }
.image-container:hover .zoom-container { pointer-events: auto; }
.image-container:hover .zoom-container {
  top: -100px;
  left: -100px;
  background-position: -100px -100px;
}

以上就是CSS实现圆形放大镜狙击镜效果的基本步骤和样式设置方法。

2. 示范代码和说明

2.1 示例1

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>圆形放大镜狙击镜效果示例1</title>
    <style type="text/css">
        .image-container {
            position: relative;
            width: 500px;
            height: 500px;
        }
        .image-container:hover .zoom-container {
            display: block;
        }
        .image-container:hover img {
            opacity: 0.3;
        }
        .zoom-container {
            position: absolute;
            border: 5px solid #ccc;
            box-shadow: 0 0 5px rgba(0,0,0,0.5);
            width: 200px;
            height: 200px;
            border-radius: 50%;
            display: none;
            pointer-events: none;
            background-image: url(example.jpg);
            background-repeat: no-repeat;
        }
        .image-container:hover .zoom-container {
            pointer-events: auto;
        }
    </style>
</head>
<body>
    <div class="image-container">
        <img src="example.jpg" alt="example" id="zoom-img">
        <div class="zoom-container"></div>
    </div>
</body>
</html>

以上代码实现了一个基本的圆形放大镜狙击镜效果示例。鼠标经过图片时,会出现圆形放大镜,放大结果为原图的一小部分。

2.2 示例2

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>圆形放大镜狙击镜效果示例2</title>
    <style type="text/css">
        .image-container {
            position: relative;
            width: 500px;
            height: 500px;
        }
        .image-container:hover .zoom-container {
            display: block;
        }
        .image-container:hover img {
            opacity: 0.5;
        }
        .zoom-container {
            position: absolute;
            border: 5px solid #427AA1;
            width: 150px;
            height: 150px;
            border-radius: 50%;
            display: none;
            pointer-events: none;
            background-repeat: no-repeat;
            background-position: center center;
            background-size: 600px 600px;
            box-shadow: 0px 0px 5px 1px rgba(66,122,161,.5);
            transform-origin: 50% 50%;
        }
        .image-container:hover .zoom-container {
            pointer-events: auto;
        }
    </style>
</head>
<body>
    <div class="image-container">
        <img src="example.jpg" alt="icon" id="zoom-img">
        <div class="zoom-container"></div>
    </div>
    <script>
        const $zoomContainer = document.querySelector('.zoom-container');
        $zoomContainer.style.backgroundImage = `url(example.jpg)`;
        const img = new Image();
        img.onload = () => {
            $zoomContainer.style.backgroundSize = `${img.width * 2}px ${img.height * 2}px`;
        }
        img.src = 'example.jpg';
        document.querySelector('.image-container').addEventListener('mousemove', (e) => {
            const zoomContainerSize = parseInt(getComputedStyle($zoomContainer).width, 10);
            const imageSize = parseInt(getComputedStyle(document.querySelector('#zoom-img')).width, 10);
            const halfContainerSize = zoomContainerSize / 2;
            const halfImageSize = imageSize / 2;
            const zoomX = (e.clientX - e.target.getBoundingClientRect().left) / imageSize * 100;
            const zoomY = (e.clientY - e.target.getBoundingClientRect().top) / imageSize * 100;
            $zoomContainer.style.left = `${e.clientX - halfContainerSize}px`;
            $zoomContainer.style.top = `${e.clientY - halfContainerSize}px`;
            $zoomContainer.style.backgroundPosition = `${zoomX}% ${zoomY}%`;
            $zoomContainer.style.transform = `scale(2)`;
        });
        document.querySelector('.image-container').addEventListener('mouseleave', (e) => {
            const $zoomContainer = document.querySelector('.zoom-container');
            $zoomContainer.style.transform = `scale(1)`;
            $zoomContainer.style.display = `none`;
            const $img = document.querySelector('#zoom-img');
            $img.style.opacity = 1;
        })
    </script>
</body>
</html>

以上代码实现了更加复杂和高级的圆形放大镜狙击镜效果,具体特点有:

  • 放大器半径变小
  • 放大器和放大结果滤镜的字体色值变成蓝色,样式更加美观
  • 将放大框的大小固定为150x150
  • 通过background-image属性设置放大镜放大的是原图指定的一小部分,并通过background-size将其放大至原图的两倍
  • 放大结果可以随鼠标位置而相应变化
  • 鼠标离开图片范围时,放大器消失

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大 - Python技术站

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

相关文章

  • Vue Transition实现类原生组件跳转过渡动画的示例

    下面就是 “Vue Transition实现类原生组件跳转过渡动画的示例” 的完整攻略。 首先,我们需要理解 Vue 中过渡的概念。Vue 提供两个指令,分别为 v-enter 和 v-leave,用于控制 enter/leave 过渡动画。当元素插入或删除时,你可以定义相应动画完成过程。 下面是一个基本的 Vue 过渡使用示例: <template&…

    css 2023年6月11日
    00
  • JavaScript实现表格表单的随机选择和简单的随机点名

    接下来我将为大家详细讲解“JavaScript实现表格表单的随机选择和简单的随机点名”的攻略。 一、JavaScript实现表格表单的随机选择 首先,在HTML文件中创建表格及表格中的选项,并为选项设置相同的class。 “`html 选项一 选项二 选项三 选项四 “` 在JavaScript中获取所有选项并存储。 javascript let opt…

    css 2023年6月10日
    00
  • 利用CSS定位背景图片 background-position

    下面是关于利用CSS定位背景图片background-position的完整攻略: 1. 概述 在网页制作中,背景图片的使用非常常见,使用背景图片可以丰富页面的视觉效果,而CSS的background-position属性则可以决定背景图片在元素中的位置。 2. 背景图片定位原理 CSS的background-position属性可以接受水平和垂直两个值,用…

    css 2023年6月9日
    00
  • box-shadow和drop-shadow实现不规则投影实例代码

    首先我们来了解一下box-shadow和drop-shadow两种方式实现阴影的不同之处: box-shadow属性是在目标元素的边框外侧形成一个矩形的投影效果。 drop-shadow属性是在目标元素和背景之间产生一个投影效果,投影效果是会根据目标元素的不规则形状进行调整的。 接下来我们分别来看一下如何使用box-shadow和drop-shadow实现不…

    css 2023年6月9日
    00
  • jQuery中的CSS-DOM操作

    jQuery是一款广受欢迎的JavaScript库,封装了许多常见的DOM操作,并且能够跨浏览器保持一致的API响应速度。其中,jQuery中的CSS-DOM操作可以帮助我们轻松地选择、修改和添加CSS样式。 一、选择元素 在jQuery中,选择元素的方法与CSS选择器的方法类似。可以使用$(selector)来选择元素,selector可以是标签名称、类名…

    css 2023年6月9日
    00
  • CSS实现页面两列布局与三列布局的方法示例

    没问题,下面就为你详细讲解“CSS实现页面两列布局与三列布局的方法示例”的完整攻略。 页面两列布局 float布局 float布局是实现页面两列布局的比较常见的方法。代码示例如下: <div class="container"> <div class="left">左侧内容</div&gt…

    css 2023年6月10日
    00
  • 通过CSS禁用页面内容选中和复制操作

    为了禁用页面内容选中和复制操作,我们可以采取以下两种方法: 1. 通过CSS的user-select属性来禁用选中操作 CSS的user-select属性可以控制用户是否可以选中页面中的文本,通过将其属性值设置为none可以禁用选中操作,代码如下: * { -webkit-user-select: none; /*webkit浏览器*/ -moz-user-…

    css 2023年6月10日
    00
  • vue实现动态列表尾部添加数据执行动画

    让我来详细讲解一下“vue实现动态列表尾部添加数据执行动画”的完整攻略。 1. 实现思路 动态列表尾部添加数据执行动画的实现思路大致如下: 首先,需要在data中定义一个数组,用于存储列表数据。接下来,在页面上使用v-for指令,循环渲染数组中的数据,展示列表内容。 接着,我们可以使用vue的过渡动画功能,对新添加的数据进行动画处理。当有新数据添加时,可以通…

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