zoukankan      html  css  js  c++  java
  • jQuery补充,模拟图片放大镜

    jQuery补充,模拟图片放大镜

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="css/fdj.css">
    </head>
    <body>
    
    <div class="outer">                     <!--放大镜主体div-->
        <div class="small_box">             <!--放大镜小图区域-->
            <div class="float"></div>       <!--小图里的玻璃罩区域-->
            <img src="img/small.jpg">
        </div>
        <div class="big_box">               <!--放大镜大图区域-->
            <img src="img/big.jpg">
        </div>
    </div>
    <script src="jquery/jquery.min.js"></script>
    <script src="fdj.js"></script>
    </body>
    </html>

    css

    @charset "utf-8";
    *{
        margin: 0;
        padding: 0;
    }
    .outer{                         /*放大镜主体div*/
        width: 350px;
        height: 350px;
        border:5px solid #0f68ee;
    }
    .outer .small_box{              /*放大镜小图区域*/
        position: relative;
    }
    .outer .small_box .float{       /*放大镜小图区域里的玻璃罩*/
        width: 175px;
        height: 175px;
        background-color: #ABC7E2;
        opacity: 0.4;
        position: absolute;
        display: none;
    }
    .outer .big_box{                /*放大镜大图区域*/
        width: 400px;
        height: 400px;
        border:5px solid #0f68ee;
        overflow:hidden;
        position: absolute;
        top: 0;
        left: 370px;
        display: none;
    }
    .outer .big_box img{
        position: absolute;
    }

    js

    /**
     * Created by admin on 2017/5/10.
     */
    $(function () {
        // 当鼠标悬浮到小图片区域的时候,执行鼠标悬浮事件
        $('.outer .small_box').mouseover(function () {
            $('.outer .small_box .float').css('display','block');           //显示小图片区域里的玻璃罩
            $('.outer .big_box').css('display','block');                    //显示大图片区域
        });
        //当前鼠标离开小图片区域的时候,执行鼠标离开事件
        $('.outer .small_box').mouseout(function () {
            $('.outer .small_box .float').css('display','none');            //隐藏小图片区域里的玻璃罩
            $('.outer .big_box').css('display','none');                     //隐藏大图片区域
        });
        // 当鼠标在小图片区域移动的时候,执行鼠标移动事件
        $('.outer .small_box').mousemove(function (e) {
            var _event = e || window.event;                                 //接收事件里的event对象信息
    
            var small_box_height = $('.outer .small_box').height();         //获取小图区域div的高度
            var small_box_width = $('.outer .small_box').width();           //获取小图区域div的宽度
    
            var float_height = $('.outer .small_box .float').height();      //获取小图区域里的玻璃罩高度
            var float_width = $('.outer .small_box .float').width();        //获取小图区域里的玻璃罩宽度
    
            var float_height_ban = $('.outer .small_box .float').height()/2;    //获取小图区域里的玻璃罩一半高度
            var float_width_ban = $('.outer .small_box .float').width()/2;      //获取小图区域里的玻璃罩一半宽度
    
            //换算玻璃罩滑动值
            var mouse_left = _event.clientX - float_width_ban;                  //将鼠标点与左边边距,减去玻璃罩的一半,就是玻璃罩横向滑动值
            var mouse_top = _event.clientY - float_height_ban;                  //将鼠标点与上边边距,减去玻璃罩的一百,就是玻璃罩纵向滑动值
    
            if (mouse_left < 0){                                                //玻璃罩横向滑动值,如果小于0
                mouse_left = 0;                                                 //将璃罩横向滑动值,设置为0
            }else if (mouse_left >small_box_width - float_width){               //判断璃罩横向滑动值,如果大于了小图区域宽度减去玻璃罩宽度,说明璃罩横向滑动值向右已经超出了小图区域
                mouse_left = small_box_width - float_width;                     //将璃罩横向滑动值,设置成小图区域宽度减去玻璃罩宽度,就是横向滑动值向右到头
            }
    
            if (mouse_top < 0){                                                 //玻璃罩纵向滑动值,如果小于0
                mouse_top = 0;                                                  //将璃罩纵向滑动值,设置为0
            }else if (mouse_top >small_box_height - float_height){              //判断璃罩纵向滑动值,如果大于了小图区域高度减去玻璃罩高度,说明璃罩纵向滑动值向下已经超出了小图区域
                mouse_top = small_box_height - float_height;                    //将璃罩纵向滑动值,设置成小图区域高度减去玻璃罩高度,就是纵向滑动值向下到头
            }
    
            $('.outer .small_box .float').css('left',mouse_left + 'px');        //获取到玻璃罩纵向滑动值
            $('.outer .small_box .float').css('top',mouse_top + 'px');          //获取到玻璃罩横向滑动值
    
            //换算大图滑动比例
            //将大图片的宽度减去大图容器div宽度,除以小图容器div宽度减去玻璃罩宽度,等于大图反向横向滑动比例
            var percentX = ($('.outer .big_box img').width()-$('.outer .big_box').width())/(small_box_width-float_width);
            //将大图片的高度减去大图容器div高度,除以小图容器div高度减去玻璃罩高度,等于大图反向纵向滑动比例
            var percentY = ($('.outer .big_box img').height()-$('.outer .big_box').height())/(small_box_height-float_height);
    
            $('.outer .big_box img').css('left',-percentX*mouse_left+'px'); //反向横向滑动比例,除以玻璃罩横向滑动值,等于大图横向滑动值
            $('.outer .big_box img').css('top',-percentY*mouse_top+'px');   //反向纵向滑动比例,除以玻璃罩纵向滑动值,等于大图纵向滑动值
        });
    
    });
  • 相关阅读:
    2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 C: Coconut
    2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 A: Banana
    第2周项目1c++语言中函数参数传递的三种方式
    第2周项目2程序的多文件组织
    【BZOJ 3224】普通平衡树
    【POJ 1741】Tree
    浅谈树分治
    【luogu 2709 / BZOJ 3781】小B的询问
    【luogu 1972 / BZOJ 1878】HH的项链
    【BZOJ 3339 / BZOJ 3585 / luogu 4137】Rmq Problem / mex
  • 原文地址:https://www.cnblogs.com/adc8868/p/6842447.html
Copyright © 2011-2022 走看看