放大镜效果

效果:

HTML:

<div class="zh-content zh-scrollbar">
    <img class="zh-plane-profile" src="" alt="">
</div>

CSS:

.zh-content{position: relative;}
.zh-plane-profile{position: absolute;z-index: 2;height: 420%;left: 50%;top: 50%;transform: translate(-50%, -50%) rotate(-90deg);}

JS:

// 放大镜
function magnifyGlass(bigImg) {
    // 放大镜元素
    var mgEleId = 'zh_magnify_glass',
        mgEleWth = 200,
        mgEleHgt = 200;
    var mgEle = $('<div id="'+mgEleId+'"></div>');
    mgEle.css({
        position: 'fixed',
        zIndex: 99999,
        width: mgEleWth,
        height: mgEleHgt,
        border: '1px solid #3C7FCD',
        borderRadius: '50%',
        transform: 'rotate(-90deg)',
        overflow: 'hidden'
    });
    // 大图
    var bigImgEle = $('<img src="'+bigImg+'" />');
    bigImgEle.css({
        position: 'absolute',
        zIndex: 2,
        left: 0,
        top: 0
    });
    // 大图加载完成
    bigImgEle[0].onload = function() {
        var bigImgWth = this.width,
            bigImgHgt = this.height;
        mgEle.append(bigImgEle);
        // 事件
        $('.zh-plane-profile').mouseenter(function(e) {
            var imgWth = $(this).height(),
                imgHgt = $(this).width(),
                imgOffetLeft = $(this).offset().left,
                imgOffetTop = $(this).offset().top;
            mgEle.css({
                left: e.clientX-mgEleWth/2,
                top: e.clientY-mgEleHgt/2
            });
            if($('#'+mgEleId).size() == 0) {
                $('body').append(mgEle);
            }
            // 事件
            $(document).on('mousemove', function(e) {
                var endX = e.clientX,
                    endY = e.clientY;
                if(endX<imgOffetLeft || endX>imgWth+imgOffetLeft || endY<imgOffetTop || endY>imgHgt+imgOffetTop) {
                    $('#'+mgEleId).remove();
                    $(document).off('mousemove');
                } else {
                    var translateX = -(endX-imgOffetLeft)/imgWth*bigImgHgt+mgEleWth/2,
                        translateY = -(bigImgWth-(endY-imgOffetTop)/imgHgt*bigImgWth-mgEleHgt/2);
                    $('#'+mgEleId).css({
                        left: endX-mgEleWth/2,
                        top: endY-mgEleHgt/2
                    });
                    $('#'+mgEleId+' img').css({
                        transform: 'translate('+translateY+'px, '+translateX+'px)'
                    });
                }
            });
        });
    }
}
专门建立的学习Q-q-u-n: 731771211,分享学习方法和需要注意的小细节,不停更新最新的教程和学习技巧
(从零基础开始到前端项目实战教程,学习工具,全栈开发学习路线以及规划)

调用:

magnifyGlass('大图url');

原图:

由于原图是竖着的,所以代码里有了针对竖图的处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值