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 版
Mar 24 Javascript
js计算页面刷新的次数
Jul 20 Javascript
JavaScript获取当前页面上的指定对象示例代码
Feb 28 Javascript
jQuery中next方法用法实例
Apr 24 Javascript
JS版微信6.0分享接口用法分析
Oct 13 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
Mar 01 Javascript
基于rem的移动端响应式适配方案(详解)
Jul 07 Javascript
webpack开发跨域问题解决办法
Aug 03 Javascript
vue组件jsx语法的具体使用
May 21 Javascript
浅析JavaScript 函数柯里化
Sep 08 Javascript
Vue自定义表单内容检查rules实例
Oct 30 Javascript
如何用JavaScript学习算法复杂度
Apr 30 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自动选择 连接本地还是远程数据库
2010/12/02 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
PHP的自定义模板引擎
2017/03/24 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
Javascript new关键字的玄机 以及其它
2010/08/25 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
小程序实现多列选择器
2019/02/15 Javascript
jQuery实现图片下载代码
2019/07/18 jQuery
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
python里将list中元素依次向前移动一位
2014/09/12 Python
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
深入理解python中的select模块
2017/04/23 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
Clarks鞋美国官网:全球领军鞋履品牌
2017/05/13 全球购物
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
单位实习证明怎么写
2014/01/17 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
2019银行竞聘书
2019/06/21 职场文书
人生感悟经典句子
2019/08/20 职场文书
Golang bufio详细讲解
2022/04/21 Golang
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle