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日期对象的dateAdd与dateDiff方法
Nov 18 Javascript
Dojo 学习笔记入门篇 First Dojo Example
Nov 15 Javascript
Json对象与Json字符串互转(4种转换方式)
Mar 27 Javascript
ExtJS4中的requires使用方法示例介绍
Dec 03 Javascript
基于jquery实现的可编辑下拉框实现代码
Aug 02 Javascript
JavaScript实现搜索框的自动完成功能(一)
Feb 25 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
Oct 24 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
Jun 28 Javascript
使用Node.js搭建静态资源服务详细教程
Aug 02 Javascript
JS闭包经典实例详解
Dec 20 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
Feb 10 Javascript
解决vue 退出动画无效的问题
Aug 09 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
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
学习ExtJS table布局
2009/10/08 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
javaScript中&quot;==&quot;和&quot;===&quot;的区别详解
2018/03/16 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
python Tkinter的图片刷新实例
2019/06/14 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
员工晚婚的请假条
2014/02/08 职场文书
元旦获奖感言
2014/03/08 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
债务纠纷委托书
2014/08/30 职场文书