原生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 相关文章推荐
Mootools 1.2教程(2) DOM选择器
Sep 14 Javascript
jQuery学习3:操作元素属性和特性
Feb 07 Javascript
动态改变div的z-index属性的简单实例
Aug 08 Javascript
ECMAScript 5中的属性描述符详解
Mar 02 Javascript
jQuery通过扩展实现抖动效果的方法
Mar 11 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
Jan 14 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
Jan 27 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
Sep 25 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
Mar 08 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
Aug 14 Javascript
js获取本日、本周、本月的时间代码
Feb 01 Javascript
JS数据类型分类及常用判断方法
Nov 19 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 运算符与表达式详细介绍
2016/11/30 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
理解JS事件循环
2016/01/07 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
在Python的web框架中配置app的教程
2015/04/30 Python
Python语言描述最大连续子序列和
2017/12/05 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
python使用hdfs3模块对hdfs进行操作详解
2020/06/06 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
能否解释一下XSS cookie盗窃是什么意思
2012/06/02 面试题
食堂标语大全
2014/06/11 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
刑事代理授权委托书
2014/09/17 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
早上好问候语大全
2015/11/10 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android