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 相关文章推荐
SWFObject Flash js调用类
Jul 08 Javascript
基于jquery的横向滚动条(滑动条)
Feb 24 Javascript
JavaScript判断变量是对象还是数组的方法
Aug 28 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
Jan 14 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
Apr 06 Javascript
Node.js的特点详解
Feb 03 Javascript
jQuery读取XML文件的方法示例
Feb 03 Javascript
Webpack优化配置缩小文件搜索范围
Dec 25 Javascript
详解JavaScript中的强制类型转换
Apr 15 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
Sep 16 Javascript
深入学习Vue nextTick的用法及原理
Oct 08 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
Oct 27 Javascript
浅谈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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
默默简单的写了一个模板引擎
2007/01/02 PHP
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
javascript字符串拼接的效率问题
2010/12/25 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
Python编写百度贴吧的简单爬虫
2015/04/02 Python
在Python中使用第三方模块的教程
2015/04/27 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
Python切片操作深入详解
2018/07/27 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
大学团支书的自我评价分享
2013/12/14 职场文书
政府门卫岗位职责
2014/04/29 职场文书
MySQL空间数据存储及函数
2021/09/25 MySQL