原生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学习笔记(一) 在html中使用javascript
Jun 18 Javascript
在子窗口中关闭父窗口的一句代码
Oct 21 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
Dec 28 Javascript
jquery制作弹窗提示窗口代码分享
Mar 02 Javascript
js实现遮罩层弹出框的方法
Jan 15 Javascript
Bootstrap路径导航与分页学习使用
Feb 08 Javascript
AngularJs 延时器、计时器实例代码
Sep 16 Javascript
Node.js使用Koa搭建 基础项目
Jan 08 Javascript
vue init webpack 建vue项目报错的解决方法
Sep 29 Javascript
微信小程序如何获取群聊的openGid以及名称详解
Jul 17 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
Oct 28 jQuery
在vue-cli3中使用axios获取本地json操作
Jul 30 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 JSON格式数据交互实例代码详解
2011/01/13 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
详解javascript中的babel到底是什么
2018/06/21 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
python实现简单购物商城
2016/05/21 Python
Python检测网络延迟的代码
2018/05/15 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
python绘制高斯曲线
2021/02/19 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
送给他或她的礼物:FUN.com
2018/08/17 全球购物
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
本科毕业生自荐信
2014/06/02 职场文书
设计大赛策划方案
2014/06/13 职场文书
大学生个人总结范文
2015/02/15 职场文书
与死神共舞观后感
2015/06/15 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python
一文搞懂php的垃圾回收机制
2021/06/18 PHP