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 页面关闭前的出现提示的实现代码
May 25 Javascript
一个可拖拽列宽表格实例演示
Nov 26 Javascript
js动态创建表格,删除行列的小例子
Jul 20 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
Aug 23 Javascript
JQuery中DOM事件绑定用法详解
Jun 13 Javascript
JavaScript对数组进行随机重排的方法
Jul 22 Javascript
基于jquery实现智能提示控件intellSeach.js
Mar 17 Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
May 25 Javascript
Vue2.0 实现单选互斥的方法
Apr 13 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
Jun 04 Javascript
elementUI select组件使用及注意事项详解
May 29 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
消息持续发送的完整例子
2006/10/09 PHP
PHP Stream_*系列函数
2010/08/01 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
function foo的原型与prototype属性解惑
2010/11/19 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
Python open读写文件实现脚本
2008/09/06 Python
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
python添加模块搜索路径方法
2017/09/11 Python
详解tensorflow实现迁移学习实例
2018/02/10 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
html+css3实现的登录界面
2020/12/09 HTML / CSS
html5视频播放_动力节点Java学院整理
2017/07/13 HTML / CSS
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
汽车促销活动方案
2014/03/31 职场文书
个人工作表现评语
2014/04/30 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
初中英语教学随笔
2015/08/15 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python