纯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 相关文章推荐
javascript demo 基本技巧
Dec 18 Javascript
CSS+Jquery实现页面圆角框方法大全
Dec 24 Javascript
document.getElementById为空或不是对象的解决方法
Jan 24 Javascript
javascript制作的cookie封装及使用指南
Jan 02 Javascript
Bootstrap创建可折叠的组件
Feb 23 Javascript
AngularJs 60分钟入门基础教程
Apr 03 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
利用jQuery实现一个简单的表格上下翻页效果
Mar 14 Javascript
AngularJS ui-router刷新子页面路由的方法
Jul 23 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
Sep 16 Javascript
浅谈JS的原型和继承
May 08 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
Jun 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
神族 Protoss 历史背景
2020/03/14 星际争霸
PHP+APACHE实现用户论证的方法
2006/10/09 PHP
PHP添加MySQL数据记录代码
2008/06/07 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
php如何获取文件的扩展名
2015/10/28 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
php中的钩子理解及应用实例分析
2019/08/30 PHP
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
2018/03/17 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
JavaScript简易计算器制作
2020/01/17 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
python删除特定文件的方法
2015/07/30 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
一些Solaris面试题
2013/03/22 面试题
如何写毕业求职自荐信
2013/11/06 职场文书
计算机专业毕业生自我鉴定
2014/01/16 职场文书
烹饪自我鉴定
2014/03/01 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书
Python pandas求方差和标准差的方法实例
2021/08/04 Python