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 相关文章推荐
JavaScript 异步调用框架 (Part 6 - 实例 &amp; 模式)
Aug 04 Javascript
JSONP 跨域共享信息
Aug 16 Javascript
固定表格行列(expression)在IE下适用
Jul 25 Javascript
jQuery学习之prop和attr的区别示例介绍
Nov 15 Javascript
juery框架写的弹窗效果适合新手
Nov 27 Javascript
jQuery中[attribute]选择器用法实例
Dec 31 Javascript
ES6扩展运算符用法实例分析
Oct 31 Javascript
JavaScript生成指定范围随机数和随机序列的方法
May 05 Javascript
jQuery动态操作表单示例【基于table表格】
Dec 06 jQuery
js HTML DOM EventListener功能与用法实例分析
Apr 27 Javascript
JS替换字符串中指定位置的字符(多种方法)
May 28 Javascript
关于javascript中的promise的用法和注意事项(推荐)
Jan 15 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
php输入流php://input使用示例(php发送图片流到服务器)
2013/12/25 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
php中请求url的五种方法总结
2017/07/13 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
详解webpack多页面配置记录
2018/01/22 Javascript
JavaScript实现一个带AI的井字棋游戏源码
2018/05/21 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
原生js实现随机点名
2020/07/05 Javascript
python中enumerate函数用法实例分析
2015/05/20 Python
python实现汉诺塔方法汇总
2016/07/25 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
Html5自定义字体解决方法
2019/10/09 HTML / CSS
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
大学生职业规划前言模板
2013/12/27 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
党员公开承诺事项
2014/03/25 职场文书
企业宣传口号
2014/06/12 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
党校学习党性分析材料
2014/12/19 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
Oracle中update和select 关联操作
2022/01/18 Oracle