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 相关文章推荐
基于jquery的仿百度搜索框效果代码
Apr 11 Javascript
JavaScript中使用Substring删除字符串最后一个字符
Nov 03 Javascript
针对初学者的jQuery入门指南
Aug 15 Javascript
javascript容错处理代码(屏蔽js错误)
Jan 20 Javascript
VueJS如何引入css或者less文件的一些坑
Apr 25 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
Nov 03 Javascript
Node.js静态服务器的实现方法
Feb 28 Javascript
Vue组件中的data必须是一个function的原因浅析
Sep 03 Javascript
微信小程序开发之左右分栏效果的实例代码
May 20 Javascript
echarts大屏字体自适应的方法步骤
Jul 12 Javascript
微信小程序wxs实现吸顶效果
Jan 08 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
Mar 02 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
PHP安装攻略:常见问题解答(三)
2006/10/09 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
Python读写Excel文件方法介绍
2014/11/22 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
几道PHP的面试题
2012/05/19 面试题
PHP面试题附答案
2015/11/28 面试题
What is EJB
2016/07/22 面试题
岗位竞聘演讲稿
2014/01/10 职场文书
战略合作意向书范本
2014/04/01 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
2015年七一建党节活动总结
2015/03/20 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
解决golang 关于全局变量的坑
2021/05/06 Golang
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript