原生JS实现京东查看商品点击放大


Posted in Javascript onDecember 21, 2020

本文实例为大家分享了JS实现京东查看商品点击放大的具体代码,供大家参考,具体内容如下

需求分析

鼠标移入,出现黄色的遮罩,和用来放大的盒子
鼠标移出,遮罩和放大的盒子消失
鼠标在小图片上面进行移动的时候

  • 黄色遮罩层会随着鼠标一起移动
  • 用来放大显示的图片,也跟着一起移动

实现效果:

原生JS实现京东查看商品点击放大

html部分:

<div class="box">
  <div class="small">
   <img src="./images/s.jpg" alt="">
   <div class="mask"></div>
  </div>
  <div class="big">
   <img src="./images/big.jpg" alt="">
  </div>
</div>

css部分:

<style>
  * {
   margin: 0;
   padding: 0;
  }
  
  .box {
   width: 450px;
   height: 450px;
   border: 1px solid #aaa;
   position: relative;
   top: 100px;
   left: 100px;
  }
  
  .small {
   width: 450px;
   height: 450px;
   position: absolute;
  }
  
  .mask {
   position: absolute;
   background-color: rgba(255, 255, 0, .3);
   /* border: 1px solid #ff0; */
   width: 225px;
   height: 225px;
   top: 0;
   left: 0;
   display: none;
  }
  
  .big {
   width: 450px;
   height: 450px;
   border: 1px solid #aaa;
   position: absolute;
   left: 500px;
   top: 0;
   overflow: hidden;
   display: none;
  }
  
  .big>img {
   width: 900px;
   height: 900px;
   position: absolute;
  }
</style>

js部分:

//一步一步来,不慌
 //首先来个onload事件,等待页面加载完在执行,
 window.onload = function() {
  //获取DOM一波 用到什么拿什么
  var small = document.querySelector(".small");
  var box = document.querySelector(".box");
  var big = document.querySelector(".big");
  var mask = document.querySelector(".mask");
  var bigimg = document.querySelector(".big img");

  // 第一部分 -----------------------------------------------开始
  //分析一下 我们第一步要做的事情就是鼠标移入,移除的操作
  //在分析鼠标移入会怎么样子呢?
  //鼠标移入会有黄色透明框框的显示,以及大图的显示
  small.onmouseover = function() {
   big.style.display = "block";
   mask.style.display = "block";
  };
  //在分析鼠标移出会怎么样子呢?
  //鼠标移入会有黄色透明框框的隐藏,以及大图的隐藏
  small.onmouseout = function() {
   big.style.display = "none";
   mask.style.display = "none";
  };
  // 第一部分 -----------------------------------------------结束

  // 第二部分 -----------------------------------------------开始
  //我们需要将鼠标在黄色的透明框的中间显示
  small.onmousemove = function(e) {
    var x = e.pageX - box.offsetLeft - mask.offsetWidth / 2;
    var y = e.pageY - box.offsetTop - mask.offsetHeight / 2;
    console.log(x, y);
    //获取 左面小图的max值
    var max_x = small.clientWidth - mask.offsetWidth;
    var max_y = small.clientHeight - mask.offsetHeight;
    //获取 右面大图的max值
    var MAX_X = bigimg.offsetWidth - big.clientWidth;
    var MAX_Y = bigimg.offsetHeight - big.clientHeight;

    //设置这个黄色的框框在这个盒子里面的最大移动区域
    //左面/上面 设置
    if (x < 0) {
     x = 0;
    }
    if (y < 0) {
     y = 0;
    }
    //右面/下面 设置
    if (x > max_x) {
     x = max_x;
    }
    if (y > max_y) {
     y = max_y;
    }

    mask.style.left = `${x}px`;
    mask.style.top = `${y}px`;

    //这里运用到了数学中的等比的概念,因为查看的图要比现在看到的大,所以等比例增大
    var X = x / max_x * MAX_X;
    var Y = y / max_y * MAX_Y

    //到了这里,咱们已经将最大,最小的临界点已经获取完毕
    //现在给右面的大图进行定位移动即可
    bigimg.style.left = `-${X}px`;
    bigimg.style.top = `-${Y}px`;
   }
   // 第二部分 -----------------------------------------------结束
}

案例分享到这里。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery之过滤元素操作小结
Nov 30 Javascript
jQuery中nextUntil()方法用法实例
Jan 07 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
Sep 18 Javascript
jquery中实现时间戳与日期相互转换
Apr 12 Javascript
DWR中各种java方法的调用
May 04 Javascript
Sea.JS知识总结
May 05 Javascript
jquery中取消和绑定hover事件的实现代码
Jun 02 Javascript
JS实现六边形3D拖拽翻转效果的方法
Sep 11 Javascript
AngularJS过滤器filter用法分析
Dec 11 Javascript
js中常用的Math方法总结
Jan 12 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
Aug 21 jQuery
使用Vant完成Dialog弹框案例
Nov 11 Javascript
基于javascript实现移动端轮播图效果
Dec 21 #Javascript
原生JS实现pc端轮播图效果
Dec 21 #Javascript
js实现移动端轮播图滑动切换
Dec 21 #Javascript
vue监听滚动事件的方法
Dec 21 #Vue.js
vue el-upload上传文件的示例代码
Dec 21 #Vue.js
微信小程序自定义支持图片的弹窗
Dec 21 #Javascript
Jquery+javascript实现支付网页数字键盘
Dec 21 #jQuery
You might like
php mysql Errcode: 28 终极解决方法
2009/07/01 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
2011/04/20 PHP
php变量作用域的深入解析
2013/06/03 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
大学生个人事迹材料
2014/01/21 职场文书
新学期开学标语
2014/06/30 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang