js放大镜(图片放大)

1 篇文章 0 订阅
1 篇文章 0 订阅

js图片放大

1.结构部分

<div class="box" id="box">
        <div class="small">
            //要放大的图片
            <img src="image/higher.jpeg" width="350" alt="" />
            //放大镜
            <div class="mask"></div>
        </div>
        //显示图片
        <div class="big">
            <img src="image/higher.jpeg" alt="" />
        </div>
</div>

2.js部分

<script>
        let box = $('box');
        let smallBox = box.children[0];
        let bigBox = box.children[1];
        let smallImage = smallBox.children[0];
        let mask = smallBox.children[1];
        let bigImage = bigBox.children[0];

        box.onmouseenter = function () {
            mask.style.display = 'block';
            bigBox.style.display = 'block';
        }

        box.onmouseleave = function () {
            mask.style.display = 'none';
            bigBox.style.display = 'none';
        }

        box.onmousemove = function (e) {
            // 兼容
            e = e || window.event;

            // 获取鼠标移动时mask距离box的距离
            let maskX = e.pageX - box.offsetLeft;
            let maskY = e.pageY - box.offsetTop;
            // console.log(box.offsetLeft,smallBox.offsetLeft);
            // 不能使用smallBox的offset距离,smallBox为相对定位,smallBox相对于box的offsetLeft与offsetTop始终为0

            // 向左、上分别移动一半遮罩层的宽高,以实现鼠标在遮罩层中间的效果
            maskX = maskX - mask.offsetWidth / 2;
            maskY = maskY - mask.offsetHeight / 2;

            // console.log(box.offsetWidth,box.offsetHeight);
            let maskMaxLeft = box.offsetWidth - mask.offsetWidth; //获取mask的最大left距离
            let maskMaxTop = box.offsetHeight - mask.offsetHeight; //获取mask的最大top距离

            // 保证mask的left距离始终在0-maskMaxLeft之间,即保证x轴上mask始终在box中
            maskX = maskX < 0 ? 0 : maskX;
            maskX = maskX > maskMaxLeft ? maskMaxLeft : maskX;

            // 保证mask的top距离始终在0-maskMaxTop之间,即保证y轴上mask始终在box中
            maskY = maskY < 0 ? 0 : maskY;
            maskY = maskY > maskMaxTop ? maskMaxTop : maskY;

            // 赋值
            mask.style.left = maskX + 'px';
            mask.style.top = maskY + 'px';


            // mask在box中移动的距离与bigImage在bigBox中显示的位置成正比例
            // maskX/maskMaxLeft=bigImageX/bigImageMaxLeft
            // maskY/maskMaxTop=bigImageY/bigImageMaxTop

            let bigImageMaxLeft = bigImage.offsetWidth - bigBox.offsetWidth; //获取bigImage的最大left距离
            let bigImageMaxTop = bigImage.offsetHeight - bigBox.offsetHeight; //获取bigImage的最大top距离

            // 由公式可得
            let bigImageX = maskX / maskMaxLeft * bigImageMaxLeft;
            let bigImageY = maskY / maskMaxTop * bigImageMaxTop;

            // bigImage为相对定位,因此bigImage的top和left应为负值才可实现效果
            bigImage.style.left = -bigImageX + 'px';
            bigImage.style.top = -bigImageY + 'px';
        }
    </script>

3.封装的方法

// $通过id获取元素
function $(id) {
    return document.getElementById(id)
}

// 获取min-max之间的数字
function getRandomNumber(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min - 1) + min)
}

// 获取随机颜色
function getRandomColor() {
    let r = Math.floor(Math.random() * 256)
    let g = Math.floor(Math.random() * 256)
    let b = Math.floor(Math.random() * 256)
    return `rgb(${r},${g},${b})`
}

// 获取当前日期时间
function CurrentDatetime() {
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    var day = date.getDate();
    var hour = date.getHours();
    var minute = date.getMinutes();
    var second = date.getSeconds();
    var time = `${year}-${month.toString().padStart(2,'0')}-${day.toString().padStart(2,'0')}`
    // var time = `${hour.toString().padStart(2,'0')}:${minute.toString().padStart(2,'0')}:${second.toString().padStart(2,'0')}`;
    // var time = `${year}-${month.toString().padStart(2,'0')}-${day.toString().padStart(2,'0')} ${hour.toString().padStart(2,'0')}:${minute.toString().padStart(2,'0')}:${second.toString().padStart(2,'0')}`;
    return time;
}

// 获取距离时间
function getBetweenTime(dateTime) {
    // 指定日期和时间
    var endTime = new Date(dateTime);
    // 当前系统时间
    var nowTime = new Date();
    var t = endTime.getTime() - nowTime.getTime();
    var d = Math.floor(t / 1000 / 60 / 60 / 24);
    var h = Math.floor(t / 1000 / 60 / 60 % 24);
    var m = Math.floor(t / 1000 / 60 % 60);
    var s = Math.floor(t / 1000 % 60);
    // var html = d + " 天" + h + " 时" + m + " 分" + s + " 秒";
    var html = [d.toString().padStart(2,'0'),h.toString().padStart(2,'0'),m.toString().padStart(2,'0'),s.toString().padStart(2,'0')];
    return html
}

// 获取页面滚动条距离左侧和顶部的距离
function getScroll(){
    var scrollLeft=document.body.scrollLeft||document.documentElement.scrollLeft;
    var scrollTop=document.body.scrollTop||document.documentElement.scrollTop;
    return {
        scrollLeft:scrollLeft,
        scrollTop:scrollTop
    }
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值