原生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 相关文章推荐
javascript自执行函数之伪命名空间封装法
Dec 25 Javascript
jquery focus(fn),blur(fn)方法实例代码
Dec 16 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
Nov 07 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
Apr 08 Javascript
js验证是否为数字的总结
Apr 14 Javascript
javascript检查表单数据是否改变的方法
Jul 30 Javascript
JS日期和时间选择控件升级版(自写)
Aug 02 Javascript
js获取视频时长代码
Apr 10 Javascript
cookie的secure属性详解
Apr 08 Javascript
js实现数组冒泡排序、快速排序原理
Mar 08 Javascript
详解如何较好的使用js
Dec 16 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
Nov 21 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实时显示输出
2008/10/02 PHP
浅析php原型模式
2014/11/25 PHP
详解PHP中的Traits
2015/07/29 PHP
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
Python split() 函数拆分字符串将字符串转化为列的方法
2019/07/16 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
《兰亭集序》教学反思
2014/02/11 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
股东合作协议书
2014/04/14 职场文书
股份合作协议书范本
2014/04/14 职场文书
环保倡议书400字
2014/05/15 职场文书
小学校本培训方案
2014/06/06 职场文书
项目投资合作意向书
2014/07/29 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书