美文网首页
封装放大镜

封装放大镜

作者: 你怀中的猫 | 来源:发表于2022-05-03 15:05 被阅读0次

1、放大镜插件的参数

参数 参数表示的意义
selector \color{orange}{注:}(必须写) 指定容器
url \color{orange}{注:}(必须写) 图片地址

2、放大镜插件js代码

function initscaleGlass(selector, url) {
    //获取目标容器
    var oWrap = document.querySelector(selector);
    //定义变量保存创建的oMask
    var oMask = null;
    //定义变量保存大图对象
    var oBig = null;
    //定义变量保存放大镜容器
    var oScale = null;
    //构建基本界面
    initView();
    //绑定事件
    //1、鼠标移入
    oWrap.addEventListener('mouseover', function () {
        oMask.style.display = 'block';  //mask出现
        oScale.style.display = 'block';  //oScale出现
    })
    //2、鼠标移出
    oWrap.addEventListener('mouseout', function () {
        oMask.style.display = 'none';  //mask消失
        oScale.style.display = 'none';  //oScale消失
    })
    //3、移动1修改oMask
    oWrap.addEventListener('mousemove', function (e) {
        //兼容
        e = e || window.event;
        //获取鼠标在oWrap中的位置坐标
        oWrap._x = e.pageX - getEl2Dom(oWrap, "Left") - oWrap.clientLeft;
        oWrap._y = e.pageY - getEl2Dom(oWrap, "Top") - oWrap.clientTop;
        //计算oMask的定位值
        oMask._x = oWrap._x - oMask.offsetWidth / 2;
        oMask._y = oWrap._y - oMask.offsetHeight / 2;
        //边界处理
        var W = oWrap.clientWidth - oMask.offsetWidth;
        var H = oWrap.clientHeight - oMask.offsetHeight;
        oMask._x = oMask._x < 0 ? 0 : oMask._x;
        oMask._x = oMask._x > W ? W : oMask._x;
        oMask._y = oMask._y < 0 ? 0 : oMask._y;
        oMask._y = oMask._y > H ? H : oMask._y;
        //样式设置
        oMask.style.left = oMask._x + 'px';
        oMask.style.top = oMask._y + 'px';
    })

    //4、移动2修改oBig的位置
    oWrap.addEventListener('mousemove', function (e) {
        //兼容
        e = e || window.event;
        //oBig定位 /  oBig高度 ==  oMask定位 / oWrap.内容区域高度
        oBig.style.top = -(oBig.offsetHeight * oMask._y / oWrap.clientHeight) + 'px';
        oBig.style.left = -(oBig.offsetWidth * oMask._x / oWrap.clientWidth) + 'px';
    })


    //1、根据传入的数据构建基本页面
    function initView() {
        oWrap.style.position = 'relative';
        //1-1、创建oMask
        oMask = document.createElement('div');
        //1-2、设置样式
        var oW = oWrap.offsetWidth * 0.3;  //定义变量保存oMask的宽度
        oMask.style.width = oW + 'px';
        oMask.style.height = oW + 'px';
        oMask.style.position = 'absolute';
        oMask.style.opacity = '0.5';
        oMask.style.background = 'yellow';
        oMask.style.display = 'none';
        //2-1.创建img
        var oImg = new Image();
        oImg.src = url;
        //2-2、设置样式
        oImg.style.width = oWrap.clientWidth + 'px';
        oImg.style.height = oWrap.clientHeight + 'px';
        oImg.style.display = 'block';
        oWrap.appendChild(oImg);
        //3-1、创建放大图结构容器+图片  克隆
        oScale = oWrap.cloneNode(true);
        //将oScale放入oWrap
        oWrap.appendChild(oScale);  //放入DOM中

        //3-2、设置样式
        oScale.style.height = oWrap.clientWidth + 'px';
        oScale.style.position = 'absolute';
        oScale.style.left = oWrap.offsetWidth + 'px';
        oScale.style.top = '0px';
        oScale.style.index = 100;
        oScale.style.overflow = 'hidden';
        //克隆出来的,把margin去掉
        oScale.style.margin = '0px';

        //4-1、设置oScale中的图片样式
        oBig = oScale.firstElementChild; //获取大图

        //x2 : oWrap.clientWidth
        //bg2 : oBig.style,width
        //x1 : 0.3 * oWrap.clientWidth
        //bg1 : oWrap.clientWidth

        /*
            x1 / bg1 = x2 / bg2  等比例缩放公式
            bg2 = x2 / (x1 / bg1);
        */
        oBig.style.width = oScale.clientWidth / (oW / oWrap.clientWidth) + 'px';
        oBig.style.height = oScale.clientHeight / (oW / oWrap.clientHeight) + 'px';
        oBig.style.position = 'relative';


        //5、将oScale隐藏
        oScale.style.display = 'none';

        //6、将创建的mask也放入oWrap中
        oWrap.appendChild(oMask);


    }
    //2、工具方法获取盒子到文档边界之间的距离()
    function getEl2Dom(el, fx) {
        if (el == null) return 0;
        //获取当前盒子的左侧定位
        var offsetLeft = el["offset" + fx];
        //获取当前盒子的定位父级
        var parent = el.offsetParent;
        //获取父级的边框宽度
        var clientLeft = parent ? parent["client" + fx] : 0;
        return offsetLeft + clientLeft + getEl2Dom(el.offsetParent, fx)
    }

    //给一个返回值
    return function (url) {
        //获取oWrap下imgs
        var imgs = oWrap.querySelectorAll('img');
        //遍历修改src
        imgs.forEach(function (img) {
            img.src = url;
        })
    }
}

3、放大镜插件使用示例

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .wrap {
            width: 400px;
            height: 400px;
            display: inline-block;
        }

        .li {
            width: 500px;
            height: 80px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .li img {
            width: 100px;
            height: 100px;
        }
    </style>
</head>

<body>
    <div class="wrap"> </div>
       
        <div class="li">
            <!-- 这里放入自己的图片即可 -->
            <img class="img1" src="./img/1.jpg" alt="">
            <img src="./img/2.jpg" alt="">
            <img src="./img/3.jpg" alt="">
            <img src="./img/4.jpg" alt="">
            <img src="./img/5.jpg" alt="">
            <img src="./img/6.jpg" alt="">
        </div>
   

</body>
<script src="./JS/scaleGlass.js"></script>
<script>

    //获取照片
    var imgs = document.querySelectorAll('.li img');
    var src = document.querySelector('.img1').src;
    var imgset = initscaleGlass('.wrap', src);
    //遍历绑定
    for (var i = 0; i < imgs.length; i++) {
        imgs[i].addEventListener('click', function (e) {
            imgset(this.src)
        })
    }

</script>

</html>

相关文章

  • 封装放大镜

    1、放大镜插件的参数 参数参数表示的意义selector(必须写) 指定容器url(必须写) 图片地址 2、放大镜...

  • JS基础学习:图片跟着鼠标飞(最终)/案例复习/拖拽对话框/滚动

    目录 图片跟着鼠标飞案例----最终版本---兼容代码的封装 拖拽案例---- 滚动条案例--- 放大镜的案例--...

  • iOS放大镜效果实现-ASMagnifierManger

    ASMagnifierManger 放大镜效果。可更改放大倍数和放大镜大小 特点介绍 放大镜效果 放大镜形状自定义...

  • 2018-12-02

    放大镜 HTML 放大镜 ...

  • 放大镜

    一、多种图片放大镜 二、单张图片放大镜

  • 2018-06-09

    对待学生要用“放大镜”“反光镜”和“显微镜” 教师对待学生要用“放大镜”“反光镜”和“显微镜”。“放大镜”---...

  • 涓涓说(20220522)

    【放大镜】 涓涓:妈妈,放大镜是不是凹凸镜? 妈妈:(不确定地)是吧。 涓涓:那为什么地球仪上的放大镜是平面的? ...

  • 放大镜

    我用放大镜寻找快乐 点滴的快乐瞬间填满心房 我用放大镜寻找幸福 涓涓幸福的细流变成辽阔海洋 我用放大镜寻找希望 迷...

  • 自己看自己,总会带着放大镜

    这个放大镜,要看放大倍数多高,以及使用放大镜的频次。 放大镜是用来给自己复盘的,工作中,比自己级别的高的领导突然问...

  • 简单实现电商放大镜的插件

    最近在做一个电商的平台,需要展示商品的图片,自然而然也得有放大镜了,刚才是在项目中封装了一个CMD的模块,后台独立...

网友评论

      本文标题:封装放大镜

      本文链接:https://www.haomeiwen.com/subject/puabyrtx.html