纯js仿淘宝京东商品放大镜功能


Posted in Javascript onMarch 02, 2017

效果图:

纯js仿淘宝京东商品放大镜功能

代码如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 <title>无标题</title>
 <style>
 *{
  margin: 0px;
  padding: 0px;
 }
 .imgContent{
  width: 420px;
  height: 300px;
  position: relative;
  margin-left: 50px;
  margin-top: 50px;
 }
 .imgContent>img{
  width: 420px;
  height: 300px;
 }
 </style>
</head>
<body>
 <div class="imgcontent" id="imgContent1">
 <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1488436622116&di=e3c2b2a5c847d6051d8daaec9a9a2131&imgtype=0&src=http%3A%2F%2F2a.zol-img.com.cn%2Fproduct%2F174_1200x900%2F888%2FceeY9tJ1QRFLk.jpg" alt="iphone7">
 </div>
</body>
<script>
 /*大致功能的思路:(完全按照自己的想法去实现的功能,肯定有很多地方优化,希望大家一起讨论)
 1、有一个放原始图片的盒子
 2、当鼠标移入这个盒子,在右侧创建一个相同大小的镜像盒子,镜像盒子里创建一个放大4倍的镜像图片,同时也在原始盒子里创建一个放大镜(若存在就display:block,若不存在就创建,镜像盒子同理)
 3、当鼠标移动时,原始盒子里的放大镜跟随鼠标移动(类似拖拽功能),镜像盒子里的图片的top和left值是原始盒子里放大镜的top和left值的-4倍
 4、当鼠标移出原始盒子时,隐藏镜像盒子和放大镜*/
 function Scaler(id){
 var me = this
 var originalDiv = document.querySelector("#"+id)
 var mirrorDiv = null
 var mirrorImg = null
 var scaler = null
 var real_left = originalDiv.offsetLeft
 var real_right = originalDiv.offsetWidth+originalDiv.offsetLeft
 var real_top = originalDiv.offsetTop
 var real_bottom = originalDiv.offsetHeight+originalDiv.offsetTop
 //创建镜像盒子
 this.createMirror = function(){
  var originalStyle = getComputedStyle(originalDiv)
  mirrorDiv = document.createElement("div")
  mirrorDiv.style.cssText = 'width:'+originalStyle.width+
      ';height:'+originalStyle.height+
      ';position:absolute;left:'+originalStyle.width+
      ';top:0px;margin-left:10px;overflow:hidden;';
  //创建镜像图片
  mirrorImg = document.createElement("img")
  mirrorImg.style.cssText = 'width:'+(originalDiv.offsetWidth*4)+
      'px;height:'+originalDiv.offsetHeight*4+'px;position:absolute;top:0px;left:0px;'
  mirrorImg.src = document.querySelector("#"+id+" img").src
  mirrorDiv.appendChild(mirrorImg)
  originalDiv.appendChild(mirrorDiv)
 }
 //创建放大镜
 this.createScaler = function(left,top){
  scaler = document.createElement("div")
  scaler.style.cssText = 'width:100px;height:100px;background-color:yellow;opacity:0.4;position:absolute;'
  scaler.style.top = top;
  scaler.style.left = left; 
  originalDiv.appendChild(scaler)
 }
 //设置镜像图片位置
 this.setImgPosition = function(left,top){
  mirrorImg.style.left = '-'+left+'px'
  mirrorImg.style.top = '-'+top+'px'
 }
 //鼠标移入事件
 this.e_mouseover = function(){
  originalDiv.style.cursor = "move"
  if (!mirrorDiv) {
  me.createMirror()
  }else{
  mirrorDiv.style.display = "block"
  };
  if (!scaler) {
  me.createScaler(0,0)
  }else{
  scaler.style.display = "block"
  };
 }
 //鼠标移出事件
 this.e_mouseleave = function(){
  mirrorDiv.style.display = "none"
  scaler.style.display = "none"
 }
 //鼠标移动事件(关键代码)
 this.e_mousemove = function(e){
  // 判断鼠标是否移出原始盒子
  if (e.clientX > real_right || e.clientX < real_left || e.clientY > real_bottom || e.clientY < real_top ) {
  me.e_mouseleave()
  return false
  };
  // 鼠标到原始盒子顶部的距离
  var padTop = e.clientY-real_top
  // 鼠标到原始盒子左侧的距离
  var padLeft = e.clientX-real_left
  //放大镜跟随鼠标移动(-50是因为让鼠标在放大镜的中心)
  scaler.style.top = padTop-50;
  scaler.style.left = padLeft-50;
  //因为镜像图片放大了4倍,所以跟随移动的时候是4倍
  me.setImgPosition((padLeft-50)*4,(padTop-50)*4)
 }
 //注册事件监听
 originalDiv.onmouseover = me.e_mouseover
 originalDiv.onmouseleave = me.e_mouseleave
 originalDiv.onmousemove = function(e){
  me.e_mousemove(e)
 }
 }
 // 创建图片放大功能对象,参数为原始盒子id即可(放大镜大小,镜像图片放大倍数都可设为参数传递)
 new Scaler("imgContent1")
</script>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jquery.validate使用攻略 第五步 正则验证
Jul 01 Javascript
创建公共调用 jQuery Ajax 带返回值
Aug 01 Javascript
js setTimeout 常见问题小结
Aug 13 Javascript
jquery easyui中treegrid用法的简单实例
Feb 18 Javascript
jquery 选取方法都有哪些
May 18 Javascript
javascript arguments使用示例
Dec 16 Javascript
js实现点击左右按钮轮播图片效果实例
Jan 29 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
Jul 14 Javascript
js闭包用法实例详解
Dec 13 Javascript
Bootstrap源码解读按钮(5)
Dec 23 Javascript
微信小程序 地图map详解及简单实例
Jan 10 Javascript
vue基础之事件v-onclick=&quot;函数&quot;用法示例
Mar 11 Javascript
JSONP跨域请求
Mar 02 #Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 #Javascript
JavaScript正则替换HTML标签功能示例
Mar 02 #Javascript
如何正确理解javascript的模块化
Mar 02 #Javascript
jquery实现左右滑动式轮播图
Mar 02 #Javascript
如何写好你的JavaScript【推荐】
Mar 02 #Javascript
js前端日历控件(悬浮、拖拽、自由变形)
Mar 02 #Javascript
You might like
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
javascript基本算法汇总
2016/03/09 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
django实现分页的方法
2015/05/26 Python
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
python数据预处理方式 :数据降维
2020/02/24 Python
python一些性能分析的技巧
2020/08/30 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
J2EE面试题大全
2016/08/06 面试题
文秘专业自荐信
2013/10/14 职场文书
《口技》教学反思
2014/02/21 职场文书
宝宝满月酒主持词和仪式流程
2014/03/27 职场文书
企业活动策划方案
2014/06/02 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android
MySQL数据库表约束讲解
2022/06/21 MySQL