JavaScript实现京东放大镜效果


Posted in Javascript onDecember 03, 2019

本文实例为大家分享了JavaScript实现京东放大镜展示的具体代码,供大家参考,具体内容如下

实现效果:

1.鼠标放到图片上显示放大镜和详细图,鼠标离开时什么都不显示(效果消失)
2.鼠标一直在放大镜的中间,且放大镜随鼠标移动
3.放大镜不能出缩列图的盒子
4.鼠标放在详细图上详细图消失

JavaScript实现京东放大镜效果

实现细节:

 1.大盒子虽然比详细图的盒子宽度小,但是在逻辑上详细图的盒子属于大盒子
 2.详细图不能使用浮动,因为盒子下面一般会有文字内容
 3.以父盒子来定位详细图的盒子
 4.放大镜鼠标选中为十字形
 5.对图片进行定位才能使图片移动
 6.使用var evt = event || window.event; //兼容性写法
 7.用放大镜顶点在盒子中的位置根据比例找到图片的位置,来显示图片
 8.图片在详细图中的定位为负值

代码:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>京东放大镜</title>
 <style>
 .box{ /*大盒子虽然比详细图的盒子宽度小,但是在逻辑上详细图的盒子属于大盒子*/
 width: 350px;
 height: 350px;
 position: relative;
 margin: 100px;
 border: 1px solid #aaa;
 }
 .box .detailed{ /*详细图不能使用浮动,因为盒子下面一般会有文字内容*/
 width: 450px;
 height: 450px;
 border: 1px solid #aaa;
 position: absolute;
 overflow: hidden;
 left: 365px; /*以父盒子来定位*/ 
 top: 0;
 /*初始设置为不可见*/
 display: none;
 }
 .box .normal .magnfier{
 width: 150px;
 height: 150px;
 top: 0;
 left: 0;
 position: absolute;
 background-color: rgba(0, 0, 255, 0.2);/*也可以用opacity来设置透明度*/
 cursor: move; /*鼠标选中为十字*/
 display: none; /*初始设为不可见*/
 }
 .detailed img{ /*对图片进行定位使图片移动*/
 position: absolute;
 top: 0;
 left: 0;
 }
 </style>
 <script>
 function $(id){
 return document.getElementById(id);
 }
 window.onload = function(){
 var box = $('box');
 var normal = box.children[0];
 var margnfier = normal.children[1];//获取放大镜的Dom对象,document.getElementsByClassName来获取。
 var detailed = box.children[1];//获得缩略图DOM对象也可以用document.getElementsByClassName('zoom')[0];
 var detailedImg = box.children[1].children[0];
 normal.onmouseover = function(){//不能给box注册onmousever事件,否则快速移到详细图上是详细图也不会消失,
 margnfier.style.display = 'block';
 detailed.style.display = 'block';
 }
 normal.onmouseout = function(){
 margnfier.style.display = 'none';
 detailed.style.display = 'none';
 }
 var x = 0;
 var y = 0;
 //控制zoom放大镜部分在normal里面的移动
 normal.onmousemove = function(event){
 var evt = event || window.event;
 //兼容性写法
 x = evt.clientX - box.offsetLeft - margnfier.offsetWidth / 2;
 y = evt.clientY - box.offsetTop - margnfier.offsetHeight / 2; 
 //判断鼠标是不是溢出了normal的区域,
 if(x < 0){
 x = 0; 
 }else{
 if(x > box.offsetWidth - margnfier.offsetWidth){
 x = box.offsetWidth - margnfier.offsetWidth;
 }
 }
 if(y < 0){
 y = 0;
 }else{
 if(y > box.offsetHeight - margnfier.offsetHeight){
  y = box.offsetHeight - margnfier.offsetHeight;
 }
 }
 margnfier.style.left = x + 'px';
 margnfier.style.top = y + 'px';
 var detailedX = -x * 800 / this.offsetWidth;
 var detailedY = -y * 800 / this.offsetHeight;
 //用放大镜顶点在盒子中的位置根据比例找到图片的位置,来显示图片
 //改变图片位置
 detailedImg.style.left = detailedX + 'px';
 detailedImg.style.top = detailedY + 'px';
 } 
 }
 </script>
</head>
<body>
 <div id="box" class="box"> <!--包含详细图和缩略图的盒子-->
 <div class="normal">
 <img src="imgs/show.jpg" alt="">
 <div class="magnfier"></div>
 </div>
 <div class="detailed">
 <img src="imgs/detail.jpg" alt="">
 </div>
 </div>
</body>
</html>

JavaScript实现京东放大镜效果

更多关于放大镜的效果,请查看专题:《放大镜特效》

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

Javascript 相关文章推荐
关于JS字符串函数String.replace()
Apr 07 Javascript
JavaScript类属性的访问方式详解
Feb 11 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
JS基于递归实现倒计时效果的方法
Nov 26 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
Jan 18 Javascript
jQuery加密密码到cookie的实现代码
Apr 18 jQuery
jQuery自定义元素右键点击事件(实现案例)
Apr 28 jQuery
vue2.0 兄弟组件(平级)通讯的实现代码
Jan 15 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
Dec 09 Javascript
微信小程序实现图片压缩
Dec 03 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
Dec 10 Javascript
详解如何修改 node_modules 里的文件
May 22 Javascript
微信小程序实现图片压缩
Dec 03 #Javascript
Ant Design Pro 下实现文件下载的实现代码
Dec 03 #Javascript
Vue.js 无限滚动列表性能优化方案
Dec 02 #Javascript
浅谈关于vue中scss公用的解决方案
Dec 02 #Javascript
详解js location.href和window.open的几种用法和区别
Dec 02 #Javascript
js实现一款简单踩白块小游戏(曾经很火)
Dec 02 #Javascript
JavaScript 自定义html元素鼠标右键菜单功能
Dec 02 #Javascript
You might like
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
php-msf源码详解
2017/12/25 PHP
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
Python 字典与字符串的互转实例
2017/01/13 Python
Django 路由控制的实现代码
2018/11/08 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
医学生自我评价
2014/01/27 职场文书
教师党员承诺书
2014/03/25 职场文书
指导教师评语
2014/04/26 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
校车安全管理责任书
2015/05/11 职场文书