jQuery 放大镜(面向过程)


<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style type="text/css">
        html {
            padding: 100px;
        }

        /*中等图片*/

        #middle {
            display: inline-block;
            min-width: 400px;
            height: 400px;
            border: 1px solid #000000;
            text-align: center;
            position: relative;
        }

        #middle img {
            height: 100%;
        }
        /*放大窗口(大图片放大镜)*/

        #show {
            display: none;
            position: absolute;
            overflow: hidden;
            border: 1px solid #000000;
        }
        /*中等图片放大镜*/

        #magnifier {
            display: none;
            background: #0000FF;
            filter: alpha(opacity=50);
            opacity: 0.5;
            position: absolute;
            cursor: move;
        }
    </style>
    <script src="js/jquery-1.12.0.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        //核心:就是2张图片(中等图片和大图片),2个放大镜(中等图片放大镜和大图片显示窗口)
        //【由中等图片放大镜的left值和top值得到大图片放大镜的left值和top值】
        //left值和top值
        //      1、取得【中等图片放大镜】的position().left和position().top
        //      2、计算大图片的宽度(高度)与中等图片的宽度(高度)的比例
        //      3、【大图片放大镜】的left:【中等图片放大镜】的position().left * 宽度比
        //            【大图片放大镜】的top:【中等图片放大镜】的position().top * 高度比
        //【由大图片放大镜的宽度和高度得到中等图片放大镜的宽度和高度】
        //放大镜的宽度和高度
        //      1、先定大图片放大镜(也就是大图片的显示窗口)的高度=宽度=中等图片的高度
        //      2、计算大图片的宽度(高度)与大图片放大镜的宽度(高度)的比例
        //      3、中等图片放大镜的宽度:中等图片的宽度/宽度比
        //            中等图片放大镜的高度:中等图片的高度/高度比
        $(function() {


            //中等图片放大镜
            var $magnifier = $("#magnifier");
            //中等图片展示窗口
            var $middle = $("#middle");
            //中等图片展示窗口的高度
            var middleHeight=$middle.innerHeight();
            //获取中等图片展示窗口相对于html的位置
            var xMiddle = $middle.offset().left;
            var yMiddle = $middle.offset().top;
            //中等图片
            var $middleImg = $middle.find("img");
            //大张图片放大镜(显示窗口)
            var $show = $("#show");
            //大张图片放大镜(显示窗口)的宽度和高度
            var showSize=middleHeight;
            //大张图片
            var $showImg = $show.find("img");
            //图片路径数组
            var arrMiddleImgSrc=["images/5.jpg","images/xx.jpg"];
            var arrShowImgSrc=["images/5-300.jpg","images/xx300.jpg"];
            //小图片
            var $smallImg=$("#small img");
            //给每个小图片绑定函数,点击小图片切换到相应的中等图片和大图片
            $smallImg.each(function (idx,small) {
                $(this).on("click",function () {
                    $middleImg.attr("src",arrMiddleImgSrc[idx]);
                    $showImg.attr("src",arrShowImgSrc[idx]);
                })
            })

            $middle.on("mouseover", function() {

                //显示中等图片放大镜
                $magnifier.show();
                //显示大张图片放大镜(show窗口)
                $show.show();

                //设置大图片放大镜在页面位置和宽高
                $show.css({
                        position: "absolute",
                        left: xMiddle + $middle.outerWidth() + 20,
                        top: yMiddle,
                        width: showSize,
                        height: showSize
                    })
                    //大张图片的宽度和高度
                $showImg = $show.find("img");
                var showImgWidth = $showImg.outerWidth();
                var showImgHeight = $showImg.outerHeight();
                //计算大图片宽度与大图片放大镜宽度的比例
                var xx = showImgWidth / showSize;
                //计算大图片高度与大图片放大镜高度的比例
                var yy = showImgHeight / showSize;
                //中等图片的宽度和高度
                var middleImgWidth = $middleImg.outerWidth();
                var middleImgHeight = $middleImg.outerHeight();
                //设置中等图片放大镜的宽高
                $magnifier.css({
                        width: middleImgWidth / xx,
                        height: middleImgHeight / yy
                    })
                    //获得放大镜的宽度/2
                var iWidth = $magnifier.outerWidth() / 2;
                //获得放大镜的高度/2
                var iHeight = $magnifier.outerHeight() / 2;
                //top值的底部边界
                var top_bottom = $middle.innerHeight() - $magnifier.outerWidth();
                //left值的右侧边界
                var left_right = $middle.innerWidth() - $magnifier.outerWidth();
                //移动放大镜
                $(document).on("mousemove", function(e) {
                        //获取放大镜相对于中等图片显示窗口的位置
                        var xMagnifier = $magnifier.position().left;
                        var yMagnifier = $magnifier.position().top;
                        //计算left值和top值的放大比例
                        var xScale = showImgWidth / middleImgWidth;
                        var yScale = showImgHeight / middleImgHeight;
                        //计算大图片的left值和top值
                        var x = xMagnifier * xScale;
                        var y = yMagnifier * yScale;

                        //设置大图片的left值和top值
                        $showImg.css({
                            position: "absolute",
                            left: -x,
                            top: -y
                        });
                        //计算鼠标在中等图片中的位置
                        var iLeft = e.clientX - xMiddle - iWidth;
                        // iTop要考虑滚动条的情况
                        var iTop = e.clientY - yMiddle - iHeight + $(window).scrollTop();

                        //根据鼠标在中等图片中的位置,设置中等图片放大镜的位置

                        //第1种情况:中等图片放大镜在四个顶角上
                        //左上角
                        if(iLeft <= 0 && iTop <= 0) {
                            $magnifier.css({
                                left: 0,
                                top: 0
                            })
                        }
                        //左下角
                        else if(iLeft <= 0 && iTop >= top_bottom) {
                            $magnifier.css({
                                left: 0,
                                top: top_bottom
                            })
                        }
                        //右上角
                        else if(iLeft >= left_right && iTop <= 0) {
                            $magnifier.css({
                                left: left_right,
                                top: 0
                            })
                        }
                        //右下角
                        else if(iLeft >= left_right && iTop >= top_bottom) {
                            $magnifier.css({
                                left: left_right,
                                top: top_bottom
                            })
                        }
                        //第2种情况:中等图片放大镜不在4个顶角上,但超出边界
                        //左边界
                        else if(iLeft <= 0) {
                            $magnifier.css({
                                left: 0,
                                top: e.clientY - yMiddle - iHeight + $(window).scrollTop()
                            })
                        }
                        //右边界
                        else if(iLeft >= left_right) {
                            $magnifier.css({
                                left: left_right,
                                top: e.clientY - yMiddle - iHeight + $(window).scrollTop()
                            })
                        }
                        //上边界
                        else if(iTop <= 0) {
                            $magnifier.css({
                                left: e.clientX - xMiddle - iWidth,
                                top: 0
                            })
                        }
                        //下边界
                        else if(iTop >= top_bottom) {
                            $magnifier.css({
                                left: e.clientX - xMiddle - iWidth,
                                top: top_bottom
                            })
                        }
                        //第3种情况:中等图片放大镜不在顶角上,也没有超出边界
                        else {
                            $magnifier.css({
                                left: e.clientX - xMiddle - iWidth,
                                top: e.clientY - yMiddle - iHeight + $(window).scrollTop()
                            })
                        }

                    })
                    //鼠标移出中等图片区域
                    //1、取消mouseover事件,
                    //2、将放大镜和show窗口隐藏
                $middle.on("mouseout", function() {
                    $(document).off("mousemove");
                    //隐藏放大窗口
                    $magnifier.hide();
                    //隐藏show窗口
                    $show.hide();
                })
            })
        })
    </script>
