JS图片放大镜效果

news/2024/7/19 13:18:16 标签: js, javascript

 

 

 

前言

我是一个小白   分享一个 图片放大镜 的案例   写的有哪些不到位的希望大家 多多指正

希望可以对一些 才学的人有帮助


提示:以下是本篇文章正文内容,下面案例可供参考

一、js图片放大镜  的核心

其实就是 找到 小图和大图的比例关系

二、具体步骤

直接上代码

首先是结构代码

 <div class="box">
        <div class="left">
            <div class="mask"></div>
            <div class="right">
                <img src="1.gif" alt="">
            </div>
        </div>










    </div>

:然后是   样式

* {
            margin: 0;
            padding: 0;
        }
        
        .box {
            margin: 100px 0;
            width: 1000px;
            height: 1000px;
            background-color: #fff;
        }
        
        .left {
            position: relative;
            width: 300px;
            height: 300px;
            background-image: url(1.gif);
            background-size: 100%;
        }
        
        .mask {
            position: absolute;
            display: none;
            width: 200px;
            height: 200px;
            background-color: aqua;
            opacity: .5;
        }
        
        .right {
            display: none;
            position: absolute;
            top: 0;
            left: 350px;
            width: 500px;
            height: 500px;
            border: #333 1px solid;
            overflow: hidden;
        }
        
        .right img {
            position: absolute;
            width: 600px;
            height: 700px;
        }
    </style>

 最后是   js代码   都在注释里面

javascript">  <script>
        var left = document.querySelector('.left');
        var mask = document.querySelector('.mask ');
        var right = document.querySelector('.right');
        var big_img = document.querySelector('.right').querySelector('img');
        left.addEventListener('mouseover', function() {
            mask.style.display = 'block';
            right.style.display = 'block';

        }); //鼠标经过 左边盒子  显示蒙版   和右边的大盒子  
        left.addEventListener('mouseout', function() {
            mask.style.display = 'none';
            right.style.display = 'none';

        }); //鼠标离开  蒙版  和右边的大盒子隐藏 
        left.addEventListener('mousemove', function(e) {
            var x = e.pageX - this.offsetLeft; //求出鼠标距离left盒子左侧边缘的距离
            var y = e.pageY - this.offsetTop; //求出鼠标距离left盒子上方边缘的距离

            var maskx = x - mask.offsetWidth / 2; //为了使鼠标一直在蒙版的中心位置  所以把蒙版的left往左偏移 一半
            var masky = y - mask.offsetHeight / 2; //为了使鼠标一直在蒙版的中心位置  所以把蒙版的top往下偏移 一半
            var max_x = big_img.offsetWidth - right.offsetWidth; //求出 大盒子的横向最大移动距离
            var max_y = big_img.offsetHeight - right.offsetHeight; //求出大盒子的纵向最大移动距离
            var mix_x = this.offsetWidth - mask.offsetWidth; //小盒子的横向最大移动距离
            var mix_y = this.offsetHeight - mask.offsetHeight; //小盒子的纵向最大移动距离
            if (maskx <= 0) {
                maskx = 0; //当蒙版的left小于0  的时候 蒙版的left等于0

            } else if (maskx > (this.offsetWidth - mask.offsetWidth)) {
                maskx = (this.offsetWidth - mask.offsetWidth) //当蒙版的left超出最大横向移动距离的时候 蒙版的left等于横向最大移动距离
            }
            if (masky <= 0) {
                masky = 0;

            } else if (masky >= (this.offsetHeight - mask.offsetHeight)) {
                masky = (this.offsetHeight - mask.offsetHeight);
            } //同上   这是纵向  Y
            mask.style.top = masky + 'px';
            mask.style.left = maskx + 'px'; //设置蒙版的x,y



            var big_x = max_x / mix_x * maskx; //比例关系  (用蒙版在left盒子的横向最大移动距离比上图片在right盒子的横向最大移动距离)*蒙版横向移动的距离
            var big_y = max_y / mix_y * masky; //(用蒙版在left盒子的纵向最大移动距离比上图片在right盒子的纵向最大移动距离)*蒙版纵向移动的距离
            big_img.style.top = -big_y + 'px';
            big_img.style.left = -big_x + 'px';






        })
    </script>

 

 

 

 


总结

谢谢大家  有不足的地方可以给我留言哦  


http://www.niftyadmin.cn/n/854879.html

相关文章

原生js轮播图 transform方法!

小白的我又来啦 &#xff01;&#xff01;&#xff01; 下面呢 给大家 整一下 轮播图 不考虑兼容性的情况下 用transform操作的方法 &#xff01; 不多说直接上代码&#xff01; 首先是 我们的 结构 基本上都是大同小异 &#xff01;&#xff01;&#xff01; <div…

在Ubuntu下配置VIM

无论在Linux下&#xff0c;还是win下&#xff0c;修改vim配置文件尽量修改自己用户主目录下的.vimrc&#xff08;在win中是_vimrc&#xff09;在Ubuntu下使用sudo apt-get install vim-full将vim更新成完整版(不一定非得完整版的吧&#xff1f;)第二步&#xff0c;在当前用户的…

linux内核netfilter之ip_conntrack模块的作用举例--ftp为例

很多协议的控制信息在应用层数据中被包含&#xff0c;这些信息直接影响到了链路的建立&#xff0c;比如ftp协议就是这样&#xff0c;ftp分为port模式和pass模式&#xff0c;port模式中&#xff0c;起初client连接server的21端口&#xff0c;然后当需要传输data的时候&#xff0…

Exchange 2007 中特殊应用解析

在特殊场景下&#xff0c;会有特殊的需求出现&#xff0c;例如我们要通过Exchange实现活动目录中某些用户的邮件不能外传&#xff0c;有些用户只能发邮件而不能接收邮件&#xff0c;这些操作又是如何实现的呢&#xff1f;下面的博文中&#xff0c;会将大量的这种操作做一个总汇…

【Vegas2010】最后的g.cn

唉&#xff0c;估计今天是最后一次这么爽的用g.cn来登入谷歌了。拍照留个纪念吧~

Silverlight读取文件加载到内存(StreamReader中文乱码问题)

使用System.IO.Stream与System.IO.StreamReader可以像普通C#程序一样读取&#xff0c;但是中文无法正常显示&#xff0c;目前的办法是把文件编码保存成utf-8 大气象 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Net;usingSystem.Windows;usingS…

解决谷歌浏览器不能安装flash插件

谷歌浏览器&#xff08;chrome&#xff09;发布也很长时间了&#xff0c;但是一直无法正常安装flash插件&#xff0c;让有些网页很难看。如果是全flash的网站&#xff0c;那根本就没法看&#xff0c;下面就来解决这个问题。 步骤1 1. 下载http://fpdownload.macromedia.com/get…

什么是模块化?

1.什么是模块化? 1.模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元 2. 编程领域中的模块化&#xff0c;就是遵守固定的规则&#xff0c;把一个大文件拆成独立并互相依赖的多个小模块…