原生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中原型和原型链详解
Feb 11 Javascript
Javascript对象Clone实例分析
Jun 09 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
AngularJS基础 ng-mousemove 指令简单示例
Aug 02 Javascript
JSON与JS对象的区别与对比
Mar 01 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
Jun 13 Javascript
js中变量的连续赋值(实例讲解)
Jul 08 Javascript
Angular异步变同步处理方法
Aug 13 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
JavaScript ES6常用基础知识总结
Feb 09 Javascript
jsonp跨域获取百度联想词的方法分析
May 13 Javascript
vue学习笔记之Vue中css动画原理简单示例
Feb 29 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
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
jquery+easeing实现仿flash的载入动画
2015/03/10 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
vue随机验证码组件的封装实现
2020/02/19 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
Web服务器框架 Tornado简介
2014/07/16 Python
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Python中for循环和while循环的基本使用方法
2015/08/21 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
Python sorted对list和dict排序
2020/06/09 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
优秀经理获奖感言
2014/03/04 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
工人先锋号申报材料
2014/12/29 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
新手入门Mysql--概念
2021/06/18 MySQL