js仿京东放大镜效果


Posted in Javascript onAugust 09, 2020

本文实例为大家分享了js仿京东放大镜效果的具体代码,供大家参考,具体内容如下

1、效果1:鼠标经过前

js仿京东放大镜效果

2、效果2:鼠标放上去,弹出右边放大镜

js仿京东放大镜效果

3、效果3:鼠标在小盒子移动,放大镜跟着移动

js仿京东放大镜效果

4、源代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    /* 清除默认样式 */
    *{
      margin: 0;
      padding: 0;
    }

    /* 左边小盒子样式 */
    .box1{
      position: relative;
      width: 450px;
      height: 450px;
      border: 1px solid #999;
      margin-left: 80px;
      margin-top: 50px;
    }
    .box1 .img1{
      /* 设置左边图片大小 */
      width: 450px;
    }

    /* 遮罩层bg的样式 */
    .box1_bg{
       /* 一开始要隐藏起来 */
      display: none;
      position: absolute;
      top: 0;
      left: 0;
      width: 300px;
      height: 300px;
      background-color: yellow;
      /* 透明效果 */
      opacity: .5 ;
      cursor: move;
    }


    /* 右边大盒子样式 */
    .big_img{
      /* 一开始要隐藏起来 */
      display: none;
      width: 540px;
      height: 540px;
      position: absolute;
      top: 0;
      left: 470px;
      border: 1px solid #999;
      overflow: hidden;
    }
    /* 大盒子里面的图片样式 */
    .big_img .big_imgs{
      position: absolute;
      top: 0;
      left: 0;
      width: 800px;
    }
  </style>
</head>
<body>
  <div class="box1">
    <img class="img1" src="images/2-1.jpg" alt="#" >
    <div class="box1_bg"></div>
    <div class="big_img">
      <img class="big_imgs" src="images/2.jpg" alt="#" >
    </div>
  </div>
  <!-- JS代码如下 -->
  <script>
    // ①整个案例可以分为三个功能模块
    // ②鼠标经过小图片盒子,黄色的遮挡层和大图片盒子显示,离开-->隐藏2个盒子功能
    // ③黄色的遮挡层 跟随 鼠标功能。
    // ④移动黄色遮挡层,大图片跟随移动功能。
    // 事件源:
    var box1 = document.querySelector('.box1');
    var bg = document.querySelector('.box1_bg');
    var big = document.querySelector('.big_img');
    // 1. 鼠标 经过 盒子的时候,显示 遮罩层 和 放大镜
    box1.addEventListener('mouseover',function(){
      bg.style.display = 'block';
      big.style.display = 'block';
    })
     // 2. 鼠标 离开 盒子的时候,隐藏 遮罩层 和 放大镜
    box1.addEventListener('mouseout',function(){
      bg.style.display = 'none';
      big.style.display = 'none';
    })

    // 2.鼠标移动的时候
    box1.addEventListener('mousemove',function(e){
      var x = e.pageX - this.offsetLeft; // x是鼠标到父盒子x距离
      var y = e.pageY - this.offsetTop; // y是鼠标到父盒子y距离
      // console.log(x ,y)
      // 最大移动距离,box1盒子的大小 减去 遮罩层的盒子大小  
      var max_x = box1.offsetWidth - bg.offsetWidth;
      var max_y = box1.offsetHeight - bg.offsetHeight;
      if( max_x >=0 )
      // *将坐标减去 遮罩层盒子的一半 鼠标就落到遮罩层的中间
      // 移动距离X,Y
      var X = x - bg.offsetWidth/2;
      var Y = y - bg.offsetHeight/2;
      // *当遮罩层超出 box1 的边框的时候,设一个边界卡住它
      if(X <= 0 ){
        X = 0
      }else if( X >= max_x){
        X = max_x;
      }
      if(Y <= 0 ){
        Y=0
      }else if( Y >= max_y){
        Y = max_y;
      }
      // *把鼠标在盒子内的坐标给 遮罩层 实现跟随鼠标移动效果
      // 注意加上 px 不然不起效果
      bg.style.left = X +'px';
      bg.style.top = Y +'px';
      
      // 右边图片跟随移动,有一个小算法:big_img_x
      // 遮挡层移动距离(X)/遮挡层最大移动距离(max_x)=大图片移动距离(bigX)/大图片移动的最大距离(big_img_x)

      // 获取 图片 事件源
      var big_img = document.querySelector('.big_imgs');
      // big_img_x 求大图片移动的最大距离 正方形 距离一样的
      var big_img_x = big_img.offsetWidth - big.offsetWidth ; 
      var big_img_y = big_img.offsetWidth - big.offsetWidth ;
      // bigX 大图片的移动距离
      var bigX = X * big_img_x / max_x ; 
      var bigY = Y * big_img_y / max_x ; 
      big_img.style.left = -bigX +'px';
      big_img.style.top = -bigY +'px';
    })
  </script>
</body>
</html>

5、喜欢的话记得点赞 收藏 关注噢~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js模拟点击以提交表单为例兼容主流浏览器
Nov 29 Javascript
js获取当前路径的简单示例代码
Jan 08 Javascript
js使用正则实现ReplaceAll全部替换的方法
Jul 18 Javascript
JavaScript中Date对象的常用方法示例
Oct 24 Javascript
AngularJS表单提交实例详解
Feb 18 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
Feb 26 Javascript
jquery网页加载进度条的实现
Jun 01 jQuery
SeaJS中use函数用法实例分析
Oct 10 Javascript
JavaScript Reflect Metadata实现详解
Dec 12 Javascript
mpvue 项目初始化及实现授权登录的实现方法
Jul 20 Javascript
vue编写简单的购物车功能
Jan 08 Vue.js
vue使用echarts画组织结构图
Feb 06 Vue.js
浅谈vue-props的default写不写有什么区别
Aug 09 #Javascript
js实现带有动画的返回顶部
Aug 09 #Javascript
Vue将props值实时传递 并可修改的操作
Aug 09 #Javascript
js实现轮播图效果 纯js实现图片自动切换
Aug 09 #Javascript
vue 子组件watch监听不到prop的解决
Aug 09 #Javascript
vue 重塑数组之修改数组指定index的值操作
Aug 09 #Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
Aug 09 #Javascript
You might like
PHP垃圾回收机制简单说明
2010/07/22 PHP
php生成随机密码的几种方法
2011/01/17 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
Python 字符串定义
2009/09/25 Python
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
python实现石头剪刀布程序
2021/01/20 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
学期自我评价
2014/01/27 职场文书
楼面经理岗位职责范本
2014/02/18 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
单位更名证明
2015/06/18 职场文书
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技