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 获取用户客户端操作系统版本
Aug 25 Javascript
JavaScript 获取当前时间戳的代码
Aug 05 Javascript
JS实现文字掉落效果的方法
May 06 Javascript
Bootstrap每天必学之js插件
Nov 30 Javascript
bootstrap快速制作后台界面
Dec 05 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
Mar 10 Javascript
Vue父组件调用子组件事件方法
Feb 23 Javascript
spirngmvc js传递复杂json参数到controller的实例
Mar 29 Javascript
js中的数组对象排序分析
Dec 11 Javascript
Javascript的this详解
Mar 23 Javascript
vue发送websocket请求和http post请求的实例代码
Jul 11 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
Aug 20 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
傻瓜化配置PHP环境――Appserv
2006/12/13 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
Yii清理缓存的方法
2016/01/06 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
jquery ready函数源代码研究
2009/12/06 Javascript
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
深入理解Angular中的依赖注入
2017/06/26 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
python实现给字典添加条目的方法
2014/09/25 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
python实现月食效果实例代码
2019/06/18 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
python在不同条件下的输入与输出
2020/02/13 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
python的链表基础知识点
2020/09/13 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
医院护士的求职信
2014/01/03 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
违纪学生保证书
2015/02/27 职场文书
健康证明
2015/06/19 职场文书
如何使用php生成zip压缩包
2021/04/21 PHP