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 相关文章推荐
javascript 判断数组是否已包含了某个元素的函数
May 30 Javascript
html中table数据排序的js代码
Aug 09 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
Feb 26 Javascript
javascript实现字符串反转的方法
Feb 05 Javascript
JavaScript函数柯里化详解
Apr 29 Javascript
jquery获取所有选中的checkbox实现代码
May 26 Javascript
JS中script标签defer和async属性的区别详解
Aug 12 Javascript
js评分组件使用详解
Jun 06 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
Aug 25 Javascript
微信小程序绑定手机号获取验证码功能
Oct 22 Javascript
vue使用vant中的checkbox实现全选功能
Nov 17 Vue.js
vue实现在data里引入相对路径
Jun 05 Vue.js
微信小程序实现图片压缩
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
php在线代理转向代码
2012/05/05 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
python去除所有html标签的方法
2015/05/05 Python
怎样使用Python脚本日志功能
2016/08/14 Python
Python数据操作方法封装类实例
2017/06/23 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
Python实现合并excel表格的方法分析
2019/04/13 Python
python 将字符串完成特定的向右移动方法
2019/06/11 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
pandas数据拼接的实现示例
2020/04/16 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
一套软件测试笔试题
2014/07/25 面试题
建筑专业毕业生推荐信
2013/11/21 职场文书
创先争优标语
2014/06/27 职场文书
离职报告范文
2014/11/04 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python