</head>

<body>
        <div id="middle">
            <img src="images/5.jpg" />
            <div id="magnifier"></div>
        </div>

    <div id="small">
        <img src="images/5-10.jpg" />
        <img src="images/xx10.jpg" />
    </div>
    <div id="show">
        <img src="images/5-300.jpg" />
    </div>

</body>

内容概要:本文系统阐述了Java Persistence API(JPA)的核心概念、技术架构、核心组件及实践应用,重点介绍了JPA作为Java官方定义的对象关系映射(ORM)规范,如何通过实体类、EntityManager、JPQL和persistence.xml配置文件实现Java对象与数据库表之间的映射与操作。文章详细说明了JPA解决的传统JDBC开发痛点,如代码冗余、对象映射繁琐、跨数据库兼容性差等问题,并解析了JPA与Hibernate、EclipseLink等实现框架的关系。同时提供了基于Hibernate和MySQL的完整实践案例,涵盖Maven依赖配置、实体类定义、CRUD操作实现等关键步骤,并列举了常用JPA注解及其用途。最后总结了JPA的标准化优势、开发效率提升能力及在Spring生态中的延伸应用。 适合人群:具备一定Java基础,熟悉基本数据库操作,工作1-3年的后端开发人员或正在学习ORM技术的中级开发者。 使用场景及目标:①理解JPA作为ORM规范的核心原理与组件协作机制;②掌握基于JPA+Hibernate进行数据库操作的开发流程;③为技术选型、团队培训或向Spring Data JPA过渡提供理论与实践基础。 阅读建议:此资源以理论结合实践的方式讲解JPA,建议读者在学习过程中同步搭建环境,动手实现文中示例代码,重点关注EntityManager的使用、JPQL语法特点以及注解配置规则,从而深入理解JPA的设计思想与工程价值。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值