原生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中的load方法装载IE缓存中文件的方法
Sep 11 Javascript
jQuery中add实现同时选择两个id对象
Oct 22 Javascript
游览器中javascript的执行过程(图文)
May 20 Javascript
jquery实现表格本地排序的方法
Mar 11 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
Jul 28 Javascript
JS只能输入正整数的简单实例
Oct 07 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
Nov 02 Javascript
Vue-router 类似Vuex实现组件化开发的示例
Sep 15 Javascript
浅析Vue中method与computed的区别
Mar 06 Javascript
详解vuex之store源码简单解析
Jun 13 Javascript
vue设置导航栏、侧边栏为公共页面的例子
Nov 01 Javascript
ES6扩展运算符和rest运算符用法实例分析
May 23 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 无限分类的树类代码
2009/12/03 PHP
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
html5 标签
2009/07/16 HTML / CSS
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
任课老师推荐信范文
2013/11/24 职场文书
大学生自荐书范文
2013/12/10 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
加多宝凉茶广告词
2014/03/18 职场文书
检讨书1000字
2014/10/11 职场文书
离职信范本
2015/06/23 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书