js实现淘宝浏览商品放大镜功能


Posted in Javascript onOctober 28, 2020

本文实例为大家分享了js实现淘宝浏览商品放大镜的具体代码,供大家参考,具体内容如下

1、准备两张图片,其中一张图片分辨率为另一张图片的二倍。

2、前端页面布局

js实现淘宝浏览商品放大镜功能

//box1位左侧原图,box2为右侧放大图额显示框,son为iv class="box1">
 <div class="son"></div>
 <div class="ceng"></div>
</div>
<div class="box2"></div>

3、js写逻辑

let box1=document.querySelector(".box1");
 let box2=document.querySelector(".box2");
 let son=document.querySelector(".son");
 let ceng=document.querySelector(".ceng");
 //鼠标移入:son,box2出现
 ceng.onmouseenter=function(){
  son.style.display="block"
  box2.style.display="block"
 }
 //鼠标移出:son,box2消失
 ceng.onmouseleave=function(){
  son.style.display="none"
  box2.style.display="none"
 }
 //鼠标移动:son的位置随鼠标移动,box2背景图的位置变化
 ceng.onmousemove=function(e){
  let sw=e.clientX-son.offsetWidth/2
  let sh=e.clientY-son.offsetHeight/2  
  if(sw>ceng.offsetWidth-son.offsetWidth){
   sw=ceng.offsetWidth-son.offsetWidth
  }
  else if(sw<=0){
   sw=0;
  }
  if(sh>ceng.offsetHeight-son.offsetHeight){
   sh=ceng.offsetHeight-son.offHeight
  }
  else if(sh<=0){
   sh=0;
  }
  son.style.left=sw+"px"
  son.style.top=sh+"px"
  box2.style.backgroundPosition=`${-2*sw}px ${-2*sh}px`
 }

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>放大镜</title>
</head>
<style>
 *{
  margin: 0;
  padding: 0;
 }
 .box1{
  width: 500px;
  height:333px;
  /* border:1px solid red; */
  background: url('shatan.jpg') no-repeat;
  position: relative;
  float: left;
  box-sizing: border-box
 }
 .son{
  width: 100px;
  height: 100px;
  background-color: #fff;
  position: fixed;
  left:0;
  top:0;
  opacity: 0.7;
  display: none;
 }
 .ceng{
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 100;
 }
 .box2{
  width: 200px;
  height:200px;
  border:1px solid red;
  background: url('shatan1.jpg') no-repeat;
  float: left;
  display: none;
 }
</style>
<body>
 <div class="box1">
  <div class="son"></div>
  <div class="ceng"></div>
 </div>
 <div class="box2"></div>
</body>
</html>
<script>
 let box1=document.querySelector(".box1");
 let box2=document.querySelector(".box2");
 let son=document.querySelector(".son");
 let ceng=document.querySelector(".ceng");
 ceng.onmouseenter=function(){
  son.style.display="block"
  box2.style.display="block"
 }
 ceng.onmouseleave=function(){
  son.style.display="none"
  box2.style.display="none"
 }
 ceng.onmousemove=function(e){
  let sw=e.clientX-son.offsetWidth/2
  let sh=e.clientY-son.offsetHeight/2  
  if(sw>ceng.offsetWidth-son.offsetWidth){
   sw=ceng.offsetWidth-son.offsetWidth
  }
  else if(sw<=0){
   sw=0;
  }
  if(sh>ceng.offsetHeight-son.offsetHeight){
   sh=ceng.offsetHeight-son.offHeight
  }
  else if(sh<=0){
   sh=0;
  }
  son.style.left=sw+"px"
  son.style.top=sh+"px"
  box2.style.backgroundPosition=`${-2*sw}px ${-2*sh}px`
 }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
Nov 13 Javascript
jquery实现简单的全选和反选功能
Jan 02 Javascript
Select2.js下拉框使用小结
Oct 24 Javascript
JS实现的驼峰式和连字符式转换功能分析
Dec 21 Javascript
vue.js开发环境搭建教程
May 04 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
Aug 08 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
Apr 18 Javascript
vue+webpack实现异步加载三种用法示例详解
Apr 24 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
Jun 10 Javascript
基于vue-draggable 实现三级拖动排序效果
Jan 10 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
Jan 21 Javascript
js实现详情页放大镜效果
Oct 28 #Javascript
用js实现放大镜效果
Oct 28 #Javascript
如何在 ant 的table中实现图片的渲染操作
Oct 28 #Javascript
WebStorm中如何将自己的代码上传到github示例详解
Oct 28 #Javascript
原生JS生成指定位数的验证码
Oct 28 #Javascript
微信小程序接入vant Weapp组件的详细步骤
Oct 28 #Javascript
Ant-design-vue Table组件customRow属性的使用说明
Oct 28 #Javascript
You might like
一段php加密解密的代码
2007/07/16 PHP
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
功能强大的php分页函数
2016/07/20 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
AngularJS中如何使用echart插件示例详解
2016/10/26 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
深入理解JavaScript 箭头函数
2019/05/30 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
python中的reduce内建函数使用方法指南
2014/08/31 Python
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python对于requests的封装方法详解
2019/01/03 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
通过实例解析python and和or使用方法
2020/11/14 Python
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
Java基础类库面试题
2013/09/04 面试题
大学生职业生涯规划范文
2014/01/08 职场文书
总裁助理岗位职责
2014/02/17 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
html粘性页脚的具体使用
2022/01/18 HTML / CSS
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL