原生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 DOM编程实例(智播客学习)
Nov 23 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
Mar 15 Javascript
jquery无缝向上滚动实现代码
Mar 29 Javascript
jquery text(),val(),html()方法区别总结
Nov 04 Javascript
Javascript仿PHP $_GET获取URL中的参数
May 12 Javascript
总结jQuery插件开发中的一些要点
May 16 Javascript
js实现div模拟模态对话框展现URL内容
May 27 Javascript
JavaScript实现自动跳转文本功能
May 25 Javascript
vue.js实例todoList项目
Jul 07 Javascript
VUE重点问题总结
Mar 19 Javascript
vue使用pdfjs显示PDF可复制的实现方法
Dec 14 Javascript
VUEX 数据持久化,刷新后重新获取的例子
Nov 12 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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
np.dot()函数的用法详解
2020/01/17 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
Dr. Martens马汀博士法国官网:马丁靴鼻祖
2020/01/15 全球购物
护理专业自荐信
2013/12/03 职场文书
党员组织关系介绍信
2014/02/13 职场文书
施工质量承诺书范文
2014/05/30 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
中小企业员工手册范本
2015/05/14 职场文书
2015年电教工作总结
2015/05/26 职场文书
五一放假通知怎么写
2015/08/18 职场文书
初中数学教学反思范文
2016/02/17 职场文书