纯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困惑—包装集 DOM节点
Oct 16 Javascript
jquery 应用代码 方便的排序功能
Feb 06 Javascript
js单例模式详解实例
Nov 21 Javascript
javascript if条件判断方法小结
May 17 Javascript
javascript 闭包详解
Feb 15 Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 Javascript
node.js中 stream使用教程
Aug 28 Javascript
vue-router路由简单案例介绍
Feb 21 Javascript
原生js实现吸顶效果
Mar 13 Javascript
vue2.0获取自定义属性的值
Mar 28 Javascript
动态加载权限管理模块中的Vue组件
Jan 16 Javascript
vue2.0.js的多级联动选择器实现方法
Feb 09 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-fpm静态和动态执行方式的比较
2016/11/09 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
javascript 动态生成私有变量访问器
2009/12/06 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
React组件的三种写法总结
2017/01/12 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
总经理秘书工作职责
2013/12/26 职场文书
小学生读书感言
2014/02/12 职场文书
会计工作决心书
2014/03/11 职场文书
欢迎新生标语
2014/10/06 职场文书
幼儿园辞职书
2015/02/26 职场文书
2015年保管员工作总结
2015/04/30 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