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 相关文章推荐
jQuery 加上最后自己的验证
Nov 04 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
Jan 13 Javascript
分享一个自己写的简单的javascript分页组件
Feb 15 Javascript
Javascript技术栈中的四种依赖注入详解
Feb 23 Javascript
JQuery 的跨域方法推荐_可跨任何网站
May 18 Javascript
jQuery插件formValidator实现表单验证
May 23 Javascript
js获取元素的标签名实现方法
Oct 08 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
Mar 03 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
Sep 19 Javascript
详解如何理解vue的key属性
Apr 14 Javascript
django简单的前后端分离的数据传输实例 axios
May 18 Javascript
浅谈Vue static 静态资源路径 和 style问题
Nov 07 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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
关于python的bottle框架跨域请求报错问题的处理方法
2017/03/19 Python
Python格式化输出%s和%d
2018/05/07 Python
Django实现单用户登录的方法示例
2019/03/28 Python
python数据挖掘需要学的内容
2019/06/23 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
Python数据可视化图实现过程详解
2020/06/12 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
Python实现疫情地图可视化
2021/02/05 Python
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
幼儿园中班评语大全
2014/04/17 职场文书
经典演讲稿汇总
2014/05/19 职场文书
中学生思想品德评语
2014/12/31 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL