放大镜效果

实现放大镜效果代码如下:

html

    <div class="smallbox">
        <img src="images/放大镜/1.png" alt="" class="small">
        <div class="mask"></div>
        <div class="big">
            <img src="images/放大镜/1big.png" alt="" class="bigImg">
        </div>
    </div>

css:

      .smallbox{
            position: relative;
            width: 400px;
            height: 400px;
            border: 1px solid #ccc;
        }
        .smallbox .small{
            width: 400px;
        }
        .mask{
            position: absolute;
            top: 0;
            left: 0;
            display: none;
            width: 300px;
            height: 300px;
            background-color: #000 ;
            opacity: .5;
        }
        .smallbox .big{
            position: absolute;
            left: 410px;
            top: 0;
            display: none;
            width: 500px;
            height: 500px;
            border: 1px solid #ccc;
            overflow: hidden;
        }
        .big .bigImg{
            position: absolute;
            top: 0;
            left: 0;
        }

js:

        // 获取元素
        var smallbox=document.querySelector('.smallbox');
        var mask=document.querySelector('.mask');
        var big=document.querySelector('.big');
        var maskX=
        // 鼠标经过smallbox,遮挡层和big显示
        smallbox.addEventListener('mouseover',function(e){
            mask.style.display='block';
            big.style.display='block';
        })
        // 鼠标离开smallbox,遮挡层和big隐藏
        smallbox.addEventListener('mouseout',function(){
            mask.style.display='none';
            big.style.display='none';
        })
        
        smallbox.addEventListener('mousemove',function(e){
            var x = e.pageX - this.offsetLeft;
            var y = e.pageY - this.offsetTop;
            // mask移动的距离
            maskX=x - mask.offsetWidth / 2;
            maskY=y - mask.offsetHeight / 2;
            // 遮挡层不出smallbox
            maskMaxW = smallbox.offsetWidth - mask.offsetWidth;
            maskMaxH = smallbox.offsetHeight - mask.offsetHeight;
            if(maskX <= 0){
                maskX = 0;
            }else if(maskX >= maskMaxW){
                maskX = maskMaxW;
            }
            if(maskY <= 0){
                maskY = 0;
            }else if(maskY >= maskMaxH){
                maskY = maskMaxH;
            }
            mask.style.left = maskX + 'px';
            mask.style.top = maskY + 'px';
            // 大图片的移动距离 = 遮挡层移动距离 *大图片最大移动距离 / 遮挡层最大移动距离
            var bigImg = document.querySelector('.bigImg');
            var small = document.querySelector('.small');
            // 大图片的最大移动距离
            var bigMaxW = bigImg.offsetWidth - big.offsetWidth;
            var bigMaxH = bigImg.offsetHeight - big.offsetHeight;
            // 大图片的移动距离
            var bigW = maskX * bigMaxW / maskMaxW;
            var bigH = maskY * bigMaxH / maskMaxH;
            // 大图移动
            bigImg.style.left = -bigW + 'px';
            bigImg.style.top = -bigH + 'px';
            // 鼠标移出small隐藏mask和big
            if(e.pageX < this.offsetLeft || e.pageX > this.offsetLeft+this.offsetWidth || e.pageY < this.offsetTop || e.pageY > this.offsetTop+this.offsetHeight){
                mask.style.display='none';
                big.style.display='none';
            }

        })
        

结果:

放大镜效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 放大镜效果通常是指在前端开发中使用 React 技术实现的一种交互式功能,让用户能够放大图片或者内容区域。这个效果通常是通过 CSS 的 `transform: scale()` 属性结合组件的状态或 props 来实现的。当你点击某个区域或者触发某些事件时,会改变元素的缩放比例,提供类似看图软件中的放大效果。 以下是实现简单放大镜效果的一个基本步骤: 1. 创建一个 React 组件,包含一个原图容器和一个可放大显示的子元素(如 `<img>` 或 `<div>`)。 2. 给原图添加样式,设置初始缩放比例为 1。 3. 定义一个状态变量来存储当前的缩放比例,初始化为 1(非放大)。 4. 添加事件处理函数,在用户触发事件(如鼠标移动、双击等)时更新缩放比例。 5. 使用 `style` 属性动态设置子元素的 `scale` 样式,实现放大效果。 下面是一个简单的示例代码: ```jsx import React, { useState } from 'react'; const ZoomableImage = ({ src }) => { const [zoom, setZoom] = useState(1); const handleMouseEnter = () => setZoom(1.05); const handleMouseLeave = () => setZoom(1); const handleClick = () => setZoom(zoom > 1 ? 1 : zoom + 0.1); // 鼠标单击放大 return ( <div onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave}> <img src={src} style={{ transform: `scale(${zoom})`, transition: 'transform 0.3s' }} /> <button onClick={handleClick}>放大</button> </div> ); }; export default ZoomableImage; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值