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 相关文章推荐
网上应用的一个不错common.js脚本
Aug 08 Javascript
jQuery 处理表单元素的代码
Feb 15 Javascript
JQuery入门—编写一个简单的JQuery应用案例
Jan 03 Javascript
jquery zTree异步加载简单实例分享
Feb 05 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
Jan 07 Javascript
Javascript 高阶函数使用介绍
Jun 15 Javascript
Angularjs中UI Router的使用方法
May 14 Javascript
Bootstrap模态框禁用空白处点击关闭
Oct 20 Javascript
JS实现商品筛选功能
Aug 19 Javascript
jQuery选择器之基本选择器用法实例分析
Feb 19 jQuery
Vue-cli打包后如何本地查看的操作
Sep 02 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
BBS(php &amp; mysql)完整版(三)
2006/10/09 PHP
常用PHP封装分页工具类
2017/01/14 PHP
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
python基于http下载视频或音频
2018/06/20 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
python实现简单井字棋小游戏
2020/03/05 Python
树莓派升级python的具体步骤
2020/07/05 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
深入浅析HTML5中的SVG
2015/11/27 HTML / CSS
客服文员岗位职责
2013/11/29 职场文书
关于爱情的广播稿
2014/01/16 职场文书
就业协议书的作用
2014/04/11 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
收入证明申请书
2015/06/12 职场文书
地震捐款简报
2015/07/21 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
python 制作一个gui界面的翻译工具
2021/05/14 Python
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记
Python进程池与进程锁之语法学习
2022/04/11 Python