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

yizhihongxing

下面是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日

相关文章

  • 详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题

    针对这个话题,我们来一步步进行详细讲解。 问题描述 我们知道,在网页设计开发过程中会大量涉及到页面滚动的需求。而在这个过程中,我们需要用到“scrollTop”这个属性,来获取页面滚动值。但是在实际开发过程中,我们会发现这个属性在不同的浏览器中表现不同,尤其是FireFox与Chrome浏览器之间的兼容问题。 问题解决 针对这个问题,我们可以采取以下几个步骤…

    css 2023年6月9日
    00
  • Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例

    下面是“Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例”攻略的详细讲解。 准备工作 在进行本次实例之前,需要先从以下网址中下载jQuery插件: https://code.jquery.com/jquery-3.6.0.min.js 下载完成后,将该文件放置在项目的js文件夹中。 HTML结构 这个实例中使用了一个div元素来作为中国地图的容…

    css 2023年6月11日
    00
  • jQuery自定义滚动条完整实例

    jQuery自定义滚动条完整实例攻略说明: 在完成这个任务之前,需要先了解一些基础的知识:CSS, JavaScript, jQuery以及自定义滚动条的实现原理。 实现自定义滚动条的原理: 在网页内容高度超过父容器高度时,浏览器会自动添加滚动条以便进行浏览。自定义滚动条的实现原理是,通过隐藏浏览器默认的滚动条,利用CSS和JavaScript创建出我们自己…

    css 2023年6月10日
    00
  • jQuery EasyUI 中文API Button使用实例

    jQuery EasyUI 中文API Button使用实例 Button简介 Button是jQuery EasyUI中的一个用户界面组件,用于创建简单的按钮。它支持各种有趣的按钮样式,包括图标和自定义文本等。 Button的创建 可以通过如下代码创建Button: <a href="#" class="easyui-l…

    css 2023年6月9日
    00
  • react基本安装与测试示例

    以下是React基本安装和测试示例的完整攻略: 安装Node.js和npm 首先,你需要在你的计算机上安装Node.js和npm(包管理器),如果你已经安装过了,可以跳过这一步骤。 如果你还没有安装Node.js和npm,请参考以下步骤: 访问Node.js官网:https://nodejs.org/en/ 下载LTS版本的Node.js,根据你的操作系统选…

    css 2023年6月9日
    00
  • 屏蔽浏览器自动的input样式不影响设计整体的一致性

    屏蔽浏览器自动的input样式是一个常见的需求,因为浏览器自带的input样式可能不符合设计要求,会影响网站整体的一致性。以下是一些攻略,可以帮助你屏蔽浏览器自动的input样式。 方案一:使用伪类 可以使用伪类来屏蔽浏览器自动的input样式,具体做法如下: input[type="text"], input[type="pa…

    css 2023年6月9日
    00
  • 浅谈浏览器的兼容性(必看篇)

    浅谈浏览器的兼容性(必看篇) 什么是浏览器兼容性 浏览器兼容性指的是同一份网页,在不同的浏览器以及不同的浏览器版本下,是否能够正常显示和运行。由于不同浏览器之间存在一定的差异,因此在开发网页时需要考虑到浏览器兼容性问题。 浏览器兼容性的重要性 浏览器兼容性对于网站的用户体验和网站的流量十分重要。如果一个网站在某个浏览器下无法正常打开或运行,很可能造成用户流失…

    css 2023年6月10日
    00
  • 实例讲解CSS3中的box-flex弹性盒属性布局

    下面是关于“实例讲解CSS3中的box-flex弹性盒属性布局”的完整攻略: CSS3中的box-flex弹性盒属性布局 1. 弹性盒模型简介 弹性盒模型指的是一种新的布局模式,它可以使元素在一个容器内以弹性的方式排列和对齐。这种布局方式不同于传统的基于盒子模型的布局方式,在处理一些复杂的布局时表现更加优异。 2. 弹性盒模型的基本概念 在弹性盒模型中,有三…

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